关于ICMP的小总结

来源:互联网 发布:电脑语音读书软件 编辑:程序博客网 时间:2024/05/21 09:54

ICMP分属于网络层,用来传递差错报文以及其他需要注意的信息。


Ping程序中就是通过ICMP报文数据中存放发送请求的时间值来计算往返时间。


TraceRoute程序是通过ICMP和IP报文中的TTL选项结合起来来实现的(TTL是由发送端初始设置的一个8bit字段)。


   请求端发送一个TTL字段为1的IP数据报给目的主机。处理这份数据报的第一个路由器将TTL减1,丢弃该数据报,这时返回一个超时ICMP报文。这样就获得了第一个路由器的地址。继续这个过程直至到达目标主机。但是此时有个问题,主机接受了报文时并不会返回一个差错ICMP,这时如何如何判断已经到达目的主机呢?这个时候Traceroute程序发送一份UDP数据报给目的主机,但是它选择一个不可能的值作为UDP端口号(大于30000)。这时目标主机会返回一个端口不可达的错误,此时Tracerout程序只要区分接收到的是超时还是端口不可达即可。


还有一种利用TraceRoute来确定路径MTU以用来判断IP是否分片等内容。具体的是发送分组,并设置“不分组”的标识,发送的第一个分组长度正好与出口MTU相等,每次收到ICMP“不能分片”差错时就减小分组长度。如果路由器发送的ICMP差错报文是新格式,包含出口的MTU,那么就用该值来替代,否则就用下一个最小的MTU代替。

0 0
原创粉丝点击