当前位置: 首页 > news >正文

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学习笔记,内容来源于极客时间《趣谈网络协议》,推荐该课程。

http://www.lryc.cn/news/162849.html

相关文章:

  • CentOS Python环境搭建
  • 亚马逊云科技与伊克罗德推出AI绘画解决方案——imAgine
  • 机器学习课后习题 --- 逻辑回归
  • 软件设计师学习笔记9-进程调度
  • 09:STM32-------USART串口通信+串口数据包
  • “安全即服务”为网络安全推开一道门
  • vue3的生命周期
  • [E2E Test] Python Behave Selenium 一文学会自动化测试
  • Knowledge Graph Prompting for Multi-Document Question Answering
  • ElMessageBox.prompt 点击确认校验成功后关闭
  • 调整Windows11桌面图标间隔
  • Spring最佳实践: 构建高效可维护的Java应用程序
  • stable diffusion webui中的sampler
  • MySQL表的内连和外连
  • StatefulSets In K8s
  • leetcode刷题笔记——单调栈
  • 关于 ogbg-molhi数据集的个人解析
  • RabbitMQ:hello结构
  • SpringBoot整合Redis 并 展示使用方法
  • js中如何实现字符串去重?
  • Axure RP仿QQ音乐app高保真原型图交互模板源文件
  • 2023牛客暑假多校第四场(补题向题解:J)
  • 第 362 场 LeetCode 周赛题解
  • C++ if 语句
  • 业务安全及实战案例
  • 十一)Stable Diffussion使用教程:人物三视图
  • 超级等级福利礼包
  • 如何用Jmeter提取和引用Token
  • C#文件拷贝工具
  • Redis——Java中的客户端和API