ping 与 traceroute 的工作原理分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、ping
ping 程序的主要目的是测试主机是否可达,它发送ICMP 回显请求报文给目的主机,并等待返回ICMP 回显应答
ping 程序一般会周期性持续地发送ICMP 请求报文,除非用户手动终止,或指定了发送报文个数
回显请求和回显应答通过序列号(icmp_seq)进行匹配,下图中序列号依次为1、2、3、4 ...
ping 程序通过数据报中记录的发送请求时间值和接收到回显应答报文的当前时间值,计算往返耗时(time)
常见问题:
1. 为什么ping 第一次一般会产生更多耗时?
因为ping 第一次的时候,需要首先进行ARP 解析,获取IP 地址对应的MAC 地址(同时将映射关系缓存),
而下次ping 的时候会直接从ARP 高速缓存读取,少了一个步骤,自然时间就缩短了!
二、traceroute
traceroute 程序的主要目的是获取从当前主机到目的主机所经过的路由
官方方案(TCP/IP详解里提供的基于UDP 的方案):通过封装一份UDP 数据报(指定一个不可能使用的端口,30000以上),依次将数据报的TTL 值置为1、2、3...,并发送给目的主机。当路径上第一个路由器收到TTL 值为1 的数据报时,首先将该数据报的TTL 值减1,发现TTL 值为0,而自己并非该数据报的目的主机,就会向源主机发送一个ICMP 超时报文,traceroute 收到该超时报文,就得到了路径上第一台路由器的地址;然后照此原理,traceroute 发送TTL 为 2 的数据报时,会收到路径上第二台路由器返回的ICMP 超时报文,记录第二台路由器的地址;直到报文到达目的主机,目的主机不会返回ICMP 超时,但由于端口无法使用,就会返回一份端口不可达报文给源主机,源主机收到端口不可达报文,证明数据报已经到达了目的地,停止后续的UDP 数据报发送,将记录的路径依次打印出来,使命完成,结束任务。
注意:目的主机端口号最开始设置为33435,且每发送一个数据报加1,可以通过命令行选项来改变开始的端口号
约束:
1. 不能保证现在的路由也是将来所要采用的路由,甚至两份连续的IP 数据报都可能采用不同的路由;
2. 不能保证ICMP 报文的路由与traceoute 程序发送的UDP 数据报采用同一路由,时间测量可能不准;
3. 返回的ICMP 报文中的信源IP 地址是UDP 数据报到达的路由器接口的IP 地址;
当从网络1某主机执行traceroute 程序到网络3某主机,返回的路径将是if1 和if3 的地址;
而反方向,将打印出if4 和if2 的地址
缺陷:
1. 中间路由器有可能做了限制,不返回ICMP 超时报文,traceroute 就无法获得其地址了,
只能打印出* 或no reply
2. 目的主机可能由于安全原因不会向源主机返回端口不可达的ICMP 报文,
尽管探测数据报已经到达了目的主机,但traceroute 程序收不到端口不可达报文,就仍会持续发送请求...
————————————————
版权声明:本文为CSDN博主「shida_csdn」的原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https:///shida_csdn/article/details/83751645