程序员

(006)TCP/IP协议-ping与traceroute命令

2016-02-15  本文已影响848人  林湾村龙猫

一、引言

在错综复杂的网络的世界里,如何知道对方主机是否可达,链路是否畅通是一个不太简单的问题。现在有两种常用的程序或命令来检查这些问题(ping与traceroute命令)。
  "ping"这个名字来源于航海的声纳定位操作。其操作类似于声纳定位。只不过这里发送的是ICMP数据包而不是声波。该命令的目的是用于确定某个主机是否可达,距离当前主机多远。
  traceroute,正如它的名字一样,该命令用来打印出主机A到主机B中间走过的路由IP地址。

二、ping命令

1.原理

ping的原理实际上很简单。就是主机A想要知道主机B的某些信息(如是否可达)。这时候主机A就像主机B发送一份ICMP回显请求数据包,并且为主机B回应等待一段时间(超时);主机B收到ICMP回显请求数据包后回应一个ICMP回显应答数据包给主机A,若主机B不可达或出错,主机A会超时或收到ICMP不可达差错数据包。需要注意的是ping命令只会检查到某个主机而不能够具体到某个端口号。

2.ICMP回显请求/应答数据包

图1.ICMP回显请求/应答数据包格式

上图为该数据包格式。

3.抓包

运行ping baidu.com

图2. 运行ping

用wireshark抓包可以看到,有四组ICMP回显请求/应答数据包

图3.四组抓包数据

对于其中一组(47与48)

图4. ping的ICMP回显请求数据包
图5.ping的ICMP回显应答数据包

除了Type字段不同,其他都相同

4.ping命令常用的IP选填字段。

还记得IP数据包有一个选项字段(参见:(3)TCP/IP协议-IP协议的图1)。这个选项区域是可选的。该区域可以做很多事情,如记录每一次的路由跳转ip地址或者传输时间等等。
  对于ping命令可以干的事情有记录每一次的跳转路由或者传输时间。这里以记录IP路由为例,其他类似:

图6. IP记录路由选项

可以window通过命令ping -r 9 baidu.com来查看,linux通过ping -R baidu.com来查看

图7.linux中的ip路由选填字段

三、traceroute命令

我们描述了IP记录路由选项。为什么不使用这个选项而另外开发一个新的应用程序?有三个方面的原因:

1.原理

  • traceroute程序使用ICMP数据包(超时与端口不可达)和IP首部中的TTL字段(生存周期,初始值一般是64)。

2.举例

在liunx上运行traceroute baidu.com 或window上运行tracert baidu.com

图8. Linux上运行结果

都看到这里了,要不要扫二维码关注一下微信公众号林湾村龙猫

微信公众号rudy_tan_home
上一篇 下一篇

猜你喜欢

热点阅读