ICMP介绍以及traceroute和ping的实现原理

ICMP介绍

ICMP(Internet Control Message Protocol)用于主机或者路由器报告差错情况和提供有关异常的情况报告,和IP协议同时处于网络层,但是ICMP会使用IP,最终由IP来传输其信息(everything is over ip)

常规ICMP报文格式截图:

主要分为两大类:差错报告报文和询问报文。

ICMP报文类型 类型对应的值 ICMP报文的类型
差错报告报文 3 终点不可达:路由器或者主机发现信息不可达时
11 时间超时(TTL):当路由器收到TTL为1,然后-1后是0,则丢弃数据的同时向源主机发送
12 参数问题
5 改变路由:默认路由器发现有跟好的路由线路
询问报文 8或者0 回送请求或回答
13或者14 时间戳请求或回答

ICMP的差错报告报文中,会把收到的需要进行差错报告的IP的数据提取出来作为ICMP报文的数据部分。

可以看到icmp内部包含了一个完整的IP数据包。

典型的ICMP的应用是trace route 和ping应用,这两个应用直接通过ICMP从而跳过了传输层协议(TCP or UDP)。

ICMP看上去像高层协议,实际上不是,是IP层的协议。

trace route应用

有地方介绍是源主机向目的主机发送不可达的udp报文,然后路由器通过TTL变为0后返回给源主机ICMP报文,但是实际抓包发现trace route给目的主机发送的也是icmp报文。

源主机向目标主机发送ICMP报文:

第一次发送时IP的TTL设置为1,第一个路由器收到后,把TTL减1,丢弃该数据,并且向源主机发送一个超时的ICMP报文(code为11),这样源主机就得到了第二个路由器的IP地址。

第二次发送时IP的TTL设置为2。得到第二个路由器的IP地址。

。。。

一直发送后直到如果收到一个常规的ICMP回答(code为0),则认为找到了最后一个路由器。(如果某次ICMP请求在固定时间内没有返回,则显示超时,继续下一条的路由查找【上图中标红的case】)。

最终的IMCP回答报文,标志着traceroute结束

应答报文截图。

ping应用

ping使用icmp的回送请求和回送应答报文。

抓包

可以看到分别发送了4次request,同时得到了4次reply,和cmd console中展示的效果一致。

回送请求报文示例,type为8。

回送应答示例,type为0,同时返回了耗时15ms,和cmd console里面展示的温和。

posted @ 2021-03-17 23:30  ibrake  阅读(1299)  评论(0编辑  收藏  举报