ipv6/ipv4双栈应用服务器开发细节

公司的楼宇对讲云平台项目需要为北美客户部署一套,美国T-mobile运营商的4G网络已经是纯ipv6的环境了,所以必须让平台支持ipv4/ipv6双栈网络模式。

让平台支持双栈,只按照以下几个步骤来处理即可:

1、主机保证有ipv4、ipv6两个网路地址。(国内实验室测试的时候,ipv6地址可以通过隧道临时配置);

2、让服务监听在ipv6的模式下(这样既可以接收ipv4客户端,也可以接收ipv6客户端。如果监听在ipv4模式下,则只能接受ipv4客户的连接),具体见下面的实例代码:

相关代码如下:

listen_fd_ = socket(AF_INET6,SOCK_STREAM, 0);
struct sockaddr_in6 server_addr;
bzero(&server_addr, sizeof(server_addr));
server_addr.sin6_family = AF_INET6;
server_addr.sin6_addr = in6addr_any;
server_addr.sin6_port = htons(PORT);
            		
ret = bind(listen_fd_, (struct sockaddr*)&server_addr, sizeof(server_addr));

3、客户端判断自己的网络环境,如果是ipv4则连接服务器的ipv4地址,若ipv6则连接服务器的ipv6地址即可。因为服务器监听在ipv6的模式下,所以ipv4的客户端到达服务器时,服务器主机内核的网络模块会自动将ipv4地址补齐到ipv6的地址格式(具体补齐方式是前面补充::ffff)。如下两个地址,分别表示ipv4客户端跟ipv6客户端通过tcp连接到服务器时,服务器的日志打印内容:

connection from [::ffff:47.91.73.215]:35768     

connection from [2001:470:1f04:10ce:a00:4dc1::]:47308

4、以上。其实unp已经阐述得很详细了,各位同仁开发时可以参考下。

你可能感兴趣的:(网络编程)