ICMP协议格式
ping是基于iCMP协议工作的,ICMP全称Internet Control Message Protocol,就是互联网控制报文协议。其实就是有点类似于古代行军打仗,哨探进行前方探明具体情况。
IMCP本身处于网络层,将报文封装在IP包里,因为需要有源地址和目标地址,所以整体内容格式简单。
最常用的类型是主动请求为 8,主动请求的应答为 0。
查询报文类型
查询类的报文其实主动发起,比如连接服务器不通,使用ping xxx。去测试网络是否联通。主动请求是ICMP ECHO REQUEST,主动请求的响应是 ICMP ECHO REPLY,还有序号,标记那个请求返回来的数据。
差错报文类型
差错报文类型其实就是网络等出现异常情况主要如下几种情况
- 终点不可达
- 网络不可达、主机不可达、协议不可达、端口不可达等情况。
- 源站抑制 : 发送端发送的速度太快
- 时间超时:网络超过规定时间,比如设置30S超时,但是服务端31S返回的成功。但是对于调用方来说超时了。
- 路由重定向:在网络中下次发送给另一个路由器。
ping:查询报文类型的使用
整个流程其实先构建一个ICMP请求包,类型是8,然后有对方的IP地址,到IP层添加上对应的源和目的IP地址。MAC添加对应的目标MAC和源MAC。如果在ARP表中存储的有MAC地址,直接使用,否则的话,就需要通过IP地址先通过ARP请求查找到对应的IP地址的MAC,等目标IP地址确认是发送给自己的数据。就会把数据一层层拨开,然后返回应答响应,类型是0,最终会收到对应的信息。
ping 这个程序是使用了 ICMP 里面的 ECHO REQUEST 和 ECHO REPLY 类型的。
Traceroute:差错报文类型的使用
Traceroute 的第一个作用就是故意设置特殊的 TTL,来追踪去往目的地时沿途经过的路由器。
小结
本篇主要介绍了PING使用的底层协议类型,一种是主动探查的查询报文,一种一场报告的差错报文。Ping使用查询报文,Traceroute 使用差错报文。