ping 一下,为什么就能知道“通不通“?——ICMP 这个藏在水面下的“网络修理工“
ping 一下为什么就能知道通不通——ICMP 这个藏在水面下的网络修理工你肯定敲过ping。网络连不上第一反应就是ping 一下。这个命令几乎成了网络好不好的代名词。可你有没有想过一件事——ping敲下去屏幕上蹦出来的那几行Reply from … timexx ms TTLxx背后到底是谁在干活不是 TCP不是 UDP而是一个你可能从没注意过、却天天在用的协议ICMP。一、IP 协议有个锅自己背不动先回到网络层。IP 协议负责把数据包从源地址送到目的地址但它是个尽力而为的协议——只负责送不负责送到。包丢了、路走不通了、TTL 耗尽了IP 自己一声不吭。可网络总得有个报信的吧不能包丢了就石沉大海得告诉发送方包没送成原因是啥。这个报信的就是 ICMP——Internet Control Message Protocol互联网控制报文协议。注意它的定位很多人容易搞混ICMP 是网络层的协议但它的报文要封装在 IP 数据报里传输。也就是说ICMP 是寄居在 IP 头上的一层它本身就是 IP 的一个负载。┌─────────────────────────┐ │ IP 头部 │ 协议字段 1表示里面装的是 ICMP ├─────────────────────────┤ │ ICMP 报文 │ 类型 代码 校验和 数据 └─────────────────────────┘一句话概括 ICMP 的职责报告差错 提供查询。它不是为了传业务数据而是为了诊断和控制网络本身。二、看透 ICMP 报文的身份证类型 代码ICMP 报文的核心是两个字段类型Type和代码Code。类型说明这是哪一类事代码进一步说明这一类里的哪一种情况。打个比方类型是派出所代码是具体警情。同样是目的不可达Type 3代码能细分出一大堆网络不可达Code 0、主机不可达Code 1、协议不可达Code 2、端口不可达Code 3……下面这张表把最常用的几种列出来类型代码含义谁在用00回显应答Echo Replyping 的回信30~15目的不可达报告路走不通50~3重定向告诉主机有更优的路由80回显请求Echo Requestping 的去信110/1超时TTL 耗尽 / 分片重组超时traceroute 的探针看到 Type 8 和 Type 0 了吗这就是ping的全部秘密。三、ping 到底在做什么一问一答ping的本质就是发一个ICMP 回显请求Type 8然后等对方回一个ICMP 回显应答Type 0。一台机器收到 Type 8 的报文它的网络协议栈会自动完全不需要用户程序参与回一个 Type 0。所以哪怕对方没有跑任何服务、没有开任何端口只要它的网络是通的、IP 层是活的它就会回你。这解释了为什么ping能测网络连通性而不是某个服务是否启动——它测的是网络层到网络层之间那根线通不通跟应用层的端口、服务一点关系都没有。主机A 主机B │ Type 8 Echo Request │ │────────────────────────────▶│ │ │ │ Type 0 Echo Reply │ │◀────────────────────────────│ │ │ time (收到应答时刻 - 发出请求时刻) TTL 应答包里剩下的生存时间那timexx ms和TTLxx又是怎么来的time就是这一来一回的往返时延RTT。TTL这个有意思。TTLTime To Live生存时间是 IP 头里的一个字段包每经过一个路由器就减 1减到 0 路由器就把包丢掉并回一个 ICMP 超时报文。ping显示的那个 TTL是应答包到达你这里时剩下的值。所以你可以反推它初始值——常见系统初始值Linux 是 64Windows 是 128。你看到 TTL6x对方八成是台 Linux看到 12x大概率是 Windows。四、traceroute靠 TTL逐站敲门ping只能告诉你能不能到但网络走不通时你更想知道具体卡在哪一跳。这时候tracerouteWindows 上是tracert登场了。它的原理巧就巧在利用了 TTL 这个字段——故意让包死在半路上逼每个路由器报出自己的身份。做法是这样先把 TTL 设为 1发一个探测包。第 1 个路由器收到后TTL 减 1 变成 0它就把包丢了同时回一个ICMP 超时报文Type 11。这个超时报文的来源 IP就是第 1 个路由器的地址。再把 TTL 设为 2。包经过第 2 个路由器时 TTL 耗尽第 2 个路由器回超时报文。于是你知道了第 2 跳的地址。如此递增直到包终于抵达目的地。目的地收到后回的不是超时而是端口不可达Type 3 Code 3——因为 traceroute 故意用一个目标机器上没人监听的端口。你看到端口不可达就知道到终点啦。TTL1 ──▶ R1 返回超时 第1跳 TTL2 ──▶ R2 返回超时 第2跳 TTL3 ──▶ R3 返回超时 第3跳 ... TTLn ──▶ 目的主机 返回端口不可达到终点了每一跳都让它报一次家门整条路径就串出来了。这就是traceroute背后的全部智慧——用故意找死的方式去照亮平时看不见的中间路径。五、ICMP 的两副面孔好东西也能被用来干坏事ICMP 设计之初是为了报好消息和修网络但它开放、无认证的特性也让它成了攻击者眼里的工具。最典型的就是ICMP 洪泛攻击Ping Flood攻击者向目标疯狂发送海量的回显请求目标机器疲于回应答CPU 和带宽被耗尽正常服务就瘫了。历史上还有过Ping of Death——利用老的协议栈处理超大分片时的漏洞一个构造过的 ping 就能让系统崩溃。这也是为什么很多公网服务器会干脆禁掉 ICMP图省事一刀切。结果就是你 ping 它没反应并不代表它真的挂了只是它不搭理你而已。所以记住一个常识ping 不通 ≠ 对方不在线也可能是对方防火墙把 ICMP 挡了。别一 ping 不通就断定是网络断了。六、408 里 ICMP 怎么考ICMP 在 408 网络科目里属于网络层这一章分值不高但选择题高频。常考的姿势有这几种ICMP 工作在哪一层、封装在哪个协议里送分题但每年都有人答成传输层。ping 用的是哪两个报文类型Echo Request / Reply。traceroute 靠什么字段逐跳探测TTL。ICMP 差错报告报文里会带上原始 IP 头 前 8 字节数据——这个细节偶尔会考因为这 8 字节正好能装下 UDP 头或 TCP 的源/目的端口方便报错报对人。这几个点都要搞明白为什么而不是死背。比如为什么差错报文要塞回原始头——因为只有带上原始头接收方才知道我发出去的哪个包出事了ICMP 自己并不包含足够的信息去定位。计算机网络这门课知识点零碎、爱考协议背后的设计动机。这类容易混、容易忘的点建议用 CoLearnyantucs.com的 AI 错题集把每次做错的协议题收进去考前集中回炉卡壳了就丢给 AI 答疑问traceroute 为什么 TTL 逐跳加 1 就能探出路径它会顺着报文流给你讲透。写在最后ICMP 这种协议平时你感觉不到它的存在只有在网络出问题的那一刻它才从幕后走到台前——ping和traceroute这两个最朴素的排障命令全靠它在底下撑着。这让我想起一个挺朴素的道理一个系统要能长期运转光有干正事的通道是不够的还得有一条报故障的通道。文件传输是正事ICMP 就是那条默默报信的维修热线。没有它你连网络死在哪一跳都不知道。下次再敲ping你看到的就不再是几行冷冰冰的回显而是一个巧妙的一问一答协议在千里之外替你把网络这根线从头探到尾。想把这门课的路由、ICMP、ARP、TCP 这些协议串成一张完整的图推荐 B站【408实验室】的《数据结构》课程跟着把网络层到传输层的原理一次捋清比零散地背协议名靠谱得多。

相关新闻

小白也能轻松玩转龙虾:虾壳云一键部署 OpenClaw v2.7.9 智能助手,TaoToken 统一 Key 接入实操

小白也能轻松玩转龙虾:虾壳云一键部署 OpenClaw v2.7.9 智能助手,TaoToken 统一 Key 接入实操

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 6:39:39 阅读更多 →
字符串处理实战:拼接、截取、编码转换与性能优化全解析

字符串处理实战:拼接、截取、编码转换与性能优化全解析

1. 字符串处理的核心价值与场景拆解字符串这东西,看起来简单,真到用的时候才发现坑多得很。我做了十多年开发,几乎每个项目都绕不开字符串处理,从最基础的拼接、截取,到复杂的正则匹配、编码转换、性能优化&#xff0c…

2026/10/13 23:04:53 阅读更多 →
Qt+MySQL医疗预约系统:实现挂号事务与号源原子扣减

Qt+MySQL医疗预约系统:实现挂号事务与号源原子扣减

简介:这是一套基于MySQL数据库与Qt框架开发的医疗预约系统完整源码,面向计算机类专业学生(如计科、人工智能、物联网、大数据等)及初入职场的开发者,适用于课程设计、大作业实践与毕业设计选题。资源包含22个文件&…

2026/10/11 1:02:46 阅读更多 →

最新新闻

纯Python实现猜数字游戏:从零到避坑的完整指南

纯Python实现猜数字游戏:从零到避坑的完整指南

猜数字游戏大概是很多人的第一个编程项目。它不像计算器那样枯燥,也不需要复杂的界面,但一套完整流程走下来,变量、输入输出、条件判断、循环、异常处理这些编程入门核心概念全部能练到。我最近又把这个小项目从头写了一遍,用最基…

2026/10/14 6:39:29 阅读更多 →
Vibe Coding工具链选型四步框架:效率提升27%与成本控制24倍

Vibe Coding工具链选型四步框架:效率提升27%与成本控制24倍

1. 效率提升27%背后的真实账本先把结论摆出来:同样一个中等复杂度的业务模块,用对工具链和用错工具链,交付效率差距能拉到27%左右,而综合成本差距可以到24倍。这个数字不是拍脑袋来的,是我在三个不同类型的项目里反复测…

2026/10/14 6:39:29 阅读更多 →
两个模型同价,真正拉开成本的是那个默认值

两个模型同价,真正拉开成本的是那个默认值

📋 目录 一、两个模型,一个价二、纠错一:跑量模型不等于更便宜三、纠错二:贵的是 quality,而且它默认不贵四、逐档成本表,和一个反直觉的发现五、纠错三:分辨率不是按像素收费六、参考图才是隐…

2026/10/14 6:39:29 阅读更多 →
Vibe Coding工具选型与四步实施框架:效率提升27%与成本差24倍背后的工程实践

Vibe Coding工具选型与四步实施框架:效率提升27%与成本差24倍背后的工程实践

1. 效率数字背后的真实账本先把标题里两个数字拆开看。效率提升27%这个量级,放在任何研发团队里都算得上可观,但它不是凭空冒出来的——它通常来自编码环节中重复劳动被压缩、上下文切换次数减少、以及试错周期缩短这三块的叠加。而成本差24倍这个说法&a…

2026/10/14 6:39:29 阅读更多 →
新手入门3D视觉(一)WSL2+Ubuntu22.04+PCL环境配置

新手入门3D视觉(一)WSL2+Ubuntu22.04+PCL环境配置

「零基础转行工业 3D 视觉」系列第一篇。 本文记录我用 WorkBuddy 把第 1 周环境搭起来的完整过程:3 个步骤,手动敲的命令不超过 3 条。 全程用到的 3 个脚本放在文末附件里,可以直接下载复用。开始之前:一条最重要的提醒不要装 V…

2026/10/14 6:39:29 阅读更多 →
深度学习损失函数选型实战:从MSE到Focal Loss的原理与踩坑

深度学习损失函数选型实战:从MSE到Focal Loss的原理与踩坑

损失函数这玩意儿,说起来是深度学习里最基础的组件之一,但恰恰是很多同学在实战里翻车最频繁的地方。我带项目的时候经常看到有人模型结构抄得挺像样,学习率调度也配了一堆,可训练出来的结果就是不对,Loss 曲线跟心电图…

2026/10/14 6:38:29 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →