首页 > 编程知识 正文

ping的实现原理,tracert原理及其实现

时间:2023-05-03 07:28:16 阅读:59393 作者:3958

ping命令的工作方式

ping命令主要用于检测网络的连接性。

Ping命令将ICMP请求消息发送到目的地IP,目的地IP回复ICMP消息。

原理:网络上的机器有唯一确定的IP地址。 向目标IP地址发送数据包时,对方必须返回同样大小的数据包。 可以根据返回的包确定目标主机的存在,并初步确定目标主机的操作系统等。

ping命令使用ICMP协议,因此没有端口号,但有两个域:类型和代码。

跟踪机制

traceroute是使用了ICMP以及IP报头的TTL。 首先,traceroute将TTL为1的IP数据包发送到目标。 实际上,每次发送三个40字节的数据包(包括源地址、目标地址和发送的时间标签)时,路径上的第一个路由器在接收到IP数据包时将TTL减少1。 此时,由于TTL为0,所以路由器丢弃该IP分组,返回包含发送IP分组的源地址、IP分组的所有内容和路由器的IP地址的ICMP分组,在traceroute接收到该消息之后进行牵引这样,在IP包到达最后一个路由器之前,将返回ICMP echo reply包。

1.ICMP协议介绍

如上所述,IP协议不是可信协议,不保证数据到达。 那么,当然,保证数据到达的工作应该由其他模块来进行。 其中一个重要模块是网络控制消息(ICMP )协议。

如果IP包发送出现错误(如无法到达主机或无法路由),ICMP协议会将错误消息打包并发送回主机。 给主机处理错误的机会。 也就是说,建立IP层以上的协议有可能实现安全性。 IMP包由8bit错误类型、8bit代码和16bit校验和组成。 最初的16位构成了ICMP想要传达的信息。 书中的图6-3清楚地表明了错误类型和代码组合的代表性含义。

在大多数情况下,错误的分组转发应该提供ICMP消息,但在特殊情况下,不会生成ICMP错误消息。 如下所示

ICMP错误消息是广播地址或多播地址的IP数据报(不生成ICMP错误消息(IMCP查询消息) ) (防止IMCP的无限生成和转发)。 作为链路层广播的数据报。 它不是IP分片的第一个切片。 源地址不是单个主机的数据报。 这意味着源地址不能是零地址、环回地址、广播地址或多播地址。 其中的一些规定尚不清楚,但所有这些规定都是为了防止ICMP消息的无限传播而定义的。

ICMP协议大致分为两种,一种是查询消息,另一种是错误消息。 其中,查询消息具有以下用途:

ping查询(请不要告诉我你不知道ping程序)查询子网掩码)无盘工作站初始化自身时初始化子网掩码(时间戳查询)可用于时间同步)错误错误错误省略说明。

2.ICMP的应用- -萍萍可以说是ICMP最有名的应用。 当你不能访问我们的某个网站。 通常,ping这个网站

。ping会回显出一些有用的信息。一般的信息如下:

Reply from 10.4.24.1: bytes=32 time<1ms TTL=255
Reply from 10.4.24.1: bytes=32 time<1ms TTL=255
Reply from 10.4.24.1: bytes=32 time<1ms TTL=255
Reply from 10.4.24.1: bytes=32 time<1ms TTL=255

Ping statistics for 10.4.24.1:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

ping这个单词源自声纳定位,而这个程序的作用也确实如此,它利用ICMP协议包来侦测另一个主机是否可达。原理是用类型码为0的ICMP发请 求,受到请求的主机则用类型码为8的ICMP回应。ping程序来计算间隔时间,并计算有多少个包被送达。用户就可以判断网络大致的情况。我们可以看到, ping给出来了传送的时间和TTL的数据。我给的例子不太好,因为走的路由少,有兴趣地可以ping一下国外的网站比如sf.net,就可以观察到一些 丢包的现象,而程序运行的时间也会更加的长。
ping还给我们一个看主机到目的主机的路由的机会。这是因为,ICMP的ping请求数据报在每经过一个路由器的时候,路由器都会把自己的ip放到该数 据报中。而目的主机则会把这个ip列表复制到回应icmp数据包中发回给主机。但是,无论如何,ip头所能纪录的路由列表是非常的有限。如果要观察路由, 我们还是需要使用更好的工具,就是要讲到的Traceroute(windows下面的名字叫做tracert)。

3.ICMP的应用--Traceroute

Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。前面说到,尽管ping工具也可以进行侦测,但是,因为ip头的限制,ping不能完全的记录下所经过的路由器。所以Traceroute正好就填补了这个缺憾。

Traceroute的原理是非常非常的有意思,它受到目的主机的IP后,首先给目的主机发送一个TTL=1(还记得TTL是什么吗?)的UDP(后面就 知道UDP是什么了)数据包,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生 一个主机不可达的ICMP数据报给主机。主机收到这个数据报以后再发一个TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据 报。如此往复直到到达目的主机。这样,traceroute就拿到了所有的路由器ip。从而避开了ip头只能记录有限路由IP的问题。

有人要问,我怎么知道UDP到没到达目的主机呢?这就涉及一个技巧的问题,TCP和UDP协议有一个端口号定义,而普通的网络程序只监控少数的几个号码较 小的端口,比如说80,比如说23,等等。而traceroute发送的是端口号>30000(真变态)的UDP包,所以到达目的主机的时候,目的 主机只能发送一个端口不可达的ICMP数据报给主机。主机接到这个报告以后就知道,主机到了,所以,说Traceroute是一个骗子一点也不为过:)

Traceroute程序里面提供了一些很有用的选项,甚至包含了IP选路的选项,请察看man文档来了解这些,这里就不赘述了。


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。