ping介绍
"ping"这个名字源于声纳定位操作。Ping程序由Mike Muuss编写,目的是为了测试另一台主机是否可达。该程序发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答
可以用ping程序来确定问题出在哪里。Ping程序还能测出到这台主机的往返时间,以表明该主机离我们有“多远”
一台主机的可达性可能不止取决于IP层是否可达,还要取决于使用何种协议以及端口号。Ping程序的运行结果可能显示某台主机不可达,但我们可以用Telent远程登录到该台主机的25端口
Ping程序
我们称发送回显请求的Ping程序为客户,而称被ping的主机为服务器。大多数的TCP/IP实现都在内核中直接支持Ping服务器--这种服务器器不是一个用户进程。
类型(0或8) 代码(0) 校验和
标识符 序号
选项数据
对于其他类型的ICMP查询报文,服务器必须响应标识符和序列号字段。另外,客户发送的选项数据必须回显,假设客户对这些信息都会感兴趣
Unix系统在实现Ping程序时是把ICMP报文中的标识字符段设置成发送进程的ID号
这样即使在同一台主机上同时运行了多个ping程序实例,ping程序也可以识别出返回的信息
在windows下,不管开多少个窗口ping的identifier都是相同的,而且每增加一个出去的ping包序列号增加256
标识符和序号 发什么就回什么
标识符一般为进程ID,序号每ping一次,序号加256。
PAT 端口地址转换
ICMP没有端口号
LAN输出
当返回ICMP回显应答时,要打印出序列号和TTL,并计算往返时间
回显应答是以发送的次序返回的(0,1,2等)
ping程序通过在ICMP报文数据中存放发送请求的时间值来计算往返时间。当应答返回时,用当前时间减去存放在ICMP报文中的时间值,即是往返时间(windows的数据部分没有意义)
WAN输出
这里,序列号为1,2,3,4,6,10,11,12,和13的回显请求或回显应答在某个地方丢失了
我们注意到往返时间发生了很大的变化(像52%这样高的分组丢失率是不正常的即使是在工作日的下午,对于Internet来说也是不正常的)
通过广域网还有可能看到重复的分组(即相同序列号的分组被打印2次或者更多次),失序的分组(序列号为N+1的分组在序列号为N的分组之前被打印)
表示ip是一个没有状态不可靠的协议
ICMP是通过IP来传输的
IP记录路由选项
路由的出接口 目标IP的入接口 目标IP的出接口 路由的出接口
前3字节 type(7) len ptr
IP时间戳选项
code len ptr OF FL 时间戳#1 时间戳#2 ~~~~~ 时间戳#9
0x44 36或40 5,9,13 溢出字段 标志字段
时间戳的取值一般是 UTC午夜开始的毫秒数
Traceroute程序
Traceroute程序可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由
Traceroute程序还可以让我们使用IP源路由选项。
严格源站路由 0x89 不是直连就会报错
宽松源站路由 0x83
上面两个 是源站及路由选项 去的时候是源站路由 回的时候还是源站路由
防火墙都不支持源站路由 路由器都支持