Ping的过程中都发生了什么:ICMP协议与traceroute

0x00.当我们ping了一下,发生了什么?

下图为从192.168.1.2发送一个type=8,code=0的查询报文,下面是它的发送和接受response过程


ping发包

0x01.ICMP(Internet Control Message Protocol)

ICMP协议的类型分为两大类,查询报文和差错报文。如下表:



icmp为ip上一层协议,但因为承担了一部分ip协议功能,所以有时也被和ip层协议放在一层
下图为差错报文响应(上层1、2,发送ip数据报,返回差错icmp报文)以及查询报文(下层1、2,发送icmp查询,返回icmp响应的报文)也即ping的过程,以及ip头和icmp头的各个字段,可详见RFC 792(ICMP)和RFC 791(IP)

差错响应、查询响应、报文头拆解

具体地,ip协议头和icmp协议头的具体构成如下:


报文头结构

0x02.traceroute

traceroute的原理其实是利用了icmp的差错报文响应来实现对路由进行探测的
我们通过执行 traceroute 192.168.1.1,来分析一下他的原理,它的原理就是利用 IP 包的 TTL 从 1 开始按照顺序递增的同时发送 UDP 包,强制接收 ICMP 超时消息的方法。
首先 traceroute 会将 IP 包的 TTL 设置 为 1,然后发送 UDP 包,他会填入一个端口号作为 UDP 目标端口号(默认是:33434-33534);在这之后,TTL=2 3 4 ……
下图为展示traceroute原理:

traceroute原理

实验:
从192.168.1.1发送一个ttl=1的UDP报文,port随机33435 -- 48596
发包

返回一个差错响应为3的ICMP报文,type=3,code=3
收包

对照一下:
type=3,code=3

端口不可达
但如果是路由器禁用icmp或者主机不存在,那么这个差错报文是不会返回的
所以证明udp发送到了主机,然后被拒掉了,返回了type=3,code=3的icmp报文

值得注意的是:
traceroute在linux中发包使用的是udp(默认,可改),在windows中发包使用的则是icmp协议(默认)

参考文献:
https://zhuanlan.zhihu.com/p/369623317
https://blog.csdn.net/LearnLHC/article/details/115247444

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、网际控制报文协议ICMP 主要功能:确认IP包是否成功到达目的地址,报告发送过程中IP包被废弃的原因和改善网络...
    Sbabysbreath阅读 3,339评论 0 0
  • 本文作为学习笔记,文章内容来自“极客时间”专栏《趣谈网络协议》,如有侵权,请告知,必即时删除。 ICMP协议的格式...
    JBryan阅读 4,629评论 0 1
  • 参考网站:https://www.jianshu.com/p/4bd8758f9fbd[https://www.j...
    王王王王王景阅读 10,813评论 0 3
  • 引子: 提到网络协议, 大家最先想到的肯定是TCP, IP, HTTP等这些"家喻户晓"的协议, 但是还有很多"默...
    CoderMonkey阅读 6,680评论 0 4
  • 前言 1 ICMP协议 网际控制报文协议ICMP(Internet Control Message Protoco...
    HRADPX阅读 6,959评论 2 14