一、引言
在错综复杂的网络的世界里,如何知道对方主机是否可达,链路是否畅通是一个不太简单的问题。现在有两种常用的程序或命令来检查这些问题(ping与traceroute命令)。 "ping"这个名字来源于航海的声纳定位操作。其操作类似于声纳定位。只不过这里发送的是ICMP数据包而不是声波。该命令的目的是用于确定某个主机是否可达,距离当前主机多远。 traceroute,正如它的名字一样,该命令用来打印出主机A到主机B中间走过的路由IP地址。
二、ping命令
1.原理
ping的原理实际上很简单。就是主机A想要知道主机B的某些信息(如是否可达)。这时候主机A就像主机B发送一份ICMP回显请求数据包,并且为主机B回应等待一段时间(超时);主机B收到ICMP回显请求数据包后回应一个ICMP回显应答数据包给主机A,若主机B不可达或出错,主机A会超时或收到ICMP不可达差错数据包。需要注意的是
ping命令只会检查到某个主机而不能够具体到某个端口号。
2.ICMP回显请求/应答数据包
上图为该数据包格式。
- 具体的ICMP数据包参见: (5)TCP/IP协议-ICMP协议
- 当前类型字段值为:0-ICMP回显请求数据包,8-ICMP回显应答数据包。
- 代码段:都为0
- 标识符:unix系统通常是设置称品尼高程序的进程ID
- 序列号:没发送一次新的回显请求就加1
3.抓包
运行ping baidu.com
用wireshark抓包可以看到,有四组ICMP回显请求/应答数据包
对于其中一组(47与48)