计算机网络基础——网际控制报文协议ICMP
ICMP
网际控制报文协议(Internet Control Message Protocol, ICMP
),工作在网络层,是IP层协议
,为了更有效地转发IP数据报和提高交付的机会,ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。
ICMP报文
ICMP差错报告报文
报文类型
类型 | 类型值 | 作用 |
---|---|---|
终点不可达 | 3 | 当路由器或主机不能交付数据报时,向源点发送终点不可达报文 |
源点抑制 | 4 | 当路由器或主机由于网络拥塞而丢弃数据报时,向源点发送源点抑制的报文,告知源点放缓发送速率 |
时间超过 | 11 | 当路由器收到生存时间(TTL)为0的数据报时,丢弃该数据报并向源点发送时间超过报文;当终点在预定时间内不能收到一个数据报的全部数据报片时,丢弃所有收到的数据报片,并向源点发送时间超过报文 |
参数问题 | 12 | 当路由器或目的主机收到的数据报的首部中欧的字段的值不正确时,丢弃该数据报并向源点发送参数问题报文 |
改变路由 | 5 | 路由器把改变路由报文发送给主机,让主机直到下次应将数据报发送给另外的路由器 |
不发送ICMP差错报文的情况
- 对ICMP差错报文不再发送ICMP差错报告报文
- 对第一个分片的数据报片的后续所有数据报分片,都不发送ICMP差错报告报文
- 对具有多播地址的数据报,都不发送ICMP差错报告报文
- 对具有特殊地址的数据报,不发送ICMP差错报告报文
ICMP询问报文
类型 | 类型值 | 工作原理 | 作用 |
---|---|---|---|
回送请求或回答报文 | 8或0 | ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送ICMP发送回答报文 | 测试目的站是否可达并了解其有关状态 |
时间戳请求或回答报文 | 13或14 | ICMP时间戳请求报文请求某台主机或路由器回答当前的时间和日期,ICMP时间戳回答报文中有一个32位的字,其值表示从1900年起当前时刻一共有多少秒 | 用于时间同步和时间测量 |
应用
PING
分组网间探测(Packet InterNet Groper, PING
),用来测试两台主机之间的连通性,基于ICMP回送请求和回答报文,PING是应用层直接使用网络层ICMP而没有通过传输层TCP或UDP的一个例子。
PING向给定的IP地址发送ICMP回送请求报文,如果这个IP地址对应的主机工作正常,则会发回ICMP回送回答报文,ICMP回送请求和回答报文中都有时间戳,可以得到往返时间,同志还可以得到已发送、已收到、已丢失的分组数等。
Windows PING示例
ping www.baidu.com
Linux PING示例
ping www.baidu.com
Traceroute
Traceroute用于跟踪一个分组从源点到终点的路径,在Unix中命令为traceroute
,在Windows中命令为tracert
,基于ICMP时间超过报文和UDP
Traceroute从源主机向目的主机发送一连串的IP数据报,数据报中封装的是无法交付的UDP用户数据报,第一个数据报设置TTL为1,到达第一个路由器时,路由器收到该报文,将其TTL修改为0,此时路由器会将其丢弃并向源主机发送ICMP时间超过报文;源主机收到后在发送一个TTL为2的数据报,该数据报到达第二个路由器后TTL为0,第二个路由器丢弃该数据报并向源主机发送ICMP时间超过报文,如此往复循环,直到达到目的主机,此时目的主机不转发数据报也不将TTL减为1,但因为IP数据报中封装的是无法交付的传输层UDP数据报,因此目的主机要向源主机发送ICMP终点不可达报文差错报文
,如此一来,源主机就得到从源主机到目的主机的路由器路径
Windows tracert示例
tracert www.baidu.com
Linux traceroute示例
traceroute www.baidu.com
参考
谢希仁. 计算机网络(第7版). 电子工业出版社, 2017.
王道考研计算机网络
最后
- 由于博主水平有限,不免有疏漏之处,欢迎读者随时批评指正,以免造成不必要的误解!