tcp/ip ---------- ping程序

本文介绍了Ping程序的功能,它用于测试主机可达性。通过发送ICMP回显请求并接收回显应答,Ping能检测网络连通性及测量往返时间。然而,随着网络安全的加强,不能Ping到的主机并不意味着不能通过特定端口进行连接。此外,文章还探讨了IP记录路由选项和时间戳选项,展示了它们在IP数据报中的应用及其可能遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

         一般而言,若不能ping到某台主机,那么就不能telnet或FTP到那台主机。反过来,如果不能Telnet到某台主机,那么通常可以用Ping来确认问题出在哪里

         Ping还能测出往返时间。

 

         但是,好多好多年前我们还可以确定,如果不能Ping到某台主机,那么就不能Telnet或FTP到那台主机。只是随着安全意识的增强,出现了提供访问控制清单的路由器和防火墙,那么我们就不能再这么确定或者说断言了。

         一台主机的可达性可能不止取决于IP层是否可达,还取决于使用何种协议及端口号。

         Ping程序可能不可达,但我们却可能通过某些端口与某台主机连接。

 

 

Ping程序

         发送回显请求的ping程序为客户,被ping的为服务器。大多TCP/IP实现都在内核中直接支持Ping服务器(这种服务器不是用户进程,就像之前ICMP中的地址掩码查询、时间戳查询等,都是在内核中直接处理的)

         回显请求报文和回显应答报文如下:

                                                                  

Unix系统实现的Ping程序是把ICMP中的标识字段设置成发送进程的ID号(pid),这样即使同一台主机上同时运行多个ping程序,ping程序也能识别出返回的信息

序号从0开始,每发送一次新的回显请求就加一

 

 

IP记录路由选项

         Ping程序为我们提供了查看IP记录路由(RR)选项的机会(大多数ping提供 -R选项)

         它使得ping程序在发送出去的IP数据报中设置IP RR 选项(该IP数据报包含ICMP回显请求报文)。这样,每个处理该数据报的路由器都把他的IP地址存放在选项字段中。

         当数据报到达目的端时,IP地址清单应该复制到ICMP回显应答中,这样返回途中所经过的路由器地址也被加入到地址清单中。

         当ping收到回显应答后,就打印出这份IP地址清单

 

         说到这里,虽然整个过程看似简单明了,但是这其中存在许多未知数。

比如中间路由对RR选项的处理,比如一些系统不支持把ICMP请求报文中的地址清单复制到ICMP应答报文中。

最大的问题在于,IP首部中只有有限的空间存放IP地址。通过我们之前对IP数据报的了解,IP首部中的首部长度字段只有4bit,因此整个IP首部最长只能包含15个32bit长的字(也即60个字节),去除20个IP首部固定字节长度,以及3个字节的RR选项,最后只剩下37个字节存放地址清单,即只能放9个IP了。

         RR选项为什么占3个字节呢?

                                                      

可以看到,code是指明IP选项的类型(对于RR选项,值为7)

len是RR选项总字节长度,这里为39

ptr存放指针,指向存放下一个IP地址的位置

 

这里还有一个问题,当路由器在清单中记录IP地址时,是记录路由器的出口IP地址呢还是入口地址?

         RFC791指定路由器记录出口IP地址

 

 

下面给出一个通常的例子:

        

                                                                   

 

我们在svr4主机上尝试ping主机slip。

显示数据如下:

                                                                      

显然,每个路由器都把出口地址加入到了IP首部的地址清单中。

我们还可以看到,当ICMP回显应答到达原系统时,他把自己的入口IP也加入到了清单中

虽然sun主机支持RR选项,但并没有将IP地址填入清单中

 

我们在sun主机上调用tcpdump –v发现:


                                                          

 

optlen=40 表示在IP首部中40个字节的选项空间

RR{39} 表示记录路由已被设置,其长度字段是39

然后就是9个ip地址

EOL表示 “end of list“

如果IP选项字段中有多个选项,那么在开始下一个选项之前必须填入空白字符或另外一种值为1 的特殊字符 NOP(”no operation”)

 

 

以下再给出一个例子(异常):

 

                                                             

 

我们在slip主机上ping 到aix主机,

显示数据如下:

 

                                                                    

 

其中令人疑惑的点在于为什么传出的数据报(ICMP回显请求)直接从netb传到aix,而返回的数据报(ICMP回显应答)却从aix开始经路由器gateway再到netb?

         这里就来解答一下:

         问题在于aix不知道要把目的地为子网140.252.13的IP数据报发到netb主机上。相反,aix在他的路由表中有一个默认项,它指明在没有明确某个目的主机的路由时,就把所有的数据报发往默认项指定的路由器gateway。因为路由器gateway比子网140.252.1上的所有主机都具备更强的路由选择能力。

         不过,这里还有一个问题,为什么gateway不直接发送ICMP报文重定向到aix(以后会讲到),以更新aix的路由表?由于某种原因重定向并没有产生。

         但是如果我们使用telnet登录到aix的daytime服务器上,ICMP就会产生重定向,因而它在aix上的路由表也会随之更新。如果此时再用ping,那么就会从netb到aix,并从aix返回到netb而不再经过gateway。

 

 

IP时间戳选项

         在ICMP报文讨论中涉及过时间戳选项,这里谈一下IP数据报的时间戳选项。

         它与记录路由选项类似

 

                                                        

 

前三个字段类型与记录路由一样

接下来是两个字段是4bit值,OF表示溢出字段,FL表示标识字段。时间戳选项操作根据标识字段不同而不同:

 

                                                           

 

如果路由器由于没有空间而不能增加时间戳选项,那么它将增加溢出字段的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值