Ping和Traceroute原理[通俗易懂]

Ping和Traceroute原理[通俗易懂]Ping和Traceroute原理

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

Ping和Traceroute原理

两者都是ICMP来完成的,ICMP的主要功能是确认IP包是否成功送达⽬标地址、报告发送过程中IP包被废弃的原因和改善⽹络设置等。ICMP是基于ip协议的,ICMP报文直接封装在ip数据报中来传输。

在这里插入图片描述

Ping

当执行ping命令的时候,源主机首先会构造一个ICMP回送请求数据包,其中包含两个字段:类型,指明该ICMP的类型(此时为8);序号,主要用于区分连续ping的时候发出的多个ICMP数据包,每发出一个Ping消息,序号就会自动加1。此外,为了能够计算RTT,还会在ICMP数据包中附加上当前时间。然后将该ICMP数据包封装在ip数据报中发送给目的主机。

当目的主机接收到该ip数据报后,从ip首部中提取出协议类型字段,从而判断出是一个ICMP类型的报文。此时目的主机会构造一个ICMP回送应答数据报,类型为0,序号为接收到的ICMP回送请求数据包中的序号。然后封装到ip数据报中发送给源主机。

在规定的时间内,如果源主机没有收到ICMP的应答包,则说明目标主机不可达;如果收到了应答数据包,则目标主机可达,并且用当前时间减去数据包最初从源主机上发送出去的时刻就是ICMP数据包的时间延迟(RTT)。

Traceroute

Ping命令利用的是ICMP的查询报文类型,而Traceroute利用的是ICMP的差错报文类型。

作用一:追踪去往⽬的主机时沿途经过的路由器

原理:利用一个数据包每被一个路由器转发就会将TTL减1,如果TTL减为0,路由器就会抛弃该数据包,然后向源主机发送一个ICMP差错报文。

具体来说,源主机循环发送UDP数据包,并且将它们对应的ip数据报中的TTL字段从1开始递增,比如说TTL为2的字段在经过两个路由器转发后TTL变为0,此时该路由器会发送一个类型为超时的ICMP差错报文给源主机,其中包含了该路由器的ip地址。故通过这种方式源主机可以得到去往目的主机路径上的所有路由器。

何时结束循环,即如何判断一个UDP报文段到达了目的主机?可以将UDP报文的目的端口设置为一个不可能的端口号,这时目的主机收到UDP报文段后就会向源主机发送一个ICMP差错报文,类型为端口不可达。所以当源主机收到端口不可达类型的ICMP差错报文时就可以知道到达了目的主机,可以结束循环了。

作用二:确定到目的主机路径上的最小MTU

原理:源主机设置ip数据报首部的分⽚禁⽌标志位设置为1,则路径上的路由器不会对ip分片,故如果数据包的长度大于MTU,则会将该数据包丢弃,然后向源主机发送一个ICMP差错报文,类型为需要进⾏分⽚但设置了不分⽚位,并且在该报文中附带了该链路的MTU。源主机每次收到ICMP报文后将减小数据包的大小,再次去探测路径上的最小MTU,从而得到可以通过该路径把数据包发送给目的主机的MTU。

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

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

(0)
上一篇 2022年7月21日 下午6:36
下一篇 2022年7月21日 下午6:46


相关推荐

  • 用stringstream读取数据「建议收藏」

    用stringstream读取数据「建议收藏」思想:全部读到一个字符串里,遇到”,”就换成空格,然后用这个字符串构造一个stringstream,用>>读到数组里。stringstream用法分为istream和ostringstream.1std::stringname(“zeta”);2intage=27;34ostringstreamos;5o

    2022年5月3日
    38
  • 运维思索:运维管理与运维自动化

    运维思索:运维管理与运维自动化简述各位小伙伴 近期技术文感觉发的有点多 不知是否给大家在工作中解决实际问题带来了一些灵感 为什么这么说呢 因为正是文章中涉及的细小知识点积少成多 让我从零碎繁忙的运维工作中得到了一定程度的解放 相信认真读过的小伙伴 一定会觉得工作中并非只有什么高大上的技术才能解决痛点 恰恰相反 正是那些我们平时忽视的细节才是问题的要害 那么只有切中要害 我们才能对症下药 因此接下来一段时间 我可能会陆续分享运维过程中对一些问题的思考 希望给大家带来一定的启发 本次分享的是运维管理与运维自动化的思考 一 运维的工作

    2026年3月19日
    2
  • Win10自动更新永久关闭,有效的Win10强制更新关闭方法,禁止windows10自动更新,禁止update medic service ,win10显示更新并关机没有单独的关机按钮[通俗易懂]

    Win10自动更新永久关闭,有效的Win10强制更新关闭方法,禁止windows10自动更新,禁止update medic service ,win10显示更新并关机没有单独的关机按钮[通俗易懂]禁用update服务,光这个不行,下边还有windowsupdatemedicservice禁止流程鼠标右键此电脑–>管理–>服务和应用程序–>服务–>windowsupdate–>选择禁用,如果该服务已经启动,记得点击停止,然后点击右下角的应用再确定,确定,就禁止了update服务,但是这个貌似有时候就又启动了,再往下看禁用windowsup…

    2022年5月8日
    329
  • OpenCLaw部署前的完整准备指南:从环境配置到安全验证

    OpenCLaw部署前的完整准备指南:从环境配置到安全验证

    2026年3月13日
    4
  • 父子组件传值方法

    父子组件传值方法vue组件间传值方法:ref、子传父、父传子、VueX、bus。

    2022年5月16日
    49
  • BugkuCTF 部分题解(随缘更新)

    BugkuCTF 部分题解(随缘更新)之前做的题在佛系更新等假期抽空做bugku佛系更新MISC简单取证1南城旧梦成果狗成果狗MISC简单取证1下载得到windows系统下一个目录,获取用户名和密码需要用SAM和system两个文件。把SAM和SYSTEM文件放到Win32文件夹下,运行mimikatz,执行命令所以flag{administrator-QQAAzz_forensics}南城旧梦mmz.bmp文件尾有一段DE@@=<6J:DB625K4,rot47解码后得到stoolkeyisqeadzc意思是使

    2022年7月11日
    31

发表回复

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

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