• ping与Traceroute是如何工作的


    ping 是基于 ICMP 协议工作的。ICMP 全称 Internet Control Message Protocol,就是互联网控制报文协议。

    ICMP 报文是封装在 IP 包里面的。因为传输指令的时候,肯定需要源地址和目标地址。它本身非常简单。

    ICMP 报文有很多的类型,不同的类型有不同的代码。最常用的类型是主动请求为 8,主动请求的应答为 0。

    对 ping 的主动请求,进行网络抓包,称为 ICMP ECHO REQUEST。同理主动请求的回复,称为ICMP ECHO REPLY。

    在选项数据中,ping 还会存放发送请求的时间值,来计算往返时间,说明路程的长短。

    差错报文类型::终点不可达为 3,源抑制为 4,超时为 11,重定向为 5。网络不可达代码为 0,主机不可达代码为 1,协议不可达代码为 2,端口不可达代码为 3,需要进行分片但设置了不分片位代码为 4。

    ping 的发送和接收过程:

    Traceroute 的第一个作用就是故意设置特殊的 TTL,来追踪去往目的地时沿途经过的路由器。Traceroute 就拿到了所有的路由器 IP。当然,有的路由器压根不会回这个 ICMP。这也是 Traceroute 一个公网的地址,看不到中间路由的原因。

    怎么知道 UDP 有没有到达目的主机呢?Traceroute 程序会发送一份 UDP 数据报给目的主机,但它会选择一个不可能的值作为 UDP 端口号(大于 30000)。当该数据报到达时,将使目的主机的 UDP 模块产生一份“端口不可达”错误 ICMP 报文。如果数据报没有到达,则可能是超时。

    Traceroute 还有一个作用是故意设置不分片,从而确定路径的 MTU。要做的工作首先是发送分组,并设置“不分片”标志。发送的第一个分组的长度正好与出口 MTU 相等。如果中间遇到窄的关口会被卡住,会发送 ICMP 网络差错包,类型为“需要进行分片但设置了不分片位”。其实,这是人家故意的好吧,每次收到 ICMP“不能分片”差错时就减小分组的长度,直到到达目标主机。

    此文章为9月Day7学习笔记,内容来源于极客时间《趣谈网络协议》,推荐该课程。

  • 相关阅读:
    Vue事件修饰符的使用
    结构建模设计——Solidworks软件之特征成型中异形孔向导和线性阵列功能实战总结
    字体反爬积累知识
    (2022.9)raspberry 4安装HP 1020 plus打印机,利用树莓派4制作无线打印服务器
    错题集(c语言)
    驱动开发:内核RIP劫持实现DLL注入
    RabbitMQ的RPM包安装和Python读写操作
    华为设备Smart Link和Monitor Link配置命令
    Java#15(集合)
    Python 全栈测试开发 Chapter8:接口测试
  • 原文地址:https://blog.csdn.net/key_3_feng/article/details/132747239