在工做开发过程当中,咱们常常会使用到ping和traceroute。在这里,咱们将细述其工做原理,让你在会用的基础之上理解其内部工做过程。缓存
Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。Ping 的原理是经过向目的主机发送 ICMP Echo 请求报文,目的主机收到以后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。服务器
Ping的完整工做流程: Ping本质上是ICMP数据包,因此其工做流程就是ICMP数据包的发送与解析流程。 大体流程以下: 构造ICMP数据包-->构造IP数据包-->构造以太网数据帧----物理传输到目标主机---->获取以太网数据帧-->解析出IP数据包-->解析出ICMP数据包-->发送回送应答报文微信
本地主机处理流程:网络
目的主机处理流程:工具
因此,Ping的本质其实就是ICMP回送请求报文和回送应答报文。咱们可经过Wireshark抓包工具对Ping进行分析。使用ping命令:测试
本机会向远端主机发送ICMP回送请求报文。spa
远端主机收到后会发送回送应答报文: 3d
Traceroute 是 ICMP 的另外一个应用,用来跟踪一个分组从源点到终点的路径。有2种实现方案:基于UDP实现和基于ICMP实现。code
在基于UDP的实现中,客户端发送的数据包是经过UDP协议来传输的,使用了一个大于30000的端口号,服务器在收到这个数据包的时候会返回一个端口不可达的ICMP错误信息,<u>客户端经过判断收到的错误信息是TTL超时仍是端口不可达来判断数据包是否到达目标主机。</u>流程以下:blog
Linux中的traceroute就是这种实现方式。
<u>在这一种实现中咱们不使用UDP协议,而是直接发送一个ICMP回显请求(echo request)数据包,服务器在收到回显请求的时候会向客户端发送一个ICMP回显应答(echo reply)数据包。流程与上面类似,只是最后判断结束上为目标主机(而不是中间通过的主机或路由器)返回一个ICMP回显应答,则结束。</u>
Windows中的tracert就是这种实现方式。利用Wireshark分析以下: 在cmd下输入tracert www.baidu.com
:
每一跳默认发送三个数据包,咱们会看到下面这样的输出:
能够看到TTL逐个递增,而且最终到达目的主机180.97.33.107,到达目的主机,目的主机回复,终止。
关注微信公众号,天天进步一点点!