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

news/2024/11/7 14:31:34/

一、引言

在错综复杂的网络的世界里,如何知道对方主机是否可达,链路是否畅通是一个不太简单的问题。现在有两种常用的程序或命令来检查这些问题(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回显请求/应答数据包

上图为该数据包格式。

  • 具体的ICMP数据包参见:(5)TCP/IP协议-ICMP协议
  • 当前类型字段值为:0-ICMP回显请求数据包,8-ICMP回显应答数据包。
  • 代码段:都为0
  • 标识符:unix系统通常是设置称品尼高程序的进程ID
  • 序列号:没发送一次新的回显请求就加1

3.抓包

运行ping baidu.com

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

对于其中一组(47与48)

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

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

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

  • code:一个字节,指明该选项是什么选项。对于RR选项(Route Record,记录IP路由)来说,为7。
  • len:一个字节,指明总的字节数,通常该值为39。
  • ptr:一个字节,指针字段,指向存放下一个IP地址的位置。可以把该字段后面的当成一个栈,ptr指向栈顶。
  • 后面的字段:每4个字节为一个IP地址。由于IP地址最大首部长度的限制,最多存放9个IP地址。

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

三、traceroute命令

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

  • 不是所有的路由器都支持IP记录路由选项;
  • 记录路由一般是单向的选项。发送端设置了该选项,那么接收端不得不从收到的IP首部中提取出所有的信息,然后全部返回给发送端;
  • IP首部中留给选项的空间有限,不能存放当前大多数的路径;这是最主要的原因。

1.原理

  • traceroute程序使用ICMP数据包(超时与端口不可达)和IP首部中的TTL字段(生存周期,初始值一般是64)。
  • 每个处理数据报的路由器都需要把 TTL的值减1。如果路由器转发数据报的时延超过1秒,那么它将把TTL值减去所消耗的时间(秒数)。TTL字段的目的是防止数据报在选路时无休止地在网络中流动。
  • 当路由器收到一份IP数据包,如果其TTL字段是0或1,则路由器不转发该数据报(接收到这种数据报的目的主机可以将它交给应用程序,这是因为不需要转发该数据报。
  • 发送过程:
    • 它发送一份TTL字段为1的IP数据包给目的主机。
    • 处理这份数据报的第一个路由器将TTL值减1,丢弃该数据报,并发回一份超时ICMP数据包。
    • 这样就得到了该路径中的第一个路由器的地址。
    • 然后 traceroute程序发送一份TTL值为2的数据报,这样我们就可以得到第二个路由器的地址。
    • 继续这个过程直至该数据报到达目的主机。
    • 但是目的主机哪怕接收到 TTL值为1的IP数据报,也不会丢弃该数据报并产生一份超时ICMP数据包,这是因为数据报已经到达其最终目的地。由于traceroute发送的是一份UDP数据包,选择一个不可能的值作为 UDP端口号(大于30000),使目的主机的任何一个应用程序都不可能使用该端口,因此,当该数据报到达时,将使目的主机的UDP模块产生一份“端口不可达”错误的ICMP数据包。这样,traceroute程序所要做的就是区分接收到的ICMP数据包是超时还是端口不可达,以判断什么时候结束。

2.举例

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

  • 其中每一行,为路由的一跳。
  • 一行默认重试三次,若ip相同,只显示一遍(如第1跳),若不同分开显示。后面的时间是分别是三次跳转时间。

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

转载于:https://juejin.im/post/5cbfdaaa5188250a57784902


http://www.ppmy.cn/news/357542.html

相关文章

【AngularJs学习笔记三】Grunt任务管理器

为什么80%的码农都做不了架构师?>>> #0 系列目录# AngularJs学习笔记【AngularJs学习笔记一】Bower解决js的依赖管理【AngularJs学习笔记二】Yeoman自动构建js项目【AngularJs学习笔记三】Grunt任务管理器 #1 初涉Grunt# ##1.1 Grunt是什么## Grunt是一…

五大视频剪辑软件

视频制作与电脑技术的联姻是电影发展史上的一座里程碑。数字化的视频编辑技术不仅让人们体验到了前所未有的视觉冲击效果,也为人们的日常生活带来了无穷的乐趣。现在,利用PC自编自导一部属于自己的电影已经不再高不可攀。 数字技术的进步创造了全新的电影…

使用Grunt启动和运行

开始使用Grunt 大多数开发人员都一致认为,JavaScript开发的速度和节奏在过去的几年里已经相当惊人。不管是Backbone.js和Ember.js的框架还是JS Bin社区,这种语言的发展变化不仅提高我们网站的用户体验,而且我们也在开始使用他们。 当您在使用…

grunt

本文由大漠根据Mike Cunsolo的《Get Up And Running With Grunt》所译,整个译文带有我们自己的理解与思想,如果译得不好或不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:http://coding.smashingmagazine.com/2013/10/…

情感机器:人类的19大思维方式

人类的19 大思维方式 想让别人认为你很卓越时,可以先设想一下自己能做的最糟糕的事情,然后反其道而行之就可以了。 ——内奥米 贾德 Naomi Judd 不论对于人工智能还是心理学,寻找某些系统的方法对我们克服不同类型障碍的方式进行划分&#xf…

《硅谷钢铁侠》读书分享(一)

今天是二月二龙抬头,说实话我这一天都是抬不起头来,为了孩子理发的事情可谓殚精竭虑。 所幸的是下午在孩子睡觉的时候抽空继续看了下《硅谷钢铁侠》,虽然还没有看完,但是已经看到了一些有意思的地方,一本书如果你看到…

视频六大编辑软件大比拼

1、会声会影 会声会影软件目前推出了9.0版本,这又增加了许多新功能,也为广大DV爱好者提供了一款优秀的视频处理软件。它提供了人性化设计的操作方式,它的影片向导为初学者入门提供了方便,它还可自动扫描DV影带,并以场景…

【读书笔记】商业自传-PayPal程序员-硅谷钢铁侠-埃隆·马斯克,SpaceX CEO、特斯拉公司CEO、太阳城公司董事会主席。

【概述】 书名:硅谷钢铁侠:埃隆马斯克的冒险人生 作者:阿什利万斯 周恒星译 日期:2020年05月01日 读书用时:1021页,16小时,113个笔记 【读书笔记】 小马斯克的慢半拍独立思考能力&#xff…