TCP/IP详解007Ping程序
目的:为了测试另一台主机是否可达。
原理:该程序发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答
我们称发送回显请求的ping程序为客户,而称被ping的主机为服务器。
大多数的TCP/IP实现都在内核中直接支持ping服务器——这种服务器不是一个用户进程。
image.png
对于其他类型的ICMP查询报文,服务器必须响应标识符和序列号字段。另外,客户发送的选项数据必须回显,假设客户对这些信息都会感兴趣。
Unix系统在实现ping程序时是把ICMP报文中的标识符字段置成发送进程的ID号,这样即使在同一台主机上同时运行多个ping程序实例,ping程序也可以识别出返回的信息。
序列号从0开始,每发送一次新的回显请求就加1,ping程序打印出返回的每个分组的序列号,允许我们查看是否有分组丢失、失序或重复。IP是一种最好的数据报传递服务,因此这三个条件都有可能发生。
ping程序通过在ICMP报文数据中存放发送请求的时间值来计算往返时间。
image.png
ping程序为我们提供了查看IP记录路由(RR)选项的机会。大多数不同版本的ping程序都提供-R选项,以提供记录路由的功能。
ping在windows的功能
image.png
IP记录路由选项
ping程序为我们提供了查看IP记录路由(RR)选项的机会,大多数不同版本的ping程序都提供-R选项,以提供记录路由的功能。它使得ping程序在发送出去的IP数据报中设置IPRR选项(该IP数据报包含ICMP回显请求报文)。这样每个处理该数据报的路由器都把它的IP地址放入选项字段中。当数据报到达目的端时,IP地址清单应该复制到ICMP回显应答中,这样返回途中所经过的路由器地址也被加入清单中。当ping程序收到回显应答时,它就打印出这份IP地址清单。
image.png
code是一个字节,指明IP选项的类型,对于RR选项来说,它的值是7.
len是RR选项总字节长度,在这种情况下为39
ptr称作指针字段。它是一个基于1的指针,指向存放下一个IP地址的位置。它的最小值为4,指向存放第一个IP地址的位置。随着每个IP地址存入清单,ptr的值分别为8、12、16,最大到36,当记录下第9个IP地址后,ptr的值为40,表示清单已满
当路由器在清单中记录IP地址时,它应该记录哪个地址呢?是入口地址还是出口地址?
RFC791 指定路由器记录出口IP地址。当原始主机(运行ping程序的主机)收到带有RR选项的ICMP回显应答时,它也要把它的入口IP地址放入清单中。
ping程序是对两个TCP/IP系统连通性进行测试的基本工具,它只利用ICMP回显请求和回显应答报文,而不用经过传输层(TCP/UDP),ping服务器一般在内核中实现ICMP的功能。