趣谈网络协议
刘超
前网易研究院云计算技术部首席架构师
130416 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 51 讲
趣谈网络协议
15
15
1.0x
00:00/00:00
登录|注册

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

Traceroute:差错报文类型的使用
ping:查询报文类型的使用
差错报文类型
查询报文类型
ICMP报文类型
小结
ICMP协议的格式
ICMP与ping:投石问路的侦察兵

该思维导图由 AI 生成,仅供参考

无论是在宿舍,还是在办公室,或者运维一个数据中心,我们常常会遇到网络不通的问题。那台机器明明就在那里,你甚至都可以通过机器的终端连上去看。它看着好好的,可是就是连不上去,究竟是哪里出了问题呢?

ICMP 协议的格式

一般情况下,你会想到 ping 一下。那你知道 ping 是如何工作的吗?
ping 是基于 ICMP 协议工作的。ICMP 全称 Internet Control Message Protocol,就是互联网控制报文协议这里面的关键词是“控制”,那具体是怎么控制的呢?
网络包在异常复杂的网络环境中传输时,常常会遇到各种各样的问题。当遇到问题的时候,总不能“死个不明不白”,要传出消息来,报告情况,这样才可以调整传输策略。这就相当于我们经常看到的电视剧里,古代行军的时候,为将为帅者需要通过侦察兵、哨探或传令兵等人肉的方式来掌握情况,控制整个战局。
ICMP 报文是封装在 IP 包里面的。因为传输指令的时候,肯定需要源地址和目标地址。它本身非常简单。因为作为侦查兵,要轻装上阵,不能携带大量的包袱。
ICMP 报文有很多的类型,不同的类型有不同的代码。最常用的类型是主动请求为 8,主动请求的应答为 0

查询报文类型

我们经常在电视剧里听到这样的话:主帅说,来人哪!前方战事如何,快去派人打探,一有情况,立即通报!
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

ICMP与ping:网络世界的侦察兵 ICMP协议就像网络世界的侦察兵,通过ping工具进行网络连通性测试。ping发送的查询报文类似于主帅派出侦察兵查探敌情,而收到的回复则是侦察兵的报告。文章详细解释了ICMP报文的结构和含义,让读者能够快速了解ICMP协议的工作原理和报文类型。除了ping,文章还介绍了Traceroute的使用,它利用ICMP规则故意制造能够产生错误的场景,用于追踪去往目的地时沿途经过的路由器。此外,Traceroute还可以确定路径的MTU,通过故意设置不分片来检测路径的最大传输单元。总的来说,ICMP与ping的工作原理和报文类型的解释,让读者更好地理解网络连通性测试的基本原理。对于网络运维人员和对网络感兴趣的读者来说,这是一篇值得阅读的技术文章。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《趣谈网络协议》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(164)

  • 最新
  • 精选
  • knull
    许多人问:tracerouter发udp,为啥出错回icmp? 正常情况下,协议栈能正常走到udp,当然正常返回udp。 但是,你主机不可达,是ip层的(还没到udp)。ip层,当然只知道回icmp。报文分片错误也是同理。

    作者回复: 是的

    2018-09-12
    5
    158
  • 好像不发ICMP差错报文的一种情况就是ICMP 的差错报文出错,其它还有目的地址为广播时或者源地址不唯一时也不发差错报文。 前面评论问udp为什么返回ICMP报文的,ICMP一般认为属于网络层的,和IP同一层,是管理和控制IP的一种协议,而UDP和TCP是传输层,所以UDP出错可以返回ICMP差错报文

    作者回复: 赞

    2018-06-01
    5
    116
  • 手撕油条
    越听越想听,一周三更听不爽

    作者回复: 谢谢

    2018-06-01
    60
  • weineel
    老师您好,以我的经验使用tcp/udp协议可以用scoket api编程,但是文中提到ping程序使用了ip协议,那ping程序的实现是不是用到了其他网络编程接口? 换句话说,每一层的协议都有相应的api可以调用吗?有的话又是什么呢? 但又感觉我们写的程序一般是应用层用socket就行了…

    作者回复: 不是每一层都有接口的,tcp ip协议栈在内核里面,内核的最外层是系统调用,所以你看起来就只能调用socket了

    2018-06-02
    2
    20
  • xfan
    如果网络不可达,是谁回复的差错报文呢,是网关吗

    作者回复: 网络不可达也是到达了某个地方,发现走不下去了,到哪里哪里返回,一般是某个路由器

    2019-04-09
    2
    19
  • Trust me ҉҉҉҉҉҉҉❀
    tracerouter发送的包是什么程序给的响应? 是目标主机的traceroute程序?还是ICMP

    作者回复: 没有服务端,全部在制造错误

    2018-06-01
    12
  • 西门吹牛
    ICMP是第三层网络层的协议 计算几网络教材是这么描述的:为了更有效转发ip数据报和提高转发的机会,ICMP允许主机或者路由器报告差错情况和提供有关异常情况的报告,用于传输出错报告控制信息; 简单的道理放到教材中就晦涩难懂了。 其实可以理解为,ICMP报文可以在主机和路由器之间传输,但传输的不是用户数据,而是网络通不通、主机是否可达、路由是否可用等网络本身的消息,所以可以比作侦察兵,用来侦察在ip层报文传输过程中遇到的异常情况,并能汇报信息,有了异常信息,就可以控制异常,达到更有效的传输效率;控制这种报文,用的是差错报文类型; 另外一种是查询报文类行,可以理解为用来测试俩个主机间的连接是否有效,报文多久能到达; 总之,通过ICMP协议,可以对ip层报文的传输做到把控

    作者回复: 是的

    2020-06-10
    2
    11
  • anthann
    Traceroute发送的是udp包,为什么也能收到icmp响应呢?

    作者回复: 所以是侦查兵啊,错误了就会发

    2018-06-01
    7
  • 约书亚
    差错包也出问题是不是就拉到了,看上层是不是定时重发的协议了?

    作者回复: 是的,差错包不会在发差错包

    2018-06-01
    7
  • yang
    [小白评论] 看评论说 icmp也属于网络层啊? 我还以为icmp属于应用层呢

    作者回复: icmp是网络层,ping是应用

    2019-08-29
    3
    5
收起评论
显示
设置
留言
99+
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部