1.Destination Unreachable(目的不可达)
数据报传输过程中,路由器可能因某种原因无法确定到达目的网络的路径,或目的主机中不存在数据报报头中指定的上层协议,或某个端口不是活动端口,此时路由器或目的主机都会丢弃该数据报,并向源主机送出一个Destination Unreachable报文。该报文是一个差错报告报文,其类型值Type=3,供路由器和目的主机使用。图5-15所示为该报文格式。
图5-15 Destination Unreachable的格式
代码字段的值表示该数据报出错的原因。
Code=0:网络不可达(net unreachable),表示路由器找不到此网络到达目的网络的路径。
Code=l:主机不可达(host unreachable),表示路由器找不到目的主机,可能因为目的主机已关闭。
Code=2:协议不可达(protocol unreachable),表示数据报中指定的高层协议(UDP或TCP)不可用。
Code=3:端口不可达(port unreachable),表示数据报要交付的应用程序(进程)未运行。
Code=4:需要分段,当DF置1,表示数据报被设置为不可分割。但不进行分割就不能进行路由选择。
Code=5:源路由失败(source route failed),表示源路由选项中定义的一个或多个路由器无法通过。
Code=6:目的网络未知(unknown destination network),表示路由器不能识别目的网络。这与代码0不同,代码0表示路由器知道目的网络存在,但由于某些原因而不能到达;而代码6表示路由器根本没有关于目的网络的信息,不能识别目的网络。
Code=7:目的主机未知(unknown destination host),表示路由器不能识别目的主机。这与代码1不同,代码1表示路由器知道目的主机存在,但由于某些原因而不能到达;而代码7表示路由器根本没有关于目的主机的信息,不能识别目的主机。
Code=8:源主机被隔离(source host isolated),现在已弃用。
Code=9:目的网络管理上禁止(communication with destination network prohibited),表示禁止访问目的网络。
Code=10:目的主机管理上禁止(communication with destination host prohibited),表示禁止访问目的主机。
Code=11:对指定的服务类型,网络不可达(network unreachable for type of service),表示由于得不到指定的服务类型而不能访问目的网络。
Code=12:对指定的服务类型,主机不可达(host unreachable for type of service),表示由于得不到指定的服务类型而不能访问目的主机。
Code=13:过滤的通信管理禁止(communication administratively prohibited),表示对该主机的访问被禁止,因为管理机构在该主机上设置了过滤器。
Code=14:违反主机优先级(host precedence violation),表示所请求的优先级对该主机是不允许的。
Code=15:优先级中止生效(precedence cutoff in effect),此报文很少产生。当网管员采用运行该网络最小优先级时即产生此报文,但此报文将以比此优先级更低的优先级发送。
2.Source Quench(源主机消亡)
由上所述,IP协议是无连接协议,缺乏流量控制机制,容易导致路由器或目的主机被过多的数据报阻塞,目的主机可能因缓冲存储器空间不足,来不及接收到达数据报,必须将数据报丢弃;或路由器可能因为数据报进入的速度太快而来不及转发或处理,从而必须丢弃。当目的主机或路由器将数据报丢弃后,向源主机发送Source Quench报文。该报文为差错报告报文,其类型值Type=4,代码Code=0,要求源端减慢数据报的传输速率。图5-16为该报文格式。
图5-16 Source Quench的格式
源主机在接收到Source Quench报文时,必须将此信息传给高层进程(如TCP),高层进程对此信息做出响应,减慢数据报的传输速率,直到不再收到此报文为止,然后源主机逐渐提高数据报的传输速率,直到再次收到Source Quench,不断重复上述过程以保持最高传输速率。
3.Time Exceeded(超时)
如前所述,每个IP数据报都有一个TTL值限制其在网络中能够存在的最长时间。当路由器收到TTL值为0的数据报时,必须将其丢弃,并向源主机发送一个Time Exceeded报文。该报文为差错报告报文,其类型值Type=11。图5-17给出该报文格式。
代码字段的值表示超时原因。
Code=0:在传输中超时(仅为路由器使用)。当路由器收到TTL值为0的数据报时,必须将此数据报丢弃,并向源主机送出一个代码为0的Time Exceeded报文。
图5-17 Time Exceeded的格式
Code=l:在重组中超时(仅为目的主机使用)。当目的主机在规定的时间内没有收到所有的分段时,必须将已收到分段丢弃,并向源主机送出一个代码为1的Time Exceeded报文。
4.Parameter Problem(参数问题)
数据报传输中,如路由器或目的主机发现其报头参数有问题,无法转发或处理该数据报,则必须将该数据报丢弃,并向源主机发送一个Parameter Problem报文。该报文为差错报告报文,其类型值Type=12,图5-18给出该报文格式。
图5-18 Parameter Problem的格式
代码字段的值反映丢弃该数据报的原因,指针字段的值准确指明出现错误的位置。
Code=0:表示在原始数据报报头的某个字节中出现错误,此时指针字段的值指向出现错误的位置。例如,若指针值为0,则表示第一个字节(VER或IHL)出现错误;若指针值为1,则表示第二个字节(TOS字段)出现错误。
Code=l:表示路由器或目的主机需要某一特定的选项,但原始数据报并未提供此选项。在这种情况下不使用指针。
5.Redirect(重定向)
为简化源主机在系统中的生成,源主机的路由选择表在最初建立时包含的路由选择信息很少,通常只包含默认路由器的IP地址。因此,源主机可能会把某数据报发送给一个错误的路由器,而其实这个数据报应发送给另一个网络。在这种情况下,收到这个数据报的路由器会把数据报转发给正确的路由器,同时向源主机发送Redirect报文,通知源主机可获得一条更好的传输路径,要求更新源主机的路由选择表。
Redirect报文是一个特殊的差错报告报文。发送Redirect报文的路由器不会丢弃数据报,而是把数据报转发给正确的路由器。图5-19所示为Redirect报文格式。
图5-19 Redirect的格式
代码字段值给出4种不同类型的重定向服务。
Code=0:对网络重定向。
Code=l:对主机重定向。
Code=2:对服务类型和网络重定向。
Code=3:对服务类型和主机重定向。
需注意,如数据报携带LSRR和SSRR选项,而且路由器地址也在选项中的路由数据字段中,则此路由器不能送出Redirect报文,即使存在更好的传输路径也一样。
6.Echo Request/Reply(回送请求/应答)(www.xing528.com)
Echo Request和Echo Reply是一对查询报文,用于测试两个计算机(主机或路由器)之间能否实现通信。图5-20给出Echo Request/Reply报文格式。
Type=8表示这是回送请求(Echo Request)报文。
Type=0表示这是回送应答(Echo Reply)报文。
Identifier字段由源端设定,用做对比的识别ID,其值可能是0。
Sequence Number由源端设定,用做对比的序号,其值可能是0,可随回送请求而递增。
图5-20 Echo Request/Reply的格式
源主机或路由器创建回送请求报文,并发送给目的主机或路由器;收到回送请求报文的主机或路由器创建回送应答报文,并将其返回源主机或路由器。
回送请求和回送应答报文可用来确定两个计算机在IP层级是否能通信。因为ICMP报文被封装成IP数据报的形式传送,如发送回送请求报文的计算机可以收到回送应答报文,就证明了在发送端和接收端之间可以进行数据报的通信。
回送请求报文和回送应答报文还可用来测试某主机是否可达,通常是调用ping命令来实现。ping命令使用回送请求和回送应答,并具有指定请求的时间间隔和发送请求的次数。
7.Timestamp and Timestamp Reply(时间戳和时间戳应答)
Timestamp和Timestamp Reply是一对查询报文,用于确定IP数据报在源端和目的端之间往返所需要的时间,也可用做源端和目的端计算机的时钟同步。图5-21给出该报文格式。
Type=13表示是时间戳请求(Timestamp)报文。
Type=14表示是时间戳应答(Timestamp Reply)报文。
Identifier字段由源端设定,用做对比的识别ID,其值可能是0。
图5-21 Timestamp和Timestamp Reply的格式
Sequence Number字段由源端设定,用做对比序号,其值可能是0,可随时间戳请求而递增。
3个时间戳字段都是32位,表示从通用时间(Universal Time,UT)的午夜起测量的时间,以ms为计算单位。理论上32位的时间戳字段可表示范围是0~4294967295,但规定一个时间戳值不能超过86400000=24×60×60×1000,如无法以ms为计算单位,或无法从通用时间的午夜起开始测量,一个代替的方法就是把时间戳的高序号位设为l,表示时间戳的值是非标准值,这样就可将任何时间标准测量的时间值插入时间戳中。
源端创建时间戳请求报文,在原始时间戳字段中填入它把请求报文发送出去的时间,其他两个时间戳字段都填入0。
目的端创建时间戳应答报文,将请求报文中的原始时间戳的值复制到应答报文中的原始时间戳字段中,在接收时间戳字段中填入它收到请求报文的时间,在发送时间戳字段中填入它把应答报文转发出去的时间。
时间戳请求和时间戳应答报文可以用来测量数据报从源端到目的端之间往返所需要的时间,计算公式为:
发送时间=接收时间戳的值-原始时间戳的值
接收时间=分组返回的时间-发送时间戳的值
往返时间=发送时间+接收时间
当源端时钟和目的端时钟同步时,发送时间和接收时间的值准确;但当源端时钟和目的端时钟不同步时,往返时间的计算也准确,这是因为每一个时钟在往返时间的计算中出现两次,抵消了不同步与同步的差别。
例如,知道单向传输时间(通常是往返时间一半),则可对源端时钟和目的端时钟进行同步,计算公式为:时间差=接收时间戳的值−(原始时间戳的值+单向传输时间)
实际上单向传输时间不严格等于往返时间的一半,所以运用上述方法计算的时间差并不精确,实现源端和目的端的时钟同步的最好方法是使用统计分析的平滑方法。
8.Address Mask Request/Reply(地址掩码请求/应答)
Address Mask Request和Address Mask Reply是一对查询报文,用于获得一个主机所在网络的子网掩码。图5-22给出该报文格式。
Type=17表示这是地址掩码请求(Address Mask Request)报文。
图5-22 Address Mask Request/Reply的格式
Type=18表示这是地址掩码应答(Address Mask Reply)报文。
Identifier字段由主机设定,用做对比的识别ID,其值可能是0。
Sequence Number字段由主机设定,用做对比的序号,其值可能是0。
Address Mask字段,表示该主机所在网络的子网掩码。在请求报文中,此字段为全0;在应答报文中,此字段就包含真正的子网掩码。
主机创建地址掩码请求报文,并发送给所在网络中的路由器。如主机知道该路由器IP地址,即把请求报文直接发送给路由器。如主机不知道路由器的地址,则在网络上广播这个报文。路由器收到地址掩码请求报文后,创建地址掩码应答报文并发送给主机,向主机提供所需的子网掩码。把子网掩码应用到完整IP地址中,通过与操作,就可得到子网地址。
9.Router Advertisement and Solicitations(路由器通告和请求)
Router Advertisement和Router Solicitations是一对查询报文,用于主机与路由器之间交换信息。如主机希望获得网络上的路由器的状态信息,或者把自己的地址通知路由器,它就会创建一个Router Solicitations报文,并在网上广播。图5-23给出该报文格式。
类型字段Type=10表示这是路由器请求(Router Solicitations)报文。
图5-23 Router Solicitations的格式
收到路由器请求报文的路由器,会创建一个Router Advertisement报文,并在网络上广播。
应注意,即使没有主机发送路由器请求报文,路由器也会周期性发送通告报文。路由器发送通告报文时,不仅通告自己的存在,而且通告网络上其他路由器。图5-24为报文格式。
图5-24 Router Advertisement的格式
Type=9表示是路由器通告(Router Advertisement)报文。
Lifetime字段表示路由地址的有效时间,以s为计算单位。
在通告中,每一个路由器的项目有两个字段:路由器地址和地址参考等级。路由器地址表示发送路由器的真正IP地址;地址参考等级表示路由器的等级。如地址参考等级为0,则此路由器被认为是默认路由器。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。