ping 与 traceroute 的工作原理分析

ping 与 traceroute 的工作原理分析一、ping    ping程序的主要目的是测试主机是否可达,它发送 ICMP回显请求报文给目的主机,并等待返回ICMP回显应答    ping程序一般会周期性持续地发送ICMP请求报文,除非用户手动终止,或指定了发送报文个数    回显请求和回显应答通过序列号(icmp_seq)进行匹配,下图中序列号依次为1、2、3、4…    pi…

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

一、ping

       ping 程序的主要目的是测试主机是否可达,它发送 ICMP 回显请求报文给目的主机,并等待返回 ICMP 回显应答

       ping 程序一般会周期性持续地发送 ICMP 请求报文,除非用户手动终止,或指定了发送报文个数

       回显请求和回显应答通过序列号(icmp_seq)进行匹配,下图中序列号依次为 1、2、3、4 …

       ping 程序通过数据报中记录的发送请求时间值接收到回显应答报文的当前时间值,计算往返耗时(time)

       ping 与 traceroute 的工作原理分析

常见问题:

1.  为什么 ping 第一次一般会产生更多耗时?

     因为 ping 第一次的时候,需要首先进行 ARP 解析,获取 IP 地址对应的 MAC 地址(同时将映射关系缓存),

     而下次 ping 的时候会直接从 ARP 高速缓存读取,少了一个步骤,自然时间就缩短了!

二、traceroute 

       traceroute 程序的主要目的是获取从当前主机到目的主机所经过的路由

       官方方案(TCP/IP详解里提供的基于 UDP 的方案):通过封装一份 UDP 数据报(指定一个不可能使用的端口,30000以上)依次将数据报的 TTL 值置为 1、2、3…,并发送给目的主机。当路径上第一个路由器收到 TTL 值为 1 的数据报时,首先将该数据报的 TTL 值减 1,发现 TTL 值为 0,而自己并非该数据报的目的主机,就会向源主机发送一个 ICMP 超时报文,traceroute 收到该超时报文,就得到了路径上第一台路由器的地址;然后照此原理,traceroute 发送 TTL 为 2 的数据报时,会收到路径上第二台路由器返回的 ICMP 超时报文,记录第二台路由器的地址;直到报文到达目的主机,目的主机不会返回 ICMP 超时,但由于端口无法使用,就会返回一份端口不可达报文给源主机,源主机收到端口不可达报文,证明数据报已经到达了目的地,停止后续的 UDP 数据报发送,将记录的路径依次打印出来,使命完成,结束任务。

      注意:目的主机端口号最开始设置为 33435,且每发送一个数据报加 1,可以通过命令行选项来改变开始的端口号

       ping 与 traceroute 的工作原理分析

      约束:

      1. 不能保证现在的路由也是将来所要采用的路由,甚至两份连续的 IP 数据报都可能采用不同的路由;

      2. 不能保证 ICMP 报文的路由与 traceoute 程序发送的 UDP 数据报采用同一路由,时间测量可能不准;

      3. 返回的 ICMP 报文中的信源 IP 地址是 UDP 数据报到达的路由器接口的 IP 地址;

      ping 与 traceroute 的工作原理分析

          当从网络1某主机执行 traceroute 程序到网络3某主机,返回的路径将是 if1 和 if3 的地址;

          而反方向,将打印出 if4 和 if2 的地址

缺陷:

       1. 中间路由器有可能做了限制,不返回 ICMP 超时报文,traceroute 就无法获得其地址了,

           只能打印出 * 或 no reply

       2. 目的主机可能由于安全原因不会向源主机返回端口不可达的 ICMP 报文

            尽管探测数据报已经到达了目的主机,但 traceroute 程序收不到端口不可达报文,就仍会持续发送请求 …

       ping 与 traceroute 的工作原理分析

 

 

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

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

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


相关推荐

  • 视差Disparity与深度图

    视差Disparity与深度图转自:http://www.elecfans.com/d/863829.html双目立体视觉,在百度百科里的解释是这样解释的:双目立体视觉(BinocularStereoVision)是机器视觉的一种重要形式,它是基于视差原理并利用成像设备从不同的位置获取被测物体的两幅图像,通过计算图像对应点间的位置偏差,来获取物体三维几何信息的方法。一、视差Disparity与深度图提到双目视觉就不得不提视差图:双目立体视觉融合两只眼睛获得的图像并观察它们之间的差别,使我们可以获得明显的深度感,建立特征间的对

    2022年4月25日
    50
  • httprunner(5)编写测试用例「建议收藏」

    httprunner(5)编写测试用例「建议收藏」编写测试用例HttpRunnerv3.x支持三种测试用例格式pytest,YAML和JSON。官方强烈建议以pytest格式而不是以前的YAML/JSON格式编写和维护测试用例格式关系如下图所示

    2022年7月28日
    10
  • Cookie–记住上一次访问时间案例(Java)

    Cookie–记住上一次访问时间案例(Java)Cookie–记住上一次访问时间案例(Java)博客说明文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!需求访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问。如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串分析可以采用Cookie来完成在服务器中的Servlet判断是否有一个名为lastTime的cookie有:不是第一次访问响应数据:欢迎回来,您上次访问时间为:2020年

    2022年7月8日
    18
  • MySQL数据库笔记(三)

    MySQL数据库笔记(三)

    2021年7月10日
    77
  • TCP/IP三次握手与四次挥手学习笔记(一)「建议收藏」

    TCP/IP三次握手与四次挥手学习笔记(一)

    2022年2月14日
    31
  • android之cannot convert from Fragment1 to Fragment

    在写一个音乐播放器的时候,用到了fragment,结果在需要返回Fragment的方法里面,无法将Fragment1(Fragment的子类)强制转换成Fragment,很是纳闷,我是参照一个开源代码来做的,源码里面很正常,我这里却报错,后来才发现,是对包的导入出现了差错,在Fragment1中导入的是android.app.Fragment而在出错的那个类里面是用android.su

    2022年3月9日
    43

发表回复

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

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