ping traceroute原理

ping traceroute原理ping命令工作原理ping命令主要是用于检测网络的连通性。Ping命令发送一个ICMP请求报文给目的IP,然后目的IP回复一个ICMP报文。原理:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,可以初步判断目标主机的操作系统等。因为ping命令是使用ICMP协议,…

大家好,又见面了,我是你们的朋友全栈君。

ping命令工作原理

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

Ping命令发送一个ICMP请求报文给目的IP,然后目的IP回复一个ICMP报文。

原理:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,可以初步判断目标主机的操作系统等。

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

 

traceroute工作原理

traceroute是利用ICMP及IP头部的TTL。首先,traceroute送出一个TTL是1的IP数据包(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器收到IP数据包时,将TTL减1。此时,TTL变为0,所以将该路由器会将此IP数据包丢掉,并返回一个ICMP数据包(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),当traceroute收到这个消息后,接着继续发生TTL为2的IP数据包给第二个路由器。以此类推,直到IP数据包达到最后一台路由器时,会返回一个ICMP echo reply的数据包。

1.ICMP协议介绍

前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。

当传送IP数据包发生错误--比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会,这 也就是为什么说建立在IP层以上的协议是可能做到安全的原因。ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成。而前 16bit就组成了ICMP所要传递的信息。书上的图6-3清楚的给出了错误类型和代码的组合代表的意思。

尽管在大多数情况下,错误的包传送应该给出ICMP报文,但是在特殊情况下,是不产生ICMP错误报文的。如下

  1. ICMP差错报文不会产生ICMP差错报文(出IMCP查询报文)(防止IMCP的无限产生和传送)
  2. 目的地址是广播地址或多播地址的IP数据报。
  3. 作为链路层广播的数据报。
  4. 不是IP分片的第一片。
  5. 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地 址或多播地址。

虽然里面的一些规定现在还不是很明白,但是所有的这一切规定,都是为了防止产生ICMP报文的无限传播而定义的。

ICMP协议大致分为两类,一种是查询报文,一种是差错报文。其中查询报文有以下几种用途:

  1. ping查询(不要告诉我你不知道ping程序)
  2. 子网掩码查询(用于无盘工作站在初始化自身的时候初始化子网掩码)
  3. 时间戳查询(可以用来同步时间)

而差错报文则产生在数据传送发生错误的时候。就不赘述了。

2.ICMP的应用–ping

ping可以说是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文档来了解这些,这里就不赘述了。

转载于:https://www.cnblogs.com/carlos-liye/p/6681321.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162544.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SpringBoot整合RabbitMQ之实战

    SpringBoot整合RabbitMQ之实战实战前言RabbitMQ作为目前应用相当广泛的消息中间件,在企业级应用、微服务应用中充当着重要的角色。特别是在一些典型的应用场景以及业务模块中具有重要的作用,比如业务服务模块解耦、异步通信、高并发限流、超时业务、数据延迟处理等。其中课程的学习链接地址:https://edu.csdn.net/course/detail/9314RabbitMQ官网拜读首先,让我们先拜读Ra…

    2022年5月14日
    35
  • ftp工具类:上传与下载文件

    ftp工具类:上传与下载文件准备工作服务器已经配置好ftp服务linux服务器搭建ftp服务:https://program.blog.csdn.net/article/details/88825921需要用到的jar包:<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</…

    2022年5月11日
    42
  • Python之namedtuple源码分析建议收藏

    namedtuple函数源码通过函数模板字符串_class_template.format()会生成我们需要的实例类:eg:people=namedtuple("person&qu

    2021年12月19日
    41
  • 离散对数和椭圆曲线加密原理[通俗易懂]

    离散对数和椭圆曲线加密原理[通俗易懂]序言现代公钥加密系统中,常用的加密算法除了RSA还有离散对数加密和椭圆曲线加密。这两者原理比较相似,在这里一并介绍。离散对数问题我们在中学里学的对数问题是指,给定正实数aaa和axaxa^x,求xxx。也就是计算x=logaaxx=loga⁡axx=\log_a{a^x}。这是实数域上的对数问题,不是什么难算的东西,随便按一下计算器结果就出来了。而离散对…

    2022年5月7日
    174
  • server .mappath[通俗易懂]

    server .mappath[通俗易懂]1.Server.MapPath(“/”) 应用程序根目录所在的位置如C:/Inetpub/wwwroot/2.Server.MapPath(“./”) 表示所在页面的当前目录   注:等价于Server.MapPath(“”) 返回Server.MapPath(“”)所在页面的物理文件路径3.Server.MapPath(“../”)表示上一级目录4.Serve

    2022年7月12日
    21
  • java常量有哪些_JAVA常量介绍「建议收藏」

    java常量有哪些_JAVA常量介绍「建议收藏」常量:在程序执行过程中,其值不发生改变的量;1、分类:字面值常量和自定义常量;1、字面值常量有以下几种:字符串常量、小数常量、整数常量、字符常量、布尔常量(true、false)、空常量(null);2、整数常量的表现形式:二进制:由0、1组成,以0b开头;八进制:由0,1,….7组成,以0开头;十进制:由0,1,……9组成,整数默认是十进制;十六进制:由0,1,….9,…

    2022年7月7日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号