本篇结构:
- ICMP
- IGMP
- 附
- 反思
接着上一篇,本章接着分享IP协议的两个配套协议–ICMP和IGMP。
一、ICMP
1.1、什么是ICMP
ICMP的全称是Internet Control Message Protocol(网际控制信息协议)。
ICMP工作在TCP/IP体系中的网络层,是IP协议的一个补充,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。ICMP报文通常被IP层或更高层协议(TCP或UDP)使用。ICMP报文是在IP数据报内部传输的。IP协议是不可靠协议,不能保证 IP数据报能够成功的到达目的主机,无法进行差错控制,当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。
1.2、ICMP报文格式
- 类型:一个8位类型字段,表示 ICMP 数据包类型;
- 代码:一个8位代码域,表示指定类型中的一个功能,如果一个类型中只有一种功能,代码域置为 0;
- 检验和:数据包中 ICMP 部分上的一个16位检验和;
- ICMP数据部分:包含了所有接受到的数据报的IP报头,还包含IP数据报中前8个字节的数据。
格式解释:
ICMP报文的前4个字节是统一的格式,共有三个字段:即类型,代码和检验和。
8位类型和8位代码字段一起决定了ICMP报文的类型。
- 类型8,代码0:表示回显请求(ping请求);
- 类型0,代码0:表示回显应答(ping应答);
- 类型11,代码0:超时…
16位的检验和字段:包括数据在内的整个ICMP数据包的检验和,其计算方法和IP头部检验和的计算方法一样的。
ICMP报文具体分ICMP差错报告报文和ICMP询问报文(对ICMP差错报文有时需要做特殊处理,因此要对其进行区分。如:对ICMP差错报文进行响应时,永远不会生成另一份ICMP差错报文,否则会出现死循环)。
1.3、ICMP种类
ICMP报文具体分ICMP差错报告报文和ICMP询问报文(对ICMP差错报文有时需要做特殊处理,因此要对其进行区分。如:对ICMP差错报文进行响应时,永远不会生成另一份ICMP差错报文,否则会出现死循环)。
下面主要学习几种常用的ICMP报文类型。
1.ICMP差错报文
- 终点不可达(Type=3)
IP路由器无法将IP数据报发送给目的地址时,会给发送端主机返回一个终点不可达ICMP消息。例如我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回Type=3、Code=3的ICMP报文,它要告诉我们:“嘿,别连接了,我不在家的!”,常见的不可到达类型还有网络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)等。
- 时间超过
超时报文的代码域有两种取值:Code=0表示传输超时,Code=1表示重组分段超