ping和tracroute在icmp中的小疑问

问题1:traceroute路径追踪的时候,为什么是发送一个目的主机应用层不可达的端口,然后目的主机要应答一个端口不可达的ICMP报文呢?为什么不能像ping包一样直接传输icmp reply呢?

因为如果用icmp rely回复,源主机就没办法分别是路由器还是主机,并且路由器只会回复给源主机icmp reply,而主机会把网络层的数据提交到传输层处理,然后返回给源主机端口不可达的ICMP报文。

问题2:目的主机接受在接收到TTL值为1的IP数据包是不会丢失的吧,这样也不会产生一个超时的ICMP数据报文了,那么程序如何判断是否已经到达目的主机了呢?

traceroute发送UDP报文给目的主机时,是使用一个高位的非知名UDP端口号(大于30000),保证其应用层没有应用监听这个端口,因此该数据报到达目的主机时,因目的主机上层应用层没有应用监听此端口,这时就会产生一个“端口不可达”的ICMP报文,这样traceroute要做的就是区分接收到的ICMP报文是超时还是端口不可达,从而来区分是路由器还是目的主机。

红色圈出来的代表,三次数据包的RTT,每个数据包往返时间。

参考文章:https://www.cnblogs.com/cotyb/p/5341439.html


猜你喜欢

转载自blog.51cto.com/12540278/2546199