《深入解析IPv6(第3版)》——10.2 IPv6端到端的传输过程

简介:

本节书摘来自异步社区《深入解析IPv6(第3版)》一书中的第10章,第10.2节,作者: 【美】Joseph Davies 更多章节内容可以访问云栖社区“异步社区”公众号查看。

10.2 IPv6端到端的传输过程

在下面这一节中,我们将描述发送主机发出IPv6包,经过一个或多个IPv6路由器,并由最终目的接收的过程。在这个示例中,我们假设数据没有出现“逐跳可选项”、“目的可选项”和“路由”扩展头部。

10.2.1 发送方主机的IPv6
当IPv6主机向任意单播目的地址发送数据包时,会使用如下算法。

1.将跳数限制字段值设置为默认值或应用指定值。

2.在目的缓存中查找匹配目的地址的条目。对运行Windows Server 2012、Windows Server 2008 R2、Windows Server 2008、Windows 8、Windows 7和Windows Vista的计算机,可以使用命令netsh interface ipv6 show destinationcache来查看目的缓存。

3.如果在目的缓存中找到了匹配目的地址的一个条目,则在目的缓存中获取下一跳地址和接口。跳到第9步。

4.如果没有数据包的源地址,则执行非约束路由查找。

5.如果有数据包的源地址,且源接口启用了强主机发送行为,则执行约束路由查找。

6.如果有数据包的源地址,且源接口禁用了强主机发送行为,则执行非约束路由查找。

7.如果有最长匹配的可用路由,则通过该路由判断转发数据包的下一跳接口和地址。

如果没有最长匹配的可用路由,提示错误。

8.更新目的缓存。

9.在邻居节点缓存中检查与下一跳地址匹配的条目。对运行Windows Server 2012、Windows Server 2008 R2、Windows Server 2008、Windows 8、Windows 7和Windows Vista的服务器,可以使用netsh interface ipv6 show neighbors命令查看邻居节点缓存。对于运行Windows Server 2012和Windows 8系统的计算机,也可以使用Windows PowerShell命令Get-NetNeighbor来查看邻居节点缓存。

10.如果在邻居节点缓存中找到与下一跳地址匹配的条目,则获得链路层地址。转到第12步。

11.如果在邻居节点缓存中没有找到与下一跳地址匹配的条目,则使用地址解析以获得下一跳地址的链路层地址,并在目的缓存中添加条目。

如果地址解析不成功,提示错误。

12.使用邻居节点缓存条目的链路层地址来发送数据包。

注释

对于分配给发送方主机的单播目的地址,IPv6会跳过第9步到第11步之间的过程。
图10-1所示为发送主机过程。

10.2.2 路由器的IPv6
当接收并转发数据包到任意单播或任播目的地址时,IPv6路由器会执行如下算法。

1.执行可选的头部错误检查,例如确保版本字段设置为6以及源地址不是环回地址(::1)或组播地址。

2.验证IPv6数据包中的目的地址是否对应于分配给路由器接口的地址。

如果是,则将IPv6数据包作为目的主机处理(参阅本章“目的主机的IPv6”小节的第3步)。

3.将跳数限制字段的值减1。

如果跳数限制字段的值小于1,则向发送者发送“ICMPv6超时-超过传输消息中的跳数限制”消息,并丢弃这个数据包。

4.如果跳数限制字段的值大于0,则更新数据包中IPv6头部的跳数限制字段。

5.在目的缓存中查找与目的地址匹配的条目。


<a href=https://yqfile.alicdn.com/d086ccc585ddc4026737d4a683592658bc6014f1.png" >

如果在目的缓存中找到与目的地址匹配的条目,则从目的缓存条目中获得下一跳接口和地址。转到第9步。

6.检查本地IPv6路由表,选择到达目的IPv6地址最长匹配而又度量最小的可用路由。

7.根据选中的路由确定下一跳地址和用于转发数据包的地址。

如果没有找到路由,则向发送主机发送“ICMPv6目的不可达-没有到达目的地址的路由”消息,并丢弃这个数据包。

8.更新目的缓存。

9.如果接收到数据包的接口与数据包正在被转发的接口相同,同时接口是点到点链路,并且目的地址字段与接口分配的前缀匹配,则向发送主机发送“ICMPv6目的不可达-地址不可达”消息并丢弃这个数据包。这避免了在点到点链路上的两个接口之间毫无意义地来回转发IPv6数据包,这个数据包目的地址与点到点链路的前缀匹配,但是并不匹配其中任何一个接口的地址。

10.如果接收到数据包的接口和数据包正在被转发的接口一样,并且源地址字段与接口分配的前缀匹配,则向发送方主机发送重定向消息。

11.将下一跳接口的链路最大传输单元(MTU)和正在被转发的IPv6数据包的尺寸进行比较。

如果链路MTU小于数据包长度,则向发送主机发送“ICMPv6数据包过大”消息并丢弃数据包。

12.在邻居节点缓存中查找与下一跳地址匹配的条目。

13.如果在邻居节点缓存中找到了与下一跳地址相匹配的条目,则获得链路层地址。转到第15步。

14.如果在邻居节点缓存中没有找到与下一跳地址匹配的条目,则通过地址解析来获得下一跳地址的链路层地址并向邻居节点缓存中添加条目。

如果地址解析失败,则向发送主机发送“ICMPv6目的不可达-地址不可达”消息并丢弃这个数据包。

15.使用邻居节点缓存条目的链路层地址发送数据包。

图10-2和图10-3所示为路由器转发过程。

在源和目的主机之间的每台路由器上都会重复这整个过程。

10.2.3 目的主机的IPv6
当接收到IPv6数据包时,IPv6主机会执行如下算法。

1.执行可选的头部错误检查,例如确保版本字段设置为6以及源地址不是环回地址(::1)或组播地址。

2.验证IPv6数据包中的目的地址是否对应于分配给本地主机接口的IPv6地址。

如果该目的地址没有分配给本地主机接口,则丢弃这个IPv6数据包。

3.如果对于接收的数据包支持强主机模式,则验证接收数据包的接口是否分配了IPv6数据包中的目的地址。如果IPv6数据包中的目的地址没有分配给接收到它的接口,则丢弃这个数据包。

运行Windows Server 2012、Windows Server 2008 R2、Windows Server 2008、Windows 8、Windows 7和Windows Vista的计算机默认支持对于接收IPv6数据包的强主机模型。可以使用netsh interface ipv6 set interface InterfaceNameOrIndex weakhostreceive= enabled命令以启用对于接收IPv6数据包的弱主机模型。对于运行Windows Server 2012或Windows 8系统的计算机,也可以使用Windows PowerShell中的命令Set-NetIPInterface -InterfaceAlias Name -AddressFamily IPv6 -WeakHostReceive enabled来实现这一功能。

4.根据下一个头部字段,来处理扩展头部(如果该数据包带有扩展头部的话)。

5.验证下一个头部字段值的协议是否存在。

如果协议不存在,则向发送者发送回“ICMPv6参数问题-下一个头部类型无法识别”消息并丢弃这个数据包。

6.如果上层协议数据单元(PDU)不是传输控制协议(TCP)段或用户数据报协议(UDP)消息,则将上层PDU传送给相应的协议。

7.如果上层PDU是TCP段或UDP消息,则检查目的端口。

如果该UDP端口号没有对应的应用,则向发送方发送回“ICMPv6目的不可达-端口不可达”消息并丢弃数据包。如果该TCP端口号上没有对应的应用,则向发送方发送TCP连接重置,并丢弃这个数据包。

8.如果在该UDP或TCP目的端口上存在应用,则处理TCP段或UDP消息的内容。


0bfdfb018e755d46a8a0e5e860b93365cf09b058


f29a85d18ed532cc25683ac992baf493bea5db70


7c12aa89a9da4458dba1f9463087791f215ed0ad
相关文章
|
7月前
|
SQL 关系型数据库 数据管理
Datahub实践——Sqllineage解析Sql实现端到端数据血缘
Datahub实践——Sqllineage解析Sql实现端到端数据血缘
886 1
|
5天前
|
域名解析 缓存 网络协议
【域名解析DNS专栏】IPv6与DNS:兼容性挑战与解决方案
【5月更文挑战第29天】随着IPv6逐渐成为互联网主流,DNS面临兼容性挑战,包括解析机制差异、资源记录类型扩展和查询流程优化。为解决这些问题,可采取升级DNS系统以支持IPv6、部署双栈DNS服务和优化DNS缓存策略。通过这些措施,可确保IPv6环境下的域名解析顺利进行。
|
19天前
|
Web App开发 存储 网络协议
C/C++ 数据结构设计与应用(四):C++数据压缩与传输:从理论到实践的全景解析
C/C++ 数据结构设计与应用(四):C++数据压缩与传输:从理论到实践的全景解析
128 3
|
19天前
|
编解码 移动开发 C++
RTMP协议深度解析:从原理到实践,掌握实时流媒体传输技术
RTMP协议深度解析:从原理到实践,掌握实时流媒体传输技术
194 0
RTMP协议深度解析:从原理到实践,掌握实时流媒体传输技术
|
存储 缓存 网络协议
基于TCP的DNS传输:实施要求
本文档是 Internet 工程任务组 (IETF) 的产品。它代表了 IETF 社区的共识。它已接受公众审查,并已获互联网工程指导小组 (IESG) 批准出版。有关 Internet 标准的更多信息,请参见 RFC 5741 的第 2 节。
587 0
基于TCP的DNS传输:实施要求
|
缓存 监控 网络协议
基于TCP的DNS传输:操作要求
本文档更新了RFC 1123和RFC 1536。本文档要求将允许DNS消息在Internet上通过TCP传输的操作实践作为当前最佳实践。此操作要求与RFC 7766中的实施要求一致。TCP的使用包括基于未加密TCP的DNS以及加密的TLS会话。该文件还考虑了这种形式的DNS通信的后果,以及在不支持当前最佳实践时可能出现的潜在运营问题。
389 0
基于TCP的DNS传输:操作要求
|
XML 存储 JavaScript
数据存储和传输文件之XML使用和解析详解
数据存储和传输文件之XML使用和解析详解
187 1
|
存储 网络协议 安全
数据原来是这么传输的(结合动画解析)
从1990年,世界上第一个互联网Web网页诞生,到现在2021年,已经过去了30多个年头。
139 0
数据原来是这么传输的(结合动画解析)
|
消息中间件 网络协议 Java
消息队列面试解析 - 传输协议(下)
消息队列面试解析 - 传输协议
128 0
|
消息中间件 移动开发 自然语言处理
消息队列面试解析 - 传输协议(上)
消息队列面试解析 - 传输协议
111 0

推荐镜像

更多