介绍
ping是用来测试目的主机是否可达的一个程序测试
原理:向目的主机发送ICMP回显请求报文,并等待返回ICMP回显应答ui
- ping客户端:发送回显请求的主机
- ping服务端:被ping的主机
大部分TCP/IP实现都在内核中实现ping服务端code
ICMP回显请求与应答
报文格式:blog

- 标识符:Unix采用进程id做为标识符。用来匹配ICMP回显请求与应答
- 序号:从0开始,每次回显请求都会+1。用来确认是否有分组丢失、重复、乱序
局域网内ping:进程

广域网内ping:路由

观察到出现高延迟和大量分组丢失状况原理
IP记录路由选项
做为IP首部中的选项字段,最长40字节。用来记录IP报文通过了哪些主机路由器
经过ping -R
,程序就会记录并使用IP记录路由选项请求
当通过一个路由器,它记录出口IP地址,当带该选项的回显应答回到源主机(发ping请求的主机),也会记录该主机的入口地址。经过该功能,能够发现实际路由过程当中会频繁使用默认路由程序
IP记录路由选项的报文:

- code:IP选项类型。值7表明IP记录路由选项
- len:选项总字节长度。值为39
- ptr:存放下一个IP地址的位置。初始化值为4,每当加入一个IP,值+4,当值为40时表明已经记录9个IP,空间已满
经过这种方式记录路由过程的问题:
- 不是全部主机都支持该选项。如今大部分系统都支持
- 记录的IP有限。因为只有40字节来记录,除开记录元信息的,最多只能记录9个IP
IP记录时间戳选项
做为IP首部中的选项字段,最长40字节。
IP记录时间戳选项的报文:

- code:IP选项类型:值0x44表明IP记录时间戳选项
- len:选项总字节长度。值为36或40
- ptr:存放下一个时间戳的位置
- OF:4位溢出字段。当路由器没有空间追加时间戳时,就增长溢出字段的值
- FL:4位标志字段。不一样标志描述了时间戳部分该记录哪些东西
可用FL:

该方案的问题是:
- 一般标志3才有意义。标志0功能太弱,标志1会致使只能放4条记录,而且可能都不是本身关心的
- 标志3中指定了主机,但这些主机的时间戳可能并不许确