自学内容网 自学内容网

IP数据包格式、ICMP封装步骤

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封装步骤

  1. 构建ICMP报文:

    • 根据需要选择合适的ICMP类型和代码。

    • 填充必要的数据部分。

    • 计算校验和并填入ICMP报文中。

  2. 构建IP数据包:

    • 版本和首部长度:设置为IPv4的标准值(版本4,首部长度20字节)。

    • 服务类型(TOS):通常设置为0。

    • 总长度:包括IP首部和ICMP报文的总长度。

    • 标识、标志、片偏移:通常设置为0(除非需要进行分片)。

    • 生存时间(TTL):设置一个合适的值,通常为64或128。

    • 协议:设置为1,表示携带的是ICMP报文。

    • 首部校验和:计算IP首部的校验和。

    • 源地址和目的地址:填入发送方和接收方的IP地址。

  3. 封装ICMP报文:

    • 将构建好的ICMP报文作为IP数据包的有效载荷。

    • IP数据包的首部信息指向ICMP报文。

  4. 发送IP数据包:

    • 通过网络接口发送封装好的IP数据包。

    • 数据包经过路由器传输,最终到达目的主机。


原文地址:https://blog.csdn.net/CYL5913/article/details/142856961

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!