作用:测试本机是否可达另一个主机。
原理:向某个主机发送ICMP回送请求,若该主机接收到该报文,则会返回ICMP回送应答。
Ping指令功能:
1、测量RTT(默认显示),原理:Ping会在ICMP回送请求中的数据部分记录发送时间,当接收到回送应答时,会从中提取发送时间,并用现在的时间减去发送时间。
2、IP路由记录
3、时间戳
Ping程序直接工作在内核,不是用户进程。
ICMP回送报文结构:
各字段就不解释了,之前的博客中已经有了,在Unix中,标识符的值设置为发送进程的进程ID,若一台主机上同时运行多个Ping进程,则可通过标识符确定应答属于哪个进程,序列号从0开始,每发送一个ICMP回送请求就加1,Unix上的Ping程序会答应应答包的序列号,因此我们可以看到是否有报文遗失、乱序、重复。
路由记录
格式:windows:ping -r +记录数(1到9) IP地址
当ping指定了路由记录后,会在含有ICMP回送报文的IP报文的头部设置RR选项,每个转发该报文的路由器都会将发送接口的IP地址记录到列表中。
由于IP选项部分最大占用40个字节,除去选项头部的三个字节,只有37个字节可以记录IP地址,最多可记录9个IP地址。
选项部分的结构如下:
上面数字的单位为字节。
code:表明IP选项的类型,7表示RR(Route Record)。
len:选项部分占用的字节数,该例为37。
ptr:指定下一个IP地址应该从哪里开始记录,把路由记录表想象成下标从1开始的字节数组,这个字段的值只能为4、8、12、16、20、24、28、32、36,当该值为40时,表示路由记录表已经满了。
时间戳
code:0x44表示时间戳。
len与ptr与路由记录选项一致。
OF表示溢出字段,当时间戳区域满时,则开始增加OF字段的值。
flag区域: