1. ping基础知识
ping程序的目的是为了测试另一台主机是否可达。该程序发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答。而ICMP回显请求和回显应答报文如下:
unix系统在实现ping程序时是把ICMP报文中的标识符字段置为发送进程的ID号。这样即使在同一台主机上同时运行了多个ping程序实例,ping程序也可以识别出返回的信息。
序列号从0开始,每发送一次新的回显请求就加1.ping程序打印返回的每个分组的序列号,允许我们查看是否有分组丢失,失序或重复。
2. ping的实际应用
我们直接ping一个外网:
leichaojian@ThinkPad-T430i:~$ ping www.google.com.hk
PING www.google.com.hk (173.194.72.199) 56(84) bytes of data.
64 bytes from tf-in-f199.1e100.net (173.194.72.199): icmp_seq=2
ttl=45 time=54.7 ms
64 bytes from tf-in-f199.1e100.net (173.194.72.199): icmp_seq=3
ttl=45 time=54.6 ms
64 bytes from tf-in-f199.1e100.net (173.194.72.199): icmp_seq=5
ttl=45 time=53.9 ms
64 bytes from tf-in-f199.1e100.net (173.194.72.199): icmp_seq=6
ttl=45 time=53.4 ms
64 bytes from tf-in-f199.1e100.net (173.194.72.199): icmp_seq=8
ttl=45 time=54.8 ms
^C
--- www.google.com.hk ping statistics ---
8 packets transmitted, 5 received, 37% packet loss, time 7011ms
rtt min/avg/max/mdev = 53.408/54.306/54.814/0.591 ms
使用tcpdump,然后把request和reply提取出来如下:
22:39:42.828136 IP 192.168.0.5 > tf-in-f199.1e100.net: ICMP echo
request, id 4661, seq 1, length 64
22:39:43.827243 IP 192.168.0.5 > tf-in-f199.1e100.net: ICMP echo
request, id 4661, seq 2, length 64
22:39:43.881927 IP tf-in-f199.1e100.net > 192.168.0.5: ICMP echo
reply, id 4661, seq 2, length 64
22:39:44.828459 IP 192.168.0.5 > tf-in-f199.1e100.net: ICMP echo
request, id 4661, seq 3, length 64
22:39:44.883092 IP tf-in-f199.1e100.net > 192.168.0.5: ICMP echo
reply, id 4661, seq 3, length 64
22:39:45.830343 IP 192.168.0.5 > tf-in-f199.1e100.net: ICMP echo
request, id 4661, seq 4, length 64
22:39:46.837388 IP 192.168.0.5 > tf-in-f199.1e100.net: ICMP echo
request, id 4661, seq 5, length 64
22:39:46.891258 IP tf-in-f199.1e100.net > 192.168.0.5: ICMP echo
reply, id 4661, seq 5, length 64
22:39:47.838521 IP 192.168.0.5 > tf-in-f199.1e100.net: ICMP echo
request, id 4661, seq 6, length 64
22:39:47.891887 IP tf-in-f199.1e100.net > 192.168.0.5: ICMP echo
reply, id 4661, seq 6, length 64
22:39:48.840148 IP 192.168.0.5 > tf-in-f199.1e100.net: ICMP echo
request, id 4661, seq 7, length 64
22:39:49.839248 IP 192.168.0.5 > tf-in-f199.1e100.net: ICMP echo
request, id 4661, seq 8, length 64
22:39:49.894020 IP tf-in-f199.1e100.net > 192.168.0.5: ICMP echo
reply, id 4661, seq 8, length 64
分析得到:
1) 存在丢包现象:只有序列号2,3,5,6,8没有丢包
2) 回显请求通常每秒钟发送一次
3) 标识符为进程id:4661
4) 返回的ICMP数据报长度为64(不知道具体包含什么数据)
3. IP记录路由选项
备注:由于没有环境,所以以下的实例均摘自书本,没进行验证
-R选项:提供记录路由的功能。
一个IP首部最大为60字节,减去20字节的固定IP首部,3字节的RR选项,还剩余37字节。所以最大可存储9个IP地址:
1) 通常的例子
分组所经过的四站如下:
出口的IP地址加入清单中。通过tcpdump来查看结果如下:
输出中optlen=40表示在IP首部中有40个字节的选项空间。RR{39}的意思是记录路由选项已被设置,它的长度字段是39.然后是9个地址,符号#用来标记RR选项中的ptr字段所指向的IP地址。而EOL表示IP选项"end of list"的值。