IP数据包格式
版本号:占4位,表示IP协议的版本,目前广泛使用的是IPv4,其版本号为4。
首部长度:占4位,表示IP首部的长度,单位为32位字节。首部长度最小为20字节,最大为60字节。
服务类型(TOS):占8位,用于获取更好的服务,如延迟、吞吐量、可靠性和费用等。
总长度:占16位,表示IP数据报的总长度,包括首部和数据部分,最大长度为65535字节。
标识:占16位,用于标识数据报,当数据报分片时,所有分片具有相同的标识。
标志:占3位,其中MF(More Fragment)位表示是否有后续分片,DF(Don't Fragment)位表示是否允许分片。
片偏移:占13位,表示分片在原始数据报中的位置。
生存时间(TTL):占8位,表示数据报在网络中的寿命,每经过一个路由器,TTL减1,当TTL为0时,数据报被丢弃。
协议:占8位,表示数据报携带的数据使用的协议类型,如TCP(6)或UDP(17)。
首部校验和:占16位,用于校验IP首部的错误,不包括数据部分。
源地址:占32位,表示数据报的发送方地址。
目的地址:占32位,表示数据报的目的地地址。
ICMP协议的主要功能
错误报告:当数据包无法到达目的地时,ICMP会通知发送方。例如,如果目标主机不可达或超时,ICMP会发送一条错误消息来报告这个问题。
网络诊断:ICMP还用于网络诊断,提供有关网络状态的信息。例如,通过发送ICMP回显请求(Echo Request)消息并等待回显应答(Echo Reply)消息,可以确定目标主机的状态。
控制信息传递:ICMP用于传递网络诊断信息和错误报告,确保数据能够顺利传输
ICMP协议的应用场景
Ping:用于测试目标主机是否可达,通过发送ICMP回显请求消息并等待回显应答消息来实现。
Traceroute:用于跟踪数据包从源到目标的路径,并显示沿途经过的每个路由器,通过发送TTL(生存时间)递增的ICMP回显请求消息来实现。
网络质量分析(NQA):用于实时监视网络服务质量,通过不同类型的ICMP报文,实现网络运行状况的准确测试。
ICMP封装步骤
-
构建ICMP报文:
-
根据需要选择合适的ICMP类型和代码。
-
填充必要的数据部分。
-
计算校验和并填入ICMP报文中。
-
-
构建IP数据包:
-
版本和首部长度:设置为IPv4的标准值(版本4,首部长度20字节)。
-
服务类型(TOS):通常设置为0。
-
总长度:包括IP首部和ICMP报文的总长度。
-
标识、标志、片偏移:通常设置为0(除非需要进行分片)。
-
生存时间(TTL):设置一个合适的值,通常为64或128。
-
协议:设置为1,表示携带的是ICMP报文。
-
首部校验和:计算IP首部的校验和。
-
源地址和目的地址:填入发送方和接收方的IP地址。
-
-
封装ICMP报文:
-
将构建好的ICMP报文作为IP数据包的有效载荷。
-
IP数据包的首部信息指向ICMP报文。
-
-
发送IP数据包:
-
通过网络接口发送封装好的IP数据包。
-
数据包经过路由器传输,最终到达目的主机。
-