网络编程之IPv4与IPv6相互操作

网络编程之IPv4与IPv6相互操作

ID:41033432

大小:105.07 KB

页数:3页

时间:2019-08-14

网络编程之IPv4与IPv6相互操作_第1页
网络编程之IPv4与IPv6相互操作_第2页
网络编程之IPv4与IPv6相互操作_第3页
资源描述:

《网络编程之IPv4与IPv6相互操作》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、网络编程之IPv4与IPv6相互操作由于互联网终端不断增加,IPv4地址长度(32位)已不能够满足要求,所以出现了IPv6地址(128位),但是现有应用程序大部分还是采用IPv4地址形式,所以必须解决IPv4与IPv6之间的相互操作,使现有基于IPv4的应用程序能够与基于IPv6的应用程序相互通信。那么我们怎么实现IPv4客户端与IPv6服务器、IPv6客户端与IPv4服务器之间的通信。IPv4客户端与IPv6服务器假设我们主机是运行双栈,即存在IPv4协议栈和IPv6协议栈,双栈主机上的IPv6服务器既能处理IPv4客户端,也

2、能处理IPv6客户端,因为IPv4可以映射成IPv6地址。下图是IPv4客户端与IPv6服务器之间的通信过程:IPv6服务器程序创建的套接字绑定到IPv6通配地址和TCP端口号9999。假设客户端和服务器主机都处于同一个以太网,当左侧两个客户端都发送SYN报文段请求与服务器建立连接时,IPv4客户端主机在一个IPv4数据报中载送SYN,IPv6客户端主机在一个IPv6数据报中载送SYN。在以太网线上包含以太网首部、IP首部、TCP首部以及TCP数据,根据以太网首部中包含的类型字段区分IP类型是为IPv4还是IPv6,因此IP首部

3、中的目的IP地址格式根据以太网类型字段分为IPv4地址和IPv6地址。两者的TCP首部是一样的,TCP首部中包含目的端口号(即IPv6服务器的端口号9999)。服务器的接收数据链路通过查看以太网类型字段把每帧传递给相应的IP模块。IPv4模块结合其上的TCP模块检测到IPv4数据报的目的端口对应的是一个IPv6套接字,于是把该数据报IPv4首部中的源IPv4地址转换成一个等价的IPv4映射的IPv6地址。当accept系统调用把这个已经接受的IPv4客户端连接返回给服务器进程时,这个映射后的地址将作为客户的IPv6地址返回给服务

4、器的IPv6套接字(也就是说服务器根本不知道自己是在跟IPv4客户端通信,客户端也不知道自己和IPv6的服务器通信),该连接上其余的数据报都是IPv4数据报。对于IPv6客户端,当accept系统调用把接受的IPv6客户端连接返回给服务器进程时,该客户的IPv6地址就是原来IPv6首部中的源地址,不需要进行映射,该连接上其余的数据报都是IPv6数据报。IPv4的TCP客户端与IPv6的TCP服务器之间通信的步骤如下:首先启动IPv6服务器,创建一个IPv6的监听套接字,并且该服务器把通配地址和端口号9999绑定到该套接字上;IP

5、v4客户端调用gethostbyname函数找到服务器主机的一个A记录,服务器同时包含A记录和AAAA记录,即同时支持IPv4和IPv6,对于IPv4客户端来说只需要A记录即可;IPv4客户端调用connect函数向服务器发出连接请求,即客户端主机向服务器主机发送一个IPv4的SYN数据报(该IPv4的SYN中的目的地是IPv6套接字);服务器主机接收到来自客户端的IPv4的SYN数据报后,设置一个标志指示本连接应使用IPv4映射的IPv6地址,并响应一个IPv4的SYN和ACK数据报。当该链接建立后,由accept函数把这个I

6、Pv4映射的IPv6地址返回给服务器;当服务器主机往这个IPv4映射的IPv6地址发送TCP报文段时,其IP栈产生目的地址为所映射IPv4地址的IPv4载送数据报。即客户端和服务器之间所有通信都使用IPv4的载送数据报;IPv6客户端与IPv4服务器IPv6的TCP客户端与IPv4的TCP服务器之间通信的步骤如下:首先启动IPv4服务器,创建一个IPv4的监听套接字;IPv6客户端调用getaddrinfo函数查找IPv6地址;IPv6客户端在作为函数参数的IPv6套接字地址结构中设置这个IPv4映射的IPv6地址后调用conn

7、ect函数向服务器发出连接请求,内核检测到这个映射地址后,自动向服务器主机发送一个IPv4的SYN数据报;服务器主机接收到来自客户端的IPv4的SYN数据报后,响应一个IPv4的SYN和ACK数据报。连接通过使用IPv4数据报建立;总结双栈主机上的IPv6服务器既能服务于IPv4客户,又能服务于IPv6客户。IPv4客户发送给这种服务器的仍然是IPv4数据报,不过服务器的协议栈会把客户主机的地址转换成一个IPv4映射的IPv6地址。类似地,双栈主机上的IPv6客户能够与IPv4服务器通信,客户的解析器会把服务器主机所有的A记录作

8、为IPv4映射的IPv6地址返回给客户,而客户指定这些地址之一调用connect将会使双栈发送一个IPv4的SYN数据报。为了使套接字编程具有可移植性,在编程实现过程中,尽量避免使用gethostbyname和gethostbyaddr函数,而应该使用getad

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。