30、IP数据包结构

article/2025/10/8 14:14:48

本节来学习IP数据包的结构,前面我们一直在说数据包,IP数据包是网络层的PDU。PDU的概念我们在本专栏第2节的内容中谈到过,忘记了就赶快去复习。数据包也被称为“IP数据报”或者“IP分组”,这三个概念是通用的,到任何一本计算机网络教材中都适用的。


IP数据包的组成

IP数据包是由数据发送方的传输层交付下来的信息加上网络层的IP首部封装而成的,所以从整体来看,IP数据包有两个组成部分:IP首部+数据部分

数据部分就是网络层的上层交付下来的信息,具体是什么格式我们现在不用管。本节主要重点学习的是,IP首部的格式。


首部格式

仍然按照惯例,先给出IP首部的格式图,然后我们逐一地解释各个字段。

上图的绿色部分即为IP首部的格式,粉色部分是数据部分。

先来看图的最上边,写着“0 4 8 16 19 24 31”的这一行数字,这代表的是二进制位数,也就表示了每个字段的长度是多少,比如第二行第一个,标识字段,长度是0~16,也就是16个位的长度,也就是两个字节的长度(1字节=8位),再比如第四行的,源IP地址字段,长度是从0到第31位,一共有32个位的长度,也就是四个字节的长度。

所以,整个IP首部中,从版本号字段到目的IP地址字段一共是有20个字节的长度,这是IP首部固定首部的长度,这个长度永远是20字节。然后我们可以看到整个IP首部的最后一行是“选项字段和填充”,选项字段标着“长度可变”,这就意味着这个字段的长度不是固定的,就不属于固定首部的部分。


字段含义

版本号

指明了此IP数据包使用的IP协议是什么版本的,如果此字段值为4,就表示这是一个IPv4的数据包,如果此字段值为6,则表示这是一个IPv6的数据包。

首部长度

指明了此IP数据包的首部的长度是多少字节。首部长度字段的值的单位是4个字节,也就是说如果此字段的值为5,则表示整个IP数据包的首部长度是5×(4个字节)=20字节。事实上,20字节是最小首部长度,原因是:可以看到,如果一个IP数据包不包含可变长度的部分,只有固定首部的话,那么首部长度就是20字节。

那么,首部长度有没有最大值呢?有,首部长度最大60字节,也就是不仅包含了20字节的固定首部,还有40字节的可变首部。因为首部长度这个字段在整个IP首部中占了4位,4位二进制能表示的最大数就是15,15×(4个字节)=60字节,这就是最大首部长度的来源。

服务类型

或者称为“区分服务”字段,这个字段只有在使用一定QoS策略的时候才起作用,而我们现在涉及不到这么复杂的知识,QoS以后会在路由交换专栏中去介绍。

总长度

总长度的值=首部长度+数据部分的长度,单位是字节。而总长度这个字段在整个IP数据包中的长度是16位,16位二进制最大可表示的数就是65535,所以这就意味着总长度字段的值最大是65535,也就表示整个IP数据包最大也就到65535个字节(当然这么大的包很少见)。

标识、标志位、片偏移

这三个字段是有联系的,所以我们放在一起学习。

要理解这三个字段的含义,必须要和数据链路层学过的MTU(最大传输单元)的概念联系起来,以太网规定MTU值为1500字节,那么当IP数据包的长度大于1500字节时,向下交付到数据链路层的时候,在数据链路层是通不过的,所以在这时候就使用了把“IP数据包”分片的技术。形象的说,就是由于数据包太长,超过了数据链路层规定的最大传输值,所以就要把数据包“切割”成几个合适长度的小包,使之能通过数据链路层

要注意的是,“切割”数据包的时候,只“切割”数据部分,不“切割”首部,然后再把每个部分分别加上首部。比如说,“切割”一个很长的数据包,我们先去除其首部,然后把剩下的数据部分切割成三片,在这三片前面分别加上合适的首部,使这三片各自单独成包。

在传输比较长的数据包的时候,可以这样“切割”成几片,但是到达数据接收方后,还要把这几片再重新组合起来,这就需要用到“标识、标志位、片偏移”这三个字段。

标识:此字段的作用是可以识别出哪些被“切割”的段能组装成一个数据包。举例:假设一个数据包的编号是101,那么由于这个数据包过长,需要“切割”成三片,那么切割后的这三片的各自的首部中的标识字段的值就全都是101,以表示这三片本来应该是在一起的,但后来被切割开了,接收端一看这三片数据包的标识都是一样的,就知道要把它们重新组合在一起。

标志位:此字段的长度是3位,每一位都有不同的作用,其中:第一位没意义,保留不用第二位是DF位,全称“Don't Fragment”,意为“不能分片”,如果这个DF位的值为1,则表示此数据包是不允许分片的,所以这也就意味着如果一个数据包被“切割”了,那么切割成的所有“片”的DF位肯定都是0;第三位是MF位,全称“More Fragment”,意为“更多分片”,如果某个“分片”的MF位的值为1,则表示此分片不是最后一片,在后面还有更多的片,如果MF的值为0了,则表示这是最后一片,后面没有分片了。

片偏移:这个字段是用来确定出几个分片该按照什么顺序组合成原来的数据包的,片偏移的值指出了某个分片在原来数据包的相对位置,以8个字节为偏移单位。假设某个数据包被分了3片,那么每一片在原来数据包中的开始位置除以8,即为片偏移值。

谢希仁教授的教材上展示了一个非常经典的例子:

设一个IP数据包,编号为12345,总长度为3820字节(其中首部长20字节,数据部分3800字节),数据链路层的MTU值为1420字节。于是此数据包被分为3片:

第一片:数据部分长1400字节,加上20字节的首部,总长度为1420字节。标识应为12345,DF位应为0,MF位应为1,片偏移值应为0(因为第一片在原来数据包中的开始位置是第0字节,结束位置是第1399字节,我们用开始位置除以偏移单位,也就是0除以8,得到0)。

第二片:数据部分长1400字节,加上20字节的首部,总长度为1420字节。标识应为12345,DF位应为0,MF位应为1,片偏移值应为175(第二片的开始位置1400除以8,得175)。

第三片:数据部分长1000字节,加上20字节的首部,总长度为1020字节。标识应为12345,DF位应为0,MF位应为0,片偏移值应为350(第三片的开始位置2800除以8,得350)。

生存时间(TTL)

此字段是为了保证在网络出现环路的情况,不会让数据包在环路的几个路由器之间无限制的兜圈子而设定的TTL值指出了一个数据包的“寿命”,每经过一个路由器,路由器都会把数据包的TTL值减1,当“寿命”减小到0的时候,此数据包将被丢弃

例如设定一个TTL值为5的数据包,发送到网络中,而这时网络中的路由器R1、R2、R3之间出现了环路,此数据包酒会在这三个路由器之间兜圈子,R1收到后,TTL值减1发送给R2,R2接过来又把TTL值减1发给R3,如此循环,直到此数据包的TTL值为0,最后收到的那个路由器就丢弃此数据包。

可见,如果不设置TTL这个字段,那么一旦网络出现环路,将会有大量数据包无限制的被循环转发,极大消耗网络带宽。

协议

此字段指明了IP协议的上层使用的是什么协议,一般就是传输层的TCP协议或者UDP协议,当然也有可能是不属于传输层但也位于IP协议之上的ICMP和IGMP协议等。

协议字段的值是上层各种协议的协议号,有几个知名的协议号是需要了解的:

ICMP协议号为1;IGMP协议号是2;TCP协议号是6,UDP协议号是17;OSPF协议号为89

比如某个IP数据包的数据部分是传输层的TCP进程交付下来的,那么此数据包首部的协议字段的值即为6,如果是上层UDP协议交付下来的,那么协议字段的值即为17,如果数据部分承载的是ICMP的数据,那么协议字段的值即为1。

首部检验和

此字段的功能是对IP数据包的首部进行校验,数据包每经过一个路由器,路由器都会校验一遍首部检验和,如果检验出差错就把数据包丢弃掉(但一般情况下不会出差错)。具体是怎么检验的,我们不需要去关心,考试也涉及不到。

选项字段和填充

这两个字段的长度不是固定的,属于IP首部中的可变首部。选项字段具有支持测试、安全等扩展的功能。填充字段是为了保证IP首部一定是4个字节的整数倍而设置的,如果加入了选项之后,IP首部的长度不是4个字节的整数倍,那就要用全“0”填充到4个字节整数倍的长度。


本节的内容,很多,其中最主要的是理解“标识、标志位和片偏移”。IP数据包的结构我们就学习完了,下一节将学习一下路由器转发数据包的原理。

参考教材:谢希仁《计算机网络》第七版


http://chatgpt.dhexx.cn/article/oIqT16A1.shtml

相关文章

ipv4数据包结构

第一行: 1.version,IP协议版本号,代表IPV4,大小为4个bit 2.IHL,代表IP包头的大小,大小为4个bit(其中一个bit代表32bit),IHL最小值为4最大值为15,所以IPV4大小在20个字节…

scapy定制数据包详解

今天继续给大家介绍渗透测试相关知识,本文主要内容是scapy定制数据包详解。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 一、scapy介绍 scapy是一个可以让…

OSPF——数据包

OSPF的数据包协议 OSPF协议是一个跨四层封装协议,三层协议号为 — 89 OSPF头部内容 版本 — OSPF的版本 — 在ipv4网络环境下,一般使用OSPFV2,所以,对应的版本字段为2 类型 — OSPF数据包的类型 hello — 1 DBD — 2 LSR — 3 LS…

IPV4数据包

IPV4数据包: 中文版本: 共6行,每一行是32个bit,也就是4个字节。 Version:版本 所占空间4bit 默认值为0100 IHL: ip header length ip头部长度 4bit ip包头一般来说是20字节 最后一行options和padding在默认的ipv4数据包中是空的 Ihl中每一个数值的单位是32bit 默认值0101…

IP数据包格式

目录 网络层功能 ICMP协议 ICMP作用 ICMP功能 冲突域 广播域 arp协议 工作原理 网络层功能 定义了基于 IP 协议的逻辑地址,就是 ip 地址 连接不同的媒介类型 选择数据通过网络的最佳路径,完成逻辑地址寻址 数据封装的时候在网络层会封装 ip 地址…

linux网络数据包流程

一、介绍 对于调试linux网卡驱动或者wifi驱动性能,或者排查网络数据丢包的时候,需要对内核处理包要与基本的了解,从而排查出丢包出现在哪个环节,这里给出大致流程和常用排查方法 二、基本框架 1、硬件连接 1)以太网口…

篡改数据包

工具简介 BurpSuite:是一个用于测试 Web 应用程序安全性的图形化工具。该工具使用Java编写,由PortSwigger Web Security开发。 功能 模块 HTTP代理它作为一个 Web 代理服务器运行,并且位于浏览器和目标 Web 服务器之间。这允许拦截、检查和…

数据包覆盖Android,安卓数据包怎么安装 安卓游戏数据包安装教程

安卓数据包怎么安装?安卓数据包放在哪?这是很多安卓单机游戏爱好者经常问的问题,下面小编就为各位玩家带来:安卓游戏数据包安装教程,诸如数据包存放好后,为什么还是不能正常玩都能为您解答~ 安卓数据包怎么安装? 在回答这个问题之前玩家们应该知道,数据包分为两种,一种…

数据包解析

数据包解析 数据包理解七层协议详解OSI七层协议中每一层的特征数据包解析如何改变文本的样式TCP数据包结构: 数据包理解 从专业的角度来说,(网络协议)OSI就是一个开放的通信系统互联参考模型,也是一个定义的很好的协议规范。OSI模型有7层结构…

HTTP数据包详解

1. HTTP报文格式 HTTP由请求和响应两部分组成,所以对应的也有两种报文格式。下面分别介绍HTTP请求报文格式和HTTP响应报文格式。 HTTP请求报文格式 以上表格中,第1行为“请求行”,第2、3、4行为“请求头部”,第5行为空行&#xff…

python构造数据包库_scapy构造数据包

一、进入scapy交互界面 在终端下输入:scapy ,进入交互界面: 二、查看scapy已经实现的网络协议 ls()         列出scapy中已实现的网络协议 ls(协议类型)     查看某个协议头部字段格式 lsc()        列出scapy中可以使用的命令或函数,比如嗅探时,我们经常…

Netty自定义数据包

自定义数据包 粘包现象:两个数据包连在一起,导致无法区分。 分包现象:一个数据包中的数据被间隔。 粘包和分包出现的原因是:没有一个稳定数据结构。 数据包的结构: 自定义数据包包头模块号命令号长度数据 包头&#…

数据包知识

ARP 全称:Address Resolution Protocol 地址解析协议 ARP请求 数据包的目的地址是(ff:ff:ff:ff:ff:ff),这是以太网中的广播地址, 所有发送到这个地址的数据包都会被广播到当前网段中的所有设备。这个数据 包中以太网…

数据帧和数据包解读

数据帧和数据包解读 文章目录 数据帧和数据包解读一、数据帧1.什么是数据帧2.数据帧的组成 二、数据包1.什么是数据包2.数据包的组成 一、数据帧 1.什么是数据帧 就是数据链路层的协议数据单元,它包括三部分:帧头,数据部分,帧尾…

路径规划(一) —— 环境描述(Grid Map Feature Map) 全局路径规划(最优路径规划(DijkstraA*star) 概率路径规划(PRMRRT))

路径规划问题就是把机器人的工作环境量化的描述出来,让机器人知道哪里可以走,哪里不可以走,从而规划出一条可行的轨迹,并且对于轨迹本身进行优化 环境的描述 对于环境的描述,我们一般使用两种方法——Grid map 和 Fe…

路径规划基本理论

路径规划有三个组成部分:空间表示、搜索和启发式算法, 空间表示 空间表示意思就是在执行路径规划之前,为目标构建地图环境。执行任何类型的路径规划,都需要先将地图环境离散化为图形。为了提高路径规划的效果,可以将地…

导航和路径规划

导航技术前言: 导航技术的移动机器人技术的核心和关键技术。自主移动机器人的导航就是让机器人可以自主按照内部预定的信息,或者依据传感器获取外部环境进行相应的引导,从而规划出一条适合机器人在环境中行走的路径。定位,就是机器…

基于采样的路径规划方法

与基于图搜索的方法相比,基于采样的路径规划算法不需要显式构建整个配置空间和边界。 0.概念 Complete Planner(完备规划器) Probabilistic Complete Planner(概率完备的规划器) Resolution Complete Planner&#xf…

路径规划算法:动态规划

如上图所示的实例中,寻找点A到点E代价最小的路径,这是典型的动态规划的应用场景,逆向寻优,正向求解一般分为3步,即三层循环: 第一层循环:遍历每一个阶段; 第二层循环:遍…

ROS 路径规划

目录 一、ROS路径规划算法【转】 二、机器人局部避障的动态窗口法(dynamic window approach) 三、自动驾驶路径规划DWA算法原理解析【转】 0、采样速度 1、oscillation cost function: 2、twirling cost function 3、obstacle function ​4、goal cost function 5. go…