TCP/IP——Ping、IP选项(Tracerouter、IP源站选路)

一、Ping

Ping目的是为了测试另一台主机是否可达。该程序发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答

可以用ping程序来确定问题出在哪里,测出到这台主机的往返时间

一台主机的可达性可能不止取决与IP层是否可达,还取决于使用何种协议以及端口号。Ping程序的运行结果可能显示某台主机不可达,但telnet却可以。
在这里插入图片描述
对于某些ICMP查询报文,服务器必须响应标识符和序列号,发的是多少,回显就填充多少。
Unix系统在实现ping程序时是把ICMP报文中的标识符字段置成发送进程的ID号,这样即使有多个ping程序在运行,也能识别他们。
序列号会增加(随着PING包的增加而增加)。

PAT上的ICMP,因为ICMP没有端口号,不能像TCP/UDP那样直接进行端口转发,因此,在cisco中ISO版本12.3以前,路由器将ICMP的序号当成端口来转发,会出现大量端口使用(因为序号会随着包的增加而增加),到12.3以后,cisco就将ICMP的标识符来当成端口号来转发,节约了端口使用。

二、Ping程序计算往返时间(选项位)

原理:主机在发送的时候会记录当前主机时间在ICMP的数据中,回来的时候主机查看ICMP数据中的时间,用主机当前的时间去减ICMP数据中的时间,得出往返时间。

三、IP首部中记录路由选项(选项位)

源端主机生成RR选项,中间路由器对RR选项的处理,记录的是出接口的ip地址(也记录目标主机的入接口),以及把ICMP回显请求中的RR清单复制到ICMP回显应答中,所有这些都是选项功能

IP首部中只有有限位置存放IP地址。选项位最大为40字节,RR选项用去3个字节,还剩37字节来存放IP地址清单,每个IP地址占4个字节,所以最多存放9个IP地址
在这里插入图片描述
Code是一个字节,指明IP选项的类型。对于RR选项来说,它的值为7。

len是RR选项总字节长度,在这种情况下为39(尽管可以为RR选项设置比最大长度下的长度,但是ping程序总是提供39字节的选项字段,最多可以记录9个ip地址。由于IP首部中留给选项的空间有限,它一般情况都设置成最大长度)

Prt称作指针字段。它是一个基于1的指针,指向存放下一个IP地址的位置。它的最小值为4,指向存放第一个IP地址的位置。随着每个IP地址存入清单,prt的值分别为8,12,16,最大到36.当记录下9个IP地址后,prt的值为40,表示清单已满

四、IP时间戳选项

在这里插入图片描述
时间戳选项的代码为0x44.其他两个字段len和ptr与记录路由选项相同:选项的总长度(一般为36或40)和指向下一个可用空间的指针(5,9,13等)

接下来的两个字段是4bit的值:OF表示溢出字段,FL表示标志字段。时间戳选项的操作

时间戳的取值一般为自UTC午夜开始计的毫秒数

五、Tracerouter

Traceroute程序可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由。
Traceroute相对于IP路径记录选项的比较:

首先并不是所有的路由器都支持记录路由选项,ASA就不支持。其次IP路径记录选项记录的双向的,浪费选项地址空间,最后IP首部中留给选项的空间有限

Cisco的Traceroute工作原理:

在cisco中,发送去往目的地UDP:33434(端口号)(cisco默认),TTL值为1的报文,到达第一个路由器时,路由器发现TTL值为1,路由器就会给源发送一个ICMP差错信息TTL不可达。当源收到ICMP时,读取ICMP中的源地址打印出来,然后继续发送去往目的地UDP:33435,TTL值为2的报文,到达第二个路由器时,路由器发现TTL值为1,路由器又会给源发送一个ICMP差错信息TTL不可达。当源收到ICMP时,读取ICMP中的源地址打印出来,如此重复,获取经过的所有路由,当抵达目的时,目的地路由器发现是找自己的,不会看TTL值是否为1,继续查看4层信息,发现端口自己没有开启,会给源发送一个ICMP差错信息端口不可达信息。当源读取这个端口不可达信息,就知道到达目的地了,继续打印出来。

微软的Tracert的工作原理:

发送去往目的地的ICMP请求报文TTL值为1的报文,到达第一个路由器时,路由器发现TTL值为1,路由器就会给源发送一个ICMP差错信息TTL不可达。当源收到ICMP时,读取ICMP中的源地址打印出来,然后继续发送去往目的地的ICMP请求报文TTL值为2的报文,到达第二个路由器时,路由器发现TTL值为1,路由器又会给源发送一个ICMP差错信息TTL不可达。当源收到ICMP时,读取ICMP中的源地址打印出来,若此重复,获取经过的所有路由,当抵达目的时,目的地路由器发现是找自己的,不会看TTL值是否为1,直接回应一个ICMP应答报文,当源读取这个ICMP应答报文时,就知道到达目的地了,继续打印出来。

六、IP源站选路选项

严格源站路由选择:发送端指明IP数据报所必须采用的确切路由,如果一个路由器发现源路由所指定的下一个路由器不再其直接连接的网络上,那么它就会返回一个“源站路由失败”的ICMP差错报文

严格源站路由的变态之处,哪怕路由器上没有到达目的地的路由也可以通,因为严格源站路由提供了下一跳地址。

宽松的源站路由:发送端指明了一个数据报经过的IP地址清单,但是数据报子啊清单上指明的任意两个地址之间可以通过其他路由器

路由器默认支持源站路由,防火墙都是不支持的,因为安全问题,但是我们可以把源站路由给关掉,no ip source-route。关闭后就无法使用源站路由了,会返回一个ICMP,type为3,code为5的源站路由失败的信息

在这里插入图片描述
Code:宽松的源站路由值为0x83,严格的源站路由值为0x89

Len和ptr字段与记录路由选项一样。
在这里插入图片描述
当一个源站路由发出时,指针会指向选项位的第一个IP地址,相当于告诉客户端第一条去哪,然后R1收到的会是指针指向下一跳的IP地址,在R1发送出去的时候,会将自己出接口的IP地址填写到选项位的第一个IP地址(回去的时候才知道反向的源站路由),如此重复。

猜你喜欢

转载自blog.csdn.net/weixin_44233369/article/details/87556466