趣谈网络协议
刘超
网易研究院云计算技术部首席架构师
立即订阅
39451 人已学习
课程目录
已完结 51 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 想成为技术牛人?先搞定网络协议!
免费
第一模块 通信协议综述 (4讲)
第1讲 | 为什么要学习网络协议?
第2讲 | 网络分层的真实含义是什么?
第3讲 | ifconfig:最熟悉又陌生的命令行
第4讲 | DHCP与PXE:IP是怎么来的,又是怎么没的?
第二模块 底层网络知识详解:从二层到三层 (5讲)
第5讲 | 从物理层到MAC层:如何在宿舍里自己组网玩联机游戏?
第6讲 | 交换机与VLAN:办公室太复杂,我要回学校
第7讲 | ICMP与ping:投石问路的侦察兵
第8讲 | 世界这么大,我想出网关:欧洲十国游与玄奘西行
第9讲 | 路由协议:西出网关无故人,敢问路在何方
第二模块 底层网络知识详解:最重要的传输层 (4讲)
第10讲 | UDP协议:因性善而简单,难免碰到“城会玩”
第11讲 | TCP协议(上):因性恶而复杂,先恶后善反轻松
第12讲 | TCP协议(下):西行必定多妖孽,恒心智慧消磨难
第13讲 | 套接字Socket:Talk is cheap, show me the code
第二模块 底层网络知识详解:最常用的应用层 (4讲)
第14讲 | HTTP协议:看个新闻原来这么麻烦
第15讲 | HTTPS协议:点外卖的过程原来这么复杂
第16讲 | 流媒体协议:如何在直播里看到美女帅哥?
第17讲 | P2P协议:我下小电影,99%急死你
第二模块 底层网络知识详解:陌生的数据中心 (6讲)
第18讲 | DNS协议:网络世界的地址簿
第19讲 | HTTPDNS:网络世界的地址簿也会指错路
第20讲 | CDN:你去小卖部取过快递么?
第21讲 | 数据中心:我是开发商,自己拿地盖别墅
第22讲 | VPN:朝中有人好做官
第23讲 | 移动网络:去巴塞罗那,手机也上不了脸书
第三模块 热门技术中的应用:云计算中的网络 (5讲)
第24讲 | 云中网络:自己拿地成本高,购买公寓更灵活
第25讲 | 软件定义网络:共享基础设施的小区物业管理办法
第26讲 | 云中的网络安全:虽然不是土豪,也需要基本安全和保障
第27讲 | 云中的网络QoS:邻居疯狂下电影,我该怎么办?
第28讲 | 云中网络的隔离GRE、VXLAN:虽然住一个小区,也要保护隐私
第三模块 热门技术中的应用:容器技术中的网络 (3讲)
第29讲 | 容器网络:来去自由的日子,不买公寓去合租
第30讲 | 容器网络之Flannel:每人一亩三分地
第31讲 | 容器网络之Calico:为高效说出善意的谎言
第三模块 热门技术中的应用:微服务相关协议 (5讲)
第32讲 | RPC协议综述:远在天边,近在眼前
第33讲 | 基于XML的SOAP协议:不要说NBA,请说美国职业篮球联赛
第34讲 | 基于JSON的RESTful接口协议:我不关心过程,请给我结果
第35讲 | 二进制类RPC协议:还是叫NBA吧,总说全称多费劲
第36讲 | 跨语言类RPC协议:交流之前,双方先来个专业术语表
第四模块 网络协议知识串讲 (4讲)
第37讲 | 知识串讲:用双十一的故事串起碎片的网络协议(上)
第38讲 | 知识串讲:用双十一的故事串起碎片的网络协议(中)
第39讲 | 知识串讲:用双十一的故事串起碎片的网络协议(下)
第40讲 | 搭建一个网络实验环境:授人以鱼不如授人以渔
答疑与加餐 (9讲)
协议专栏特别福利 | 答疑解惑第一期
协议专栏特别福利 | 答疑解惑第二期
协议专栏特别福利 | 答疑解惑第三期
协议专栏特别福利 | 答疑解惑第四期
协议专栏特别福利 | 答疑解惑第五期
加餐1 | 测一测:这些网络协议你都掌握了吗?
加餐2 | 创作故事:我是如何创作“趣谈网络协议”专栏的?
加餐3 | “趣谈网络协议”专栏食用指南
第2季回归 | 这次我们来“趣谈Linux操作系统”
结束语 (1讲)
结束语 | 放弃完美主义,执行力就是限时限量认真完成
趣谈网络协议
登录|注册

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

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

ICMP 协议的格式

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

查询报文类型

我们经常在电视剧里听到这样的话:主帅说,来人哪!前方战事如何,快去派人打探,一有情况,立即通报!
这种是主帅发起的,主动查看敌情,对应 ICMP 的查询报文类型。例如,常用的 ping 就是查询报文,是一种主动请求,并且获得主动应答的 ICMP 协议。所以,ping 发的包也是符合 ICMP 协议格式的,只不过它在后面增加了自己的格式。
对 ping 的主动请求,进行网络抓包,称为 ICMP ECHO REQUEST。同理主动请求的回复,称为 ICMP ECHO REPLY。比起原生的 ICMP,这里面多了两个字段,一个是标识符。这个很好理解,你派出去两队侦查兵,一队是侦查战况的,一队是去查找水源的,要有个标识才能区分。另一个是序号,你派出去的侦查兵,都要编个号。如果派出去 10 个,回来 10 个,就说明前方战况不错;如果派出去 10 个,回来 2 个,说明情况可能不妙。
在选项数据中,ping 还会存放发送请求的时间值,来计算往返时间,说明路程的长短。

差错报文类型

当然也有另外一种方式,就是差错报文。
主帅骑马走着走着,突然来了一匹快马,上面的小兵气喘吁吁的:报告主公,不好啦!张将军遭遇埋伏,全军覆没啦!这种是异常情况发起的,来报告发生了不好的事情,对应 ICMP 的差错报文类型
我举几个 ICMP 差错报文的例子:终点不可达为 3,源抑制为 4,超时为 11,重定向为 5。这些都是什么意思呢?我给你具体解释一下。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《趣谈网络协议》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(112)

  • ^_^
    一点个人感觉:老师的比喻有点太用力了,不如简单通俗的讲解原理.
    另外错别字和语句通顺程度是会影响理解的,前几期有时也有这个感觉。
    专业水平老师还是很牛的,学到很多知识。
    2018-06-03
    4
    133
  • 老师我觉得跟多人说你比喻太抽象,我觉得他们底子太差,需要恶补。我觉得你比喻真好!我原来把一本网络基础书看完了,所以一说就懂,你这么说我觉得我六脉打通了
    2018-09-16
    5
    60
  • 好像不发ICMP差错报文的一种情况就是ICMP 的差错报文出错,其它还有目的地址为广播时或者源地址不唯一时也不发差错报文。

    前面评论问udp为什么返回ICMP报文的,ICMP一般认为属于网络层的,和IP同一层,是管理和控制IP的一种协议,而UDP和TCP是传输层,所以UDP出错可以返回ICMP差错报文

    作者回复: 赞

    2018-06-01
    57
  • 秦俊山
    非计算机专业出身的,听得一脸懵逼。
    2018-06-02
    4
    54
  • yaxin
    TTL的作用没有讲清楚,特此记录一下。
    TTL是网络包里的一个值,它告诉路由器包在网络中太长时间是否需要被丢弃。TTL最初的设想是,设置超时时间,超过此范围则被丢弃。每个路由器要将TTL减一,TTL通常表示被丢弃前经过的路由器的个数。当TTL变为0时,该路由器丢弃该包,并发送一个ICMP包给最初的发送者。 tranceroute差错报文会使用
    2018-09-29
    53
  • 手撕油条
    越听越想听,一周三更听不爽

    作者回复: 谢谢

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

    作者回复: 是的

    2018-09-12
    43
  • 番茄尼玛
    同觉得比喻有些用力过猛了,希望老师能在比喻之后再用技术语言解释一下。比如这篇文章中,终点不可达的几个场景,我就没想通网络不可达和主机不可达有什么区别,还有协议不可达和端口不可达有什么区别
    2018-06-15
    3
    27
  • Leon📷
    老师,最好能够抓包截图给大家看,有图有真相,可惜留言不能发图片,不然我就把ping 和traceroute的包细节发出来给大家看看,哈哈
    2018-10-26
    1
    15
  • YXsong
    没基础的小白听的云里雾里呀,好难🤯
    2018-07-22
    13
  • hunterlodge
    差错报文中的端口不可达是指什么端口呢?为什么ICMP协议会有端口概念呢?
    2018-06-16
    11
  • 川云
    我觉得比喻很好,方便理解,聪明的人才愿意打比方
    2018-12-02
    9
  • yaxin
    差错报文就是故意找茬,制造错误让别人打回去。
    2018-09-29
    9
  • 张张张 💭
    看了这么多,我觉得可以先说原理性描述,然后再比喻,这样可以对比着理解,这样应该更好些
    2018-06-27
    9
  • yaxin
    感觉查询报文就像编程中的正常流程,差错报文相当于测试程序。
    2018-06-04
    9
  • sprinty
    老师您好,以我的经验使用tcp/udp协议可以用scoket api编程,但是文中提到ping程序使用了ip协议,那ping程序的实现是不是用到了其他网络编程接口?

    换句话说,每一层的协议都有相应的api可以调用吗?有的话又是什么呢?

    但又感觉我们写的程序一般是应用层用socket就行了…

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

    2018-06-02
    9
  • Trust me ҉҉҉҉҉҉҉❀
    tracerouter发送的包是什么程序给的响应? 是目标主机的traceroute程序?还是ICMP

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

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

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

    2019-04-09
    1
    5
  • 橙子
    听了三遍,看了五遍,我决定先查一下这些缩写啥意思😳
    2018-06-25
    5
  • anthann
    Traceroute发送的是udp包,为什么也能收到icmp响应呢?

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

    2018-06-01
    5
收起评论
99+
返回
顶部