计算机网络学习-- IP 报文和 ICMP 报文

文章目录

IP报文与ICMP报文结构详细对比表

一、IPv4报文结构(核心网络层传输单元)

IPv4报文由「固定首部(20字节)+ 可选首部(0~40字节)+ 数据部分」组成,总长度最大65535字节(首部+数据)。

字段分类 字段名 长度(比特) 取值范围/格式 核心作用 关键说明
固定首部(20字节,必选) 版本(Version) 4 4(IPv4)、6(IPv6) 标识IP协议版本,路由器据此解析报文结构 不同版本报文结构差异极大,不可混用
首部长度(IHL) 4 5~15(单位:32比特) 表示IP首部总长度(= 字段值 × 4字节) 最小值5(20字节固定首部),最大值15(60字节=20+40可选首部)
服务类型(TOS) 8 0~255 定义服务质量(QoS),优先级+延迟/吞吐量/可靠性需求 前3位为优先级(0~7),后5位为TOS位(现代网络多用DSCP扩展)
总长度(Total Length) 16 0~65535 整个IP报文的总长度(首部+数据) 数据部分最大长度=65535-20=65515字节,超过MTU需分片
标识(Identification) 16 0~65535 标识同一原始报文的所有分片 分片重组时,相同标识的分片归为一组
标志(Flags) 3 000~111(仅前2位有效) 控制报文分片: - DF(第0位):1=禁止分片,0=允许分片 - MF(第1位):1=后续有分片,0=最后分片 第2位保留(必须为0)
片偏移(Fragment Offset) 13 0~8191(单位:8字节) 标识分片在原始报文中的相对位置 重组时按片偏移拼接,需满足:片偏移 × 8 + 分片长度 ≤ 原始报文总长度
生存时间(TTL) 8 0~255 限制报文传输跳数(每经过1个路由器减1) TTL=0时路由器丢弃报文,防止网络环路导致报文无限转发
协议(Protocol) 8 1=ICMP、6=TCP、17=UDP等 标识IP数据部分的上层协议类型 核心关联字段:IP与ICMP通过该字段绑定(值=1)
首部校验和(Header Checksum) 16 0~65535 校验IP首部的完整性(仅校验首部,不校验数据) 路由器转发时需重新计算(因TTL变化),接收方校验失败则丢弃报文
源IP地址(Source IP) 32 IPv4地址(点分十进制) 报文发送方的IP地址(如192.168.1.100) 不可伪造(网络安全场景需验证)
目的IP地址(Dest IP) 32 IPv4地址(点分十进制) 报文接收方的IP地址(如202.108.22.5) 路由器路由转发的核心依据
可选首部(0~40字节,可选) 选项(Options) 可变(0~320比特) 路由记录、时间戳、源路由等 用于网络调试、特殊路由控制等场景 非必需,多数场景不使用(会增加报文长度和转发延迟)
填充(Padding) 可变(0~31比特) 全0 确保整个IP首部长度为32比特(4字节)的整数倍 因选项长度可变,需填充补位
数据部分(可变) 数据(Data) 可变(0~65515字节) 上层协议数据 承载上层协议的完整数据单元 可封装:ICMP报文(协议字段=1)、TCP段(=6)、UDP数据报(=17)、应用层数据

二、ICMP报文结构(IP辅助控制协议)

ICMP报文封装在IPv4数据部分(IP协议字段=1),由「固定首部(8字节)+ 可变数据部分」组成,总长度随场景变化。

字段分类 字段名 长度(比特) 取值范围/格式 核心作用 关键说明
固定首部(8字节,必选) 类型(Type) 8 0=回显应答、8=回显请求、3=目标不可达、11=超时等 标识ICMP报文的核心功能(差错报告/查询服务) 决定后续"代码"字段的取值范围
代码(Code) 8 随Type变化(0~15) 细化Type的具体场景(补充说明功能细节) 例:Type=3(目标不可达)时,Code=0=网络不可达、Code=1=主机不可达
校验和(Checksum) 16 0~65535 校验整个ICMP报文(首部+数据)的完整性 计算范围包含ICMP所有字段,接收方校验失败则丢弃报文
标识符(Identifier) 16 0~65535 匹配ICMP查询请求与应答(关联请求端和响应端) 例:ping命令中,发送方随机生成,接收方原样返回,用于识别往返包
序列号(Sequence Number) 16 0~65535 按顺序标识ICMP查询报文,辅助请求与应答的对应 例:ping中用于统计发送/接收包数量、计算往返时延(RTT)
数据部分(可变,随类型变化) 数据(Data) 可变 场景化格式 承载ICMP的核心业务数据(差错定位/查询信息) 分两类场景,格式不同:
1. 差错报告报文(Type=3/11/12等): - 内容=出错IP报文的首部(20字节) + 出错IP数据部分前8字节
- 作用:让发送方通过原IP首部定位目标,通过前8字节识别上层协议(TCP/UDP端口)
2. 查询服务报文(Type=8/0/13/14等): - 内容=发送方自定义数据(如ping的时间戳、时间戳请求的时间信息)
- 作用:用于传递查询参数和响应结果(如ping通过时间戳计算RTT)

三、IPv6报文结构补充(简要对比)

IPv6报文结构与IPv4差异较大,核心特点是「固定首部(40字节)+ 扩展首部 + 数据部分」,以下仅列出核心字段(与ICMPv6关联):

字段名 长度(比特) 核心作用
版本(Version) 4 6(固定为IPv6)
流量类别(Traffic Class) 8 类似IPv4的TOS,用于QoS控制
流标签(Flow Label) 20 标识同一数据流,保障实时性(如视频流)
有效载荷长度(Payload Length) 16 扩展首部+数据部分的总长度
下一个头部(Next Header) 8 标识后续扩展首部或上层协议(ICMPv6=58)
跳数限制(Hop Limit) 8 类似IPv4的TTL,每经过路由器减1
源IPv6地址 128 发送方128位IPv6地址(如2001:0db8:85a3:0000:0000:8a2e:0370:7334)
目的IPv6地址 128 接收方128位IPv6地址

四、核心结构差异总结

对比维度 IPv4报文结构 ICMP报文结构
结构组成 固定首部(20字节)+ 可选首部 + 数据 固定首部(8字节)+ 可变数据
长度特性 总长度最大65535字节,首部长度可变(20~60字节) 长度随场景变化(差错报文≈48字节,查询报文可自定义)
核心字段 源/目的IP、TTL、协议字段、分片相关字段 类型、代码、标识符、序列号
数据部分用途 承载上层协议数据(TCP/UDP/ICMP等) 差错定位(原IP首部+前8字节)或查询数据(时间戳等)
封装关系 独立传输,可承载ICMP 必须封装在IP数据部分(IPv4协议字段=1,IPv6=58)
协议定位 网络层主协议(数据传输) 网络层辅助协议(差错/控制)

IP报文与ICMP报文:结构、内容及核心关系

在计算机网络中,IP报文是网络层的核心数据传输单元 (负责跨网络寻址和路由),ICMP报文是IP的辅助控制协议(负责差错报告和网络控制),二者是"承载与被承载""主协议与辅助协议"的关系。以下从「报文结构」「核心内容」「关联逻辑」三方面详细解析:

一、IP报文:网络层的"数据运输车"

IP(Internet Protocol)报文是跨网络传输数据的基本单元,核心功能是封装上层数据(TCP/UDP/ICMP等),通过IP地址寻址,由路由器转发。分为「IPv4报文」和「IPv6报文」,以下以最常用的IPv4为例解析。

1. IPv4报文结构(首部+数据)

IPv4报文由「首部(Header)」和「数据(Data)」两部分组成,首部长度可变(20~60字节),数据部分最长65515字节。

核心首部字段(20字节固定部分)
字段名 长度(比特) 核心作用
版本(Version) 4 标识IP版本(IPv4=4,IPv6=6),路由器据此解析报文结构
首部长度(IHL) 4 标识IP首部长度(单位:32比特=4字节),最小值5(20字节),最大值15(60字节)
服务类型(TOS) 8 定义服务质量(QoS),如优先级、延迟要求(现代网络多使用DSCP字段扩展)
总长度(Total Length) 16 整个IP报文的总长度(首部+数据),最大值65535字节(2^16-1)
标识(Identification) 16 标识分片后的报文(同一原始报文的分片具有相同标识,便于接收方重组)
标志(Flags) 3 控制分片(DF=1表示禁止分片,MF=1表示后续还有分片)
片偏移(Fragment Offset) 13 分片在原始报文中的位置(单位:8字节),接收方据此重组分片
生存时间(TTL) 8 限制报文传输跳数(每经过一个路由器减1,TTL=0时丢弃报文),防止环路
协议(Protocol) 8 标识IP数据部分的上层协议类型(关键字段!如ICMP=1、TCP=6、UDP=17)
首部校验和(Header Checksum) 16 仅校验IP首部(不校验数据),路由器转发时需重新计算(因TTL变化)
源IP地址(Source IP) 32 发送方的IP地址(如192.168.1.100)
目的IP地址(Destination IP) 32 接收方的IP地址(如202.108.22.5)
选项(Options) 可变(0~40字节) 可选字段(如记录路由、时间戳),仅在特殊场景使用(如网络调试)
数据部分(Data)
  • 承载上层协议的数据,可能是:
    • 传输层协议数据(TCP段、UDP数据报);
    • 网络层辅助协议数据(ICMP报文、IGMP报文);
    • 应用层数据(如HTTP请求,需经TCP/UDP封装后再嵌入)。

二、ICMP报文:IP的"故障诊断与控制助手"

ICMP(Internet Control Message Protocol)是网络层的辅助协议,核心功能是「报告IP报文传输中的差错」和「提供网络控制/查询服务」,本身不传输用户数据,仅用于网络层的"通信协调"。

1. ICMP报文结构(首部+数据)

ICMP报文封装在IP报文的数据部分(IP协议字段=1),分为「首部(8字节固定)」和「数据部分(可变)」。

核心首部字段(8字节固定)
字段名 长度(比特) 核心作用
类型(Type) 8 标识ICMP报文的类型(差错报告/查询服务),常见值:0=回显应答、8=回显请求、3=目标不可达、11=超时
代码(Code) 8 细化类型的具体场景(如Type=3时,Code=0=网络不可达、Code=1=主机不可达)
校验和(Checksum) 16 校验整个ICMP报文(首部+数据),确保报文完整性
标识符(Identifier) 16 用于匹配查询请求与应答(如ping命令中,发送方随机生成,接收方原样返回)
序列号(Sequence Number) 16 同上,用于顺序匹配(如ping的往返包排序)
数据部分(Data)
  • 若为「差错报告报文」(如目标不可达、超时):包含出错IP报文的首部+前8字节数据(路由器/接收方通过该数据定位出错的上层协议(TCP/UDP端口)和原始报文);
  • 若为「查询服务报文」(如ping请求/应答):包含发送方自定义的数据(如ping的时间戳,用于计算往返时延RTT)。

2. ICMP报文的常见类型

类型(Type) 代码(Code) 报文名称 核心用途
0 0 回显应答(Echo Reply) 响应ping请求(ping的"回复包")
8 0 回显请求(Echo Request) 发起ping测试(ping的"请求包"),用于检测主机连通性
3 0~15 目标不可达(Destination Unreachable) 报告目标主机/端口不可达(如路由不可达、端口未开放)
11 0~1 超时(Time Exceeded) 报告TTL过期(如环路导致)或分片重组超时
12 0~1 参数问题(Parameter Problem) 报告IP首部字段错误(如首部长度无效)
13 0 时间戳请求(Timestamp Request) 查询目标主机的时间戳(用于网络时延校准)
14 0 时间戳应答(Timestamp Reply) 响应时间戳请求

三、IP报文与ICMP报文的核心关系

1. 承载关系:ICMP报文是IP报文的"乘客"

ICMP报文不能独立传输,必须封装在IP报文的数据部分,由IP协议负责寻址和转发------即"ICMP报文 = IP报文的数据部分",IP报文是ICMP的"传输载体"。

封装流程示例(ping命令):
  1. 发送方执行ping 202.108.22.5,生成ICMP回显请求报文(Type=8,Code=0);
  2. 将该ICMP报文作为"数据",封装到IPv4报文的数据部分,设置IP协议字段=1(标识数据是ICMP);
  3. 填写IP首部的源IP(如192.168.1.100)、目的IP(202.108.22.5),TTL=64等字段;
  4. IP报文通过路由器路由转发,最终到达目标主机;
  5. 目标主机解析IP报文,发现协议字段=1,提取数据部分的ICMP报文,生成ICMP回显应答报文(Type=0);
  6. 应答报文同样封装在IP报文中,按原路径返回发送方,完成ping测试。

2. 功能互补:IP负责"传输",ICMP负责"反馈"

  • IP协议的局限性:无连接、不可靠,仅负责转发报文,不提供差错反馈(如报文丢失、超时后,IP本身无法通知发送方);
  • ICMP的补充作用:当IP报文传输失败(如路由不可达、TTL过期),路由器或接收方会生成ICMP差错报文,封装在IP报文中回传给发送方,告知失败原因。
典型场景:目标不可达
  1. 发送方发送IP报文(目的IP=192.168.2.100,不存在该主机);
  2. 路由器查找路由表,发现无到达192.168.2.0/24的路由;
  3. 路由器生成ICMP目标不可达报文(Type=3,Code=0=网络不可达),数据部分包含原IP报文的首部+前8字节;
  4. 将该ICMP报文封装在IP报文中,源IP=路由器接口IP,目的IP=原发送方IP,回传给发送方;
  5. 发送方收到后,解析ICMP报文,得知"目标网络不可达",从而排查故障。

3. 协议关联:通过IP首部的"协议字段"绑定

IP报文首部的「协议字段」是两者的关键关联:

  • 当IP协议字段=1时,数据部分一定是ICMP报文;
  • 接收方(路由器/主机)解析IP报文时,通过协议字段判断是否需要交给ICMP协议处理。

4. 核心区别总结

对比维度 IP报文 ICMP报文
协议定位 网络层主协议(数据传输核心) 网络层辅助协议(差错/控制)
核心功能 跨网络寻址、路由转发、封装上层数据 差错报告(如不可达、超时)、网络查询(如ping)
传输方式 可独立传输(承载TCP/UDP/ICMP等) 不可独立传输,必须封装在IP报文内
封装关系 是ICMP的"载体"(ICMP是IP的数据部分) 是IP的"乘客"(封装在IP数据部分)
协议字段标识 无(自身是承载协议) IP协议字段=1
数据部分内容 上层协议数据(TCP/UDP/ICMP等) 差错场景:原IP首部+前8字节;查询场景:自定义数据(如时间戳)

四、总结

  1. IP报文是"运输车":负责将各类上层数据(包括ICMP)从源端送到目的端,核心是"寻址和转发";
  2. ICMP报文是"故障诊断员":依赖IP传输,专门解决IP的"无反馈"问题,告知发送方报文传输的成功/失败原因;
  3. 关键关联:ICMP封装于IP,IP通过协议字段=1识别ICMP,二者协同完成网络层的"数据传输+故障反馈",是网络通信不可或缺的组合(如ping、traceroute等网络工具均基于ICMP实现)。
相关推荐
why1513 小时前
面经整理——计算机网络
计算机网络
甄心爱学习3 小时前
计算机网络15
计算机网络
车载测试工程师3 小时前
CAPL学习-SOME/IP交互层-客户端API函数
网络·学习·tcp/ip·capl·canoe
koping_wu3 小时前
【计算机网络】OSI七层模型、TCP协议、HTTP协议
tcp/ip·计算机网络·http
chase。3 小时前
【学习笔记】线性复杂度微分逆运动学:增广拉格朗日视角深度解析
人工智能·笔记·学习
YJlio4 小时前
Active Directory 工具学习笔记(10.5):AdInsight 数据捕获与显示选项——把噪声压下去,把关键抬上来
人工智能·笔记·学习
zxb@hny4 小时前
Hazel游戏引擎学习
学习·游戏引擎
feathered-feathered4 小时前
网络套接字——Socket网络编程(TCP编程详解)
java·网络·后端·网络协议·tcp/ip
测试人社区—66795 小时前
破茧成蝶:DevOps流水线测试环节的效能跃迁之路
运维·人工智能·学习·flutter·ui·自动化·devops