无论是在宿舍,还是在办公室,或者运维一个数据中心,我们常常会遇到网络不通的问题。突然间就连不上了,且找不到原因。
一般情况下,你会想到 ping 一下。
ping 是基于 ICMP 协议工作的。ICMP 全称 Internet Control Message Protocol,就是互联网控制报文协议。
网络包在异常复杂的网络环境中传输时,常常会遇到各种各样的问题。当遇到问题的时候,要传出消息来,报告情况,这样才可以调整传输策略。
ICMP 报文是封装在 IP 包里面的。因为传输指令的时候,肯定需要源地址和目标地址。
ICMP 报文有很多的类型,不同的类型有不同的代码。最常用的类型是主动请求为 8,主动请求的应答为 0。
ping 就是查询报文,是一种主动请求,并且获得主动应答的 ICMP 协议。所以,ping 发的包也是符合 ICMP 协议格式的,只不过它在后面增加了自己的格式。
对 ping 的主动请求,进行网络抓包,称为 ICMP ECHO REQUEST。同理主动请求的回复,称为ICMP ECHO REPLY。比起原生的 ICMP,这里面多了两个字段,一个是标识符,另一个是序号。
ping 还会存放发送请求的时间值,来计算往返时间,说明路程的长短。虽然ping经常使用,但是 ping 不通不代表网络不通。这个时候就要使用 telnet,通过其他协议来测试网络是否通。