第7讲 | ICMP与ping:投石问路的侦察兵
刘超

无论是在宿舍,还是在办公室,或者运维一个数据中心,我们常常会遇到网络不通的问题。那台机器明明就在那里,你甚至都可以通过机器的终端连上去看。它看着好好的,可是就是连不上去,究竟是哪里出了问题呢?
ICMP 协议的格式
一般情况下,你会想到 ping 一下。那你知道 ping 是如何工作的吗?
ping 是基于 ICMP 协议工作的。ICMP 全称 Internet Control Message Protocol,就是互联网控制报文协议。这里面的关键词是“控制”,那具体是怎么控制的呢?
网络包在异常复杂的网络环境中传输时,常常会遇到各种各样的问题。当遇到问题的时候,总不能“死个不明不白”,要传出消息来,报告情况,这样才可以调整传输策略。这就相当于我们经常看到的电视剧里,古代行军的时候,为将为帅者需要通过侦察兵、哨探或传令兵等人肉的方式来掌握情况,控制整个战局。
ICMP 报文是封装在 IP 包里面的。因为传输指令的时候,肯定需要源地址和目标地址。它本身非常简单。因为作为侦查兵,要轻装上阵,不能携带大量的包袱。

ICMP 报文有很多的类型,不同的类型有不同的代码。最常用的类型是主动请求为 8,主动请求的应答为 0。
查询报文类型
我们经常在电视剧里听到这样的话:主帅说,来人哪!前方战事如何,快去派人打探,一有情况,立即通报!
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《趣谈网络协议》,新⼈⾸单¥68
《趣谈网络协议》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(163)
- 最新
- 精选
- knull许多人问:tracerouter发udp,为啥出错回icmp? 正常情况下,协议栈能正常走到udp,当然正常返回udp。 但是,你主机不可达,是ip层的(还没到udp)。ip层,当然只知道回icmp。报文分片错误也是同理。
作者回复: 是的
5156 - 盖好像不发ICMP差错报文的一种情况就是ICMP 的差错报文出错,其它还有目的地址为广播时或者源地址不唯一时也不发差错报文。 前面评论问udp为什么返回ICMP报文的,ICMP一般认为属于网络层的,和IP同一层,是管理和控制IP的一种协议,而UDP和TCP是传输层,所以UDP出错可以返回ICMP差错报文
作者回复: 赞
5114 - 手撕油条越听越想听,一周三更听不爽
作者回复: 谢谢
59 - weineel老师您好,以我的经验使用tcp/udp协议可以用scoket api编程,但是文中提到ping程序使用了ip协议,那ping程序的实现是不是用到了其他网络编程接口? 换句话说,每一层的协议都有相应的api可以调用吗?有的话又是什么呢? 但又感觉我们写的程序一般是应用层用socket就行了…
作者回复: 不是每一层都有接口的,tcp ip协议栈在内核里面,内核的最外层是系统调用,所以你看起来就只能调用socket了
219 - xfan如果网络不可达,是谁回复的差错报文呢,是网关吗
作者回复: 网络不可达也是到达了某个地方,发现走不下去了,到哪里哪里返回,一般是某个路由器
216 - Trust me ҉҉҉҉҉҉҉❀tracerouter发送的包是什么程序给的响应? 是目标主机的traceroute程序?还是ICMP
作者回复: 没有服务端,全部在制造错误
12 - 西门吹牛ICMP是第三层网络层的协议 计算几网络教材是这么描述的:为了更有效转发ip数据报和提高转发的机会,ICMP允许主机或者路由器报告差错情况和提供有关异常情况的报告,用于传输出错报告控制信息; 简单的道理放到教材中就晦涩难懂了。 其实可以理解为,ICMP报文可以在主机和路由器之间传输,但传输的不是用户数据,而是网络通不通、主机是否可达、路由是否可用等网络本身的消息,所以可以比作侦察兵,用来侦察在ip层报文传输过程中遇到的异常情况,并能汇报信息,有了异常信息,就可以控制异常,达到更有效的传输效率;控制这种报文,用的是差错报文类型; 另外一种是查询报文类行,可以理解为用来测试俩个主机间的连接是否有效,报文多久能到达; 总之,通过ICMP协议,可以对ip层报文的传输做到把控
作者回复: 是的
10 - anthannTraceroute发送的是udp包,为什么也能收到icmp响应呢?
作者回复: 所以是侦查兵啊,错误了就会发
7 - 约书亚差错包也出问题是不是就拉到了,看上层是不是定时重发的协议了?
作者回复: 是的,差错包不会在发差错包
7 - 多襄丸[小白评论] 看评论说 icmp也属于网络层啊? 我还以为icmp属于应用层呢
作者回复: icmp是网络层,ping是应用
35
收起评论