您的位置:首页 > 理论基础 > 计算机网络

TCP/IP详解卷一之ICMPv4和ICMPv6:Internet 控制报文协议

2019-01-11 16:33 369 查看

1 处理ICMP报文
—一般来说,传入的信息类请求报文将被操作系统自动处理;而差错类报文传递给用户进程或传输层协议,如TCP。
—处理传入的ICMPv6报文将应用以下规则:
· 如果可能的话,未知的ICMPv6差错报文必须传递给上层产生差错报文的进程;
· 未知的ICMPv6信息类报文被丢弃;
· ICMPv6差错报文将会尽可能多地包含导致差错的原始(”违规“)IPv6报文,当然最终的差错报文大小不能超过最小的IPv6MTU;
· 在处理ICMPv6差错报文时,需要提取原始(或”违规“)数据包的上层协议类型,用于选择适当的上层进程,如果这是不可能的,在任何IPv6层处理完后将无声地丢弃差错报文;
· 存在处理差错的特殊规则;
· IPv6节点必须限制它发送ICMPv6差错报文的速率:令牌桶法。

2 ICMP差错报文
—ICMP差错报文不会对以下报文进行响应:
· 另一个ICMP差错报文;
· 头部损坏的数据报,如校验和错误;
· IP层的广播和组播数据报;
· 封装在链路层广播或者组播帧中的数据报;
· 无效或者网络为零的源地址的数据报,即源地址不能为零地址、广播地址、组播地址或环回地址;
· 除第一个之外的其他分片。
—需要限制发送ICMP差错报文的速率,方法如:令牌桶法。
—当发送一个ICMP差错报文,它包含了一个完整的源自”违规“或”原始“数据报的IP头部副本,再加上原始数据报的IP有效载荷区中的任何其他数据,同时要确保生成的ICMP数据报的大小不会超过一个特定的值(对于IPv4,该值为576字节;对于IPv6,该值为IPv6的最小MTU)。
(1)ICMP目的不可达或数据包太大
1)ICMPv4主机不可达和ICMP6地址不可达
—ICMPv4主机不可达报文由是主机或路由器产生的,出现在当它被要求使用直接交付方法发送一个IP数据报到一个主机,但由于某些原因无法到达目的地时。
—对于ICMPv6,它使用一个有点不同的机制来检测无响应的主机,该报文可能是因为ND过程失败而产生的。
2)ICMPv6目的无路由
—此报文对ICMPv4中的主机不可达报文进行了细分,将直接交付失败导致的和没有路由导致的区分开来。
—此报文出现在当到达的数据报不必采用直接交付的方式来转发,但却没有路由条目来指定下一跳该用哪个路由器时的情况下。
3)ICMPv4管理禁止通信和ICMPv6目的管理禁止通信
—此报文表明一个管理禁令正阻止到目的地的成功通信。
—通常是由一个防火墙故意丢弃流量导致的。
4)ICMPv4端口不可达和ICMPv6端口不可达
—当传入的数据报的目的应用程序还没准备好接受它时,就会生成一个端口不可达报文。
—最常出现在和UDP一起使用,当一个报文被发往的端口号并未被任何服务器进程使用时。
5)ICMPv4 PTB
—如果一个IPv4路由器收到一个打算转发的数据报,如果数据报大于选定的传出网络接口的MTU,则数据报需要分片。如果到达的数据报在IP头部中设置了不分片位字段,那么它将被丢弃而不是转发,此时将产生ICMPv4目的不可达(PTB)报文。
—此报文既可用于诊断网络,又可用于路径MTU发现。
6)ICMPv6 PTB
—该报文不是一个目的不可达报文。
—在IPv6中只有数据报的发送者才能执行数据报分片,且总是采用MTU发现机制。
—该报文主要是被IPv6的PMTUD机制使用,但是偶尔也用在当一个到达的数据报对下一跳来说太大了导致不能传输的情况。
(2) ICMP重定向报文
—当一个路由器收到一个来自主机的数据报,并发现存在一个比自己更好的下一跳路由,则该路由器发送一个重定向报文到发送主机并将该报文发送到正确的路由器或者主机上,发送主机会根据接收到的重定向报文更新其转发表。以后目的地一样的流量就会被定向到新的节点中。
(3)ICMP超时报文
—每个IPv4数据报在头部中都有一个生存周期(TTL)字段,而每个IPv6数据报在头部中都有一个跳数限制字段。
—当由于TTL或跳数限制字段值太小致使路由器丢弃报文时,会产生ICMP超时报文。
—应用:traceroute工具。traceroute工具被用于确定从发送者到目的地路径上的路由器。方法如下:
· 首先,发送IPv4 TTL字段设置为1的数据报,到期的数据报促使沿途路由器发送ICMPv4超时报文;
· 然后,每一轮发送的数据报的TTL值增加1,导致数据报在更远一跳的路由器处超时,并产生一个ICMP超时报文。
(4)ICMP参数问题报文
—当一个主机或者路由器接收到一个IP数据报,其IP头部存在不可修复的问题时便会产生一个ICMP参数问题报文。
—当一个数据报不能够被处理,且没有其他的ICMP报文来描述这个问题时,这个报文充当了一个“包罗万象”的错误状态指示器。

3 ICMP 查询/信息类报文
(1)回显请求/应答
—ICMP的回显请求报文大小几乎是任意的(受限于最终封装的IP数据报的大小)。
—收到ICMP回显请求报文后,ICMP应答将任何接收到的数据返回给发送者,即使涉及多个IP分片。
—应用:ping程序。该程序通常被用于确定Internet上的一台主机是否可达。(注:和防火墙一起使用时,不能完全确定)
· 在ping的实现中,将ICMP报文的标识符字段设置为某个数,发送主机能够利用它来分离返回的应答。例如,在Unix系统中,使用发送进程的进程ID作为标识符字段。
· 当一个新的ping实例运行时,序列号字段从0开始,并且每发送一个回显请求报文便增加1。ping打印出每个返回的数据报的序列号,方便用户查看数据报是否丢失、重排或者重复了。
· ping程序也在传出的回显请求中的可选数据区域中包含了一份本地时间拷贝,这个时间和数据区域中剩余的内容均包含在返回的回显应答报文中。当接收到应答报文时,ping程序用当前时间减去应答中的时间,便得到了一个到达被ping的主机的RRT估计值。
(2)路由器发现:路由器请求和通告(ICMPv4)
—通告由路由器通过两种方法发送:
· 路由器定期对本地网络的所有主机组播地址(224.0.0.1)进行组播,并提供给有需要的主机。
· 使用组播将路由器请求报文发送到所有路由器组播地址上(224.0.0.2)。
—路由器发现的目的:让一台主机学习到它所在的本地子网中的所有路由器,因此它能从中选择一台作为默认路由。它也被用于发现那些愿意充当移动IP代理的路由器。
(3)组播路由器发现(IGMP、ICMPv6)
—可以和ICMPv6和IGMP一起使用,用来发现能够转发组播数据报和它们的一些配置参数的路由器。
—组播路由器发现(MRD)报文发送时总是将IPv4的TTL或IPv6的跳数限制字段设为1,并设有路由器警告选项,可能是如下类型之一:
· 通告:在配置的时间间隔定期地发送通告,表明路由器愿意转发组播流量。
· 请求:可用于请求路由器发送通告报文。
· 终止:表明路由器不再愿意转发组播流量了。

4 IPv6中的邻居发现
—IPv6中的邻居发现协议(ND)的两个主要部分是:
· 邻居请求/通告:在网络层和链路层地址之间提供类似于ARP的映射功能。
· 路由器请求/通告:提供的功能包括路由器发现、移动IP代理发现、重定向以及一些对自动配置的支持。
—ND报文就是ICMPv6报文,只是发送时IPv6的跳数限制字段值被设置为255。接收者通过验证进来的ND报文有这个值,以防止被非本链路上的发送者尝试发送假冒ICMPv6报文欺骗。
(1)ICMPv6路由器请求和通告
—路由器通告(RA)报文是由路由器发送到所有节点的组播地址(FF02::1)的,或者是发送到请求主机的单播地址——如果该通告是为了响应一个请求。
—RA报文通知本地主机和其他路由器关于本地链路的有关配置细节。
—路由器请求(RS)报文用于请求链路上的路由器发送RA报文。RS报文被发送到所有路由器组播地址ff02::2。
(2)ICMPv6邻居请求和通告
—ICMPv6中的邻居请求(NS)报文有效地取代了IPv4中的ARP请求报文。其主要目的是将IPv6地址转换为链路层地址。
—NS报文也被用于检测附近的节点是否可达,它们是否可以双向到达。
—当NS报文用于确定地址映射时,它被发送到目标地址字段中包含的IPv6地址所对应的请求节点的组播地址;当NS报文被用于确定到邻居的连接性时,它被发送到该邻居的IPv6单播地址。
—ICMPv6邻居通告(NA)报文和IPv4中的ARP响应报文的目的一样,还能够用于邻居不可达检测。
—NA报文要么作为NS报文的响应被发送,要么当一个节点的IPv6地址变化时被异步发送。
—NA报文要么被发送到请求节点的单播地址,要么当请求节点使用未指定的地址作为源地址时,被发送到所有节点的组播地址。
(3)ICMPv6反向邻居发现请求和通告
—主要功能是确定一个已知的链路层地址对应的网络层地址。
—反向邻居发现(IND)请求报文被发送到IPv6层的所有节点的组播地址,但是却封装在一个单播链路层地址中。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: