首页 > 其他分享 >值得学习的ICMPv6 协议

值得学习的ICMPv6 协议

时间:2022-12-18 22:37:42浏览次数:41  
标签:协议 回显 值得 报文 MTU ICMPv6 PMTU Byte

在IPv4中,路由器使用ICMP向源节点报告向目的地传输IP报文过程中的错误和信息。它为诊断、信息通知和管理目的定义了一些消息,如目的不可达、报文超长、超时、回显请求和回显应答等。在IPv6中,ICMPv6除了提供ICMPv4常用的功能之外,还作为其他一些功能的基础,如邻居发现、无状态地址配置(包括重复地址检测)、PMTU发现等。

ICMPv6的协议类型号(即IPv6报文中的Next Header字段的值)为58。ICMPv6报文的格式:

值得学习的ICMPv6 协议_ICMPv6

报文中部分各字段的含义如下:

  • Type:表明消息的类型,0~127表示错误报文类型,128~255表示消息报文类型。
  • Code:表示此消息类型细分的类型。
  • Checksum:表示ICMPv6报文的校验和。

ICMPv6错误报文用于报告在转发IPv6报文过程中出现的错误。ICMPv6目的不可达错误报文可以分为以下5种:

  • 0:没有能到达目标的路由(路由表中,没有与目标相匹配的路由)
  • 1:与目标的通信被管理策略禁止(与目标的通信被管理策略禁止,通常是被防火墙丢弃)
  • 2:超出源站的地址范围(目标节点地址不在源站点地址的范围内。当数据包被一个不在源地址范围内的网络接口转发时,由路由器发送该类型报文)
  • 3:地址不可到达(目的地址不可到达。在无法解析目标的链路层地址时,发送该类型报文)
  • 4:端口不可到达(通常是由于包含UDP报文的IPV6数据包到达了目标,但是在目标中却没有应用程序侦听UDP端口)

ICMPv6信息报文提供诊断功能和附加的主机功能,比如组播侦听发现和邻居发现。常见的ICMPv6信息报文主要包括Echo Request(回显请求)报文Echo Reply(回显应答)报文,这两种报文也就是通常使用的Ping报文。

  • 回显请求报文:将回显请求报文发送到目标节点,以使目标节点立即发回一个回显应答报文。回显请求报文的Type字段值为128,Code字段的值为0。
  • 回显应答报文:当收到一个回显请求报文时,ICMPv6会用回显应答报文响应。回显应答报文的Type字段的值为129,Code字段的值为0。

在IPv4中,报文如果过大,必须要分片进行发送,所以在每个节点发送报文之前,设备都会根据发送接口的MTU来对报文进行分片。但是在IPv6中,为了减少中间转发设备的处理压力,中间转发设备不对IPv6报文进行分片,报文将由发送者进行分片。当中间转发设备的接口收到一个报文后,如果发现报文长度比转发接口的MTU值大,则会将其丢弃;同时将转发接口的MTU值通过ICMPv6的报文过大错误报文发给源端主机,源端主机以该值重新发送IPv6报文,这样带来了额外流量开销。PMTU发现协议可以动态地收集整条传输路径上各链路的MTU值,减少由重传带来的额外流量开销

PMTU协议是通过ICMPv6的报文过大错误报文来完成的。首先源节点假设PMTU就是其出接口的MTU,发出一个试探性的报文,当转发路径上存在一个小于当前假设的PMTU时,转发设备就会向源节点发送报文过大错误报文,并且携带自己的MTU值,此后源节点将PMTU的假设值更改为新收到的MTU值,然后继续发送报文。如此反复,直到报文到达目的地之后,源节点就能获得到达目的地的PMTU了。

PMTU的工作过程如图下图所示:

值得学习的ICMPv6 协议_ICMPv6_02

该示例中,整条传输路径包含了4条链路,每条链路的MTU分别是1500 Byte、1400 Byte和1300 Byte,当源节点发送一个分片报文的时候,首先按照PMTU为1500 Byte进行分片并发送分片报文,当到达MTU为1400 Byte的出接口时,设备返回报文过大错误报文,同时携带MTU值为1400 Byte的信息。源节点接收到之后会将报文重新按照PMTU为1400 Byte进行分片,并再次发送一个分片报文,当分片报文到达MTU值为1300 Byte的出接口时,同样返回报文过大错误报文,携带MTU值为1300 Byte的信息。之后源节点重新按照PMTU为1300 Byte进行分片并发送分片报文,最终到达目的地,这样就找到了该路径的PMTU。

由于IPv6要求链路层所支持的最小MTU为1280 Byte,所以PMTU的值必须大于等于1280 Byte。建议将1500 Byte作为链路的PMTU值

标签:协议,回显,值得,报文,MTU,ICMPv6,PMTU,Byte
From: https://blog.51cto.com/key3feng/5951165

相关文章

  • DNS用的是TCP协议还是UDP协议
    DNS占用53号端口,同时使用TCP和UDP协议。那么DNS在什么情况下使用这两种协议?DNS在区域传输的时候使用TCP协议,其他时候使用UDP协议。(一)TCP与UDP简介TCP---传输控制协议,是......
  • 网站打算使用 https 协议
    Https协议加密更安全,我打算让网站支持https。不过当前使用的PortableAllegroServe好像对https支持得不太好,而另一个LispWeb服务器软件Hunchentoot也是支持htt......
  • TCP协议
    一、TCP协议介绍TCP(TransmissionControlProtocol,传输控制协议/网际协议),也叫网络通讯协议,是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TC......
  • unix网络编程2.8——高并发服务器(八)unix网络编程系统调用与网络协议栈
    目录系列文章unix网络编程1.1——TCP协议详解(一)unix网络编程2.1——高并发服务器(一)基础——io与文件描述符、socket编程与单进程服务端客户端实现unix网络编程2.2——高并......
  • 网络编程 -5-通讯协议-2022-12-17
    大事化小-分层  TCP/IP协议簇,实际上是一组协议    重要    1、TCP 用户传输协议    2、UDP用户数据包协议   出名的协议   ......
  • IP地址\端口和协议
    IP地址IP地址,类似生活中的地址,代表的是网络设备在网络中的具体位置,用于访问设备而用.就网络而言,普遍分为局域网和公网.端口计算机中通过端口来区分不同的服务.外面通......
  • 安全多方计算(1):不经意传输协议
    学习&转载文章:安全多方计算(1):不经意传输协议前言在安全多方计算系列的首篇文章(安全多方计算之前世今生)中,我们提到了百万富翁问题,并提供了百万富翁问题的通俗解法,该通......
  • OSI七层模型及对应的传输协议
    网络分层功能:高层=>负责主机之间的数据传输;中层=>负责网络互连;低层=>负责介质传输;OSI七层模型:高层包含:应用层、表示层、会话层;中层包含:传输层和网络层;低层包含:数据链路层和......
  • 第十五章《网络编程》第3节:基于TCP协议的网络编程
    如果希望开发一个类似于QQ那样的即时通信软件,就必须使用基于TCP协议的编程技术。基于TCP协议的编程可以实现在通信两端建立虚拟网络链路,这样的话通信两端的程序就能通过虚拟......
  • 路由协议 OSPF
    OSPF(OpenShortestPathFirst)是一个内部网关协议(InteriorGatewayProtocol,简称IGP),一个链路状态路由选择协议,用于在单一自治系统(autonomoussystem,AS)内决策路由。......