TCP/IP详解 卷1:协议(英文版)
RR,record route, 记录路由安全
ping本来定义为声纳定位物体,ping程序是Mike Muuss编写,用于测试某个主机是否能够到达
ping程序发送一个ICMP回显请求报文到指定主机,并等待返回ICMP回显应答
通常,若是不能Ping到某台主机,就不能Telnet, FTP到那台主机,若是不能Telnet到某台主机,那么一般能够用Ping程序来肯定问题出在哪里
Ping程序还能测出到本机的往返时间,代表主机和目标主机的网络距离服务器
随着安全意识的加强,出现了提供访问控制清单的路由器和防火墙,一台主机的可达性可能不仅是取决于IP层是否可达,还取决于使用何种协议以及端口号,因此,Ping程序的运行结果可能显示某个主机不可达,可是能够Telnet远程登陆到该台主机的25端口网络
称发送ping程序为客户,被ping的主机为服务器,大多数TCP/IP实现都在内核中直接支持Ping服务器(不是一个用户进程,ICMP查询服务,例如:地址掩码或者时间戳请求,也是在内核中实现)异步
Unix系统在实现ping程序时候,把ICMP报文中的标识符字段设置成发送进程的ID号,这样,即便同一台主机上同时运行多个ping程序实例,ping程序能够识别出返回的信息测试
序列号从0开始,每发送一次新的回显请求,递增1,ping程序打印出返回的每一个分组的序列号,运行查看是否有分组丢失、失序、重复(由于IP层是尽力而为的数据报传递服务,因此这些状况均可能发生)spa
当返回ICMP回显应答时候,要打印出序列号和TTL,计算往返时间
经过在ICMP报文数据中存放发送请求的时间值计算往返时间(当应答返回时候,用当前时间减去存放在ICMP报文中的时间值,便是往返时间)操作系统
如上,第一行包含目的主机的IP地址和主机名称,说明主机名称被解析为IP地址(利用DNS协议)
一般,第一个往返时间值比其余的大,因为目的端的硬件地址不在ARP高速缓存中的缘由blog
在一个广域网上,结果可能会有很大不一样,上面的例子是某个工做日的下午的运行结果,
序列号为1,2,3,4等回显请求或者回显应答在某个地方丢失,往返时间发送了很大的变化
经过广域网还有可能看到重复的分组(即相同的序列号的分组被打印两次或者屡次),失序的分组(序列号为N+1的分组在序列号N的分组以前被打印)接口
SLIP链路,由于它们常常运行于低速的异步方式(9600b/s或者更低)
默认状况下,ICMP报文有56个字节,再加上20个字节的IP首部和8个字节的ICMP首部,IP数据报的总长度为84字节
根据链路层,SLIP会在IP数据报的开始结尾加上END字符,此外,SLIP帧还有可能再增长一些字节,取决于数据报中的每一个字节的值,
假设,把主机bsdi和slip之间的SLIP链路传输速率设置为1200 b/s
因为一个字节有8位数据,1位起始位,1位结束位,传输速率是1秒120个字节,即一个字节 1000 / 120 = 8.33 ms
估计须要1433(86 8.33 2)ms
由上,往返时间大约是1.5秒,可是程序发送ICMP回显请求是1秒1次,
说明在第一个回显应答返回以前,就已经发送了两次请求(分别在0秒和1秒),因此,总结行中丢失一个分组,实际上并未丢失,极可能应答仍然在返回的途中
对于拨号的SLIP链路来讲,状况有些变化,由于在链路的两端增长了调制解调器,用于sun和netb系统之间的调制解调器,带来了时延,随着数据的压缩,分组长度可能会减小,可是因为使用了错误控制协议,分组长度有可能会增长
接收端的调制解调器只能在验证了循环检验字符(检验和)后才能释放收到的数据
最后,还须要处理每一端的计算机异步串行接口,许多操做系统只能在固定的时间间隔内,或者收到若干字符后,才去读这些接口
Ping程序提供了查看IP记录路由选项的机会,提供了-R参数,用于记录路由功能
使得ping程序在发送出去的IP数据报中设置IP RR选项(该IP数据报包含ICMP回显请求报文),这样
每一个处理该数据报的路由器都把它的IP地址放入选项字段中,
当数据报到达目的端后,IP地址清单应该复制到ICMP回显应答中,这样返回途中,全部通过的路由器地址也会被加入到清单中,当ping程序收到回显应答时候,就打印出IP地址清单
最大的问题,IP首部中只有有限的空间存放IP地址,首部中的首部长度字段只有4位,所以整个IP首部最长只能包含15个32位长的字(60个字节)因为IP首部固定长度是20字节,RR选项使用3个字节,只有37个字节来存放IP地址清单,即只能存放9个IP地址