IP 数据报首部分析

article/2025/9/16 3:37:11

来来来, 爷们. 不是一直说纸上得来终觉浅么. 今咱就抓个数据报具体看一看真实网络中的 IP 报首部.

操作方法很简单, 使用wireshark进行抓包. 抓包后随便找个包看一下就行, 毕竟所有通信的包都需要经过网络层.(同时, wireshark会对协议的相关信息给出标识, 更方便我们查看)

其中数据链路层的首部信息在整个数据的最前面, 其后跟着的是网络层, 传输层, 最后剩下的是传输的数据内容. 这个很好理解, 数据从上到下, 每过一层, 都会添加对应的头部信息, 先过传输层就先加上咯.

咱们今儿个主要就看看 IP 协议的首部内容. 走着...

要查看指定字段在其中的位置, 左键点击一下, 数据内容就会高亮了. 好贴心哦.

简单介绍一下各个字段的意思:

  • 协议版本号(4b): 标识当前 IP 协议的版本号.
  • 首部长度(4b): 标识首部长度. 单位是/4B. 也就是首部最长15*4=60B
  • 区分服务(8b):
  • 总长度(16b): 首部+数据的长度. 因为 TCP 的首部是在传输层加上的, 所以传输层的首部也会被认为是数据的一部分. IP 层可传输的数据长度为 65535-60=65475B
  • 标识(16b): 当数据包被分组时, 用于标识不同的分组. 方便接收方对数据包进行重组
  • 标志(3b): 用于一些特殊标志
  • 片偏移量(13b): 当数据包超出长度后, 会分组传输. 此字段标识数据的偏移量. 单位是/8B
  • 生存时间(8b): 数据包在网络中的寿命, 经过 n 跳之后就不再转发了
  • 协议(8b): 标识当前包的数据部分协议
  • 校验和(8b): 用于校验在网络传输中是否失真. 仅校验首部
  • 源地址(32b): 数据包的源IP地址
  • 目标地址(32b): 数据包的目标 IP 地址
  • 可选内容: 一些其他的可选字段

对于网络层协议来说, 每增加一个字段, 都会影响整体的传输速度. 所以当初设计协议的时候, 定是经过了一再斟酌, 最终才保留了这些不可获取的字段.

协议版本号

标识当前协议的版本, 目前主要用来区分 IPV4和 IPV6.

若此字段缺失, 则无法区分不同版本 IP 协议

首部长度

因为协议的首部存在可选字段, 所以需要添加字段用来指明首部的长度. 以4B 为一个单位应该也是经过多次探讨的了. 当首部为20b 时, 则没有使用可选字段.

若此字段缺失, 无法正确识别协议首部结尾.

区分服务

标识此数据包在传输过程中的一些要求服务.

  • 1-3位: 标识数据包重要性. 在网络分组传输种, 较为重要的包会优先传输. 如一个语音通话的数据包, 和一个文件下载的数据包, 明显前者更为优先.
  • 4位: 0(正常延迟), 1(想要较低的延迟)
  • 5位: 1(想要高流量)
  • 6位: 1(要高可靠性)
  • 7位: 也是拥塞控制相关的.
  • 8位: 1(网络拥塞预警)

总长度

用于对识别当前数据报的结尾.

标识

因为数据在网络层会被分片, 所以增加标识分片所在分组.

若此字段缺失, 则无法对数据包进行正确重组.

标志

  • 第一位: 保留
  • 第二位: 0(可以分段), 1(不能分段)
  • 第三位: 0(当前是最后一个分段), 1(后面还有更多的分段)

偏移量

当接收方接收到多个数据分段时, 进行重组的依据. 该字段占13b, 单位是8B. 也就是说 IP 协议传输数据超过: (2^14-1)*8=131064B≈123kb. 不过一个网络层的包也不会这么大.

而网络层对数据包进行分段是依据 MTU 计算的. MTU 则是其自动协商, 取链路最小值.

若此字段缺失, 则接收方无法对数据包进行正确重组.

生存时间

就是你在使用ping命令时, 现实的ttl. 此值每经过一次转发, 就会减一. 当减到0的时候, 该数据包就被丢弃了.

若此字段缺失, 当出现在网络中不存在的目标, 导致数据包在网络中循环传输时永远都不会消失. 而这样的数据一多, 则整个网络都会变得拥堵.

协议

标明数据部分的协议, 用于正确识别数据包上层协议, 并将数据正确转交给指定进程.

搜一下: IP 协议号, 随便打开一个可以看到所有的协议.

若此字段缺失, 则网络层无法将数据正确上交.

校验和

接收方校验在物理传输过程中, 协议首部是否存在损坏. 数据部分不做检查.

若此字段缺失, 则接收方无法缺失接收的数据与发送的数据是否一致.

源地址

用于标识数据包的源地址.

目标地址

用于标识数据包的目标地址.

可选内容

方便后面对协议的扩充. 现在已有的如:

  • 记录路径: 每个路由器都记下其IP 地址
  • 记录时间戳: 每个路由都记下其IP 与时间
  • 等等

感觉可选内容在使用中很少用到, 我抓了各种包, 暂时还没有碰到过有使用的.


协议在设计的时候真的是省吃俭用啊, 平常开发时用到的数据都是以字节为单位的, 人家网络层协议是以位为单位使用的.

后面再看TCP首部的时候, 也可以如此查看其在传输过程种的真正模样.

爷们, 希望你看到这里了...


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

相关文章

​IP数据报的格式(计算机网络)

目录 一、IP 数据报由首部和数据两部分组成 二、IP 数据报的分片 三、IP数据报分片实例 四、IP 数据报首部的固定部分中的各字段 五、协议字段的作用 一、IP 数据报由首部和数据两部分组成 版本——占 4 位,指 IP 协议的版本 目前的 IP 协议版本号为 4 (即 IPv4…

Wireshark分析IP数据报

Wireshark分析IP数据报 1. IP数据报格式 总概 2. IP数据报首部的固定部分各字段 版本【4位】:IPv4或IPv6首部长度【4位】:单位是32bit(4字节),比如:首部最小长度为20字节,此时为:…

IP数据报的格式

IP数据报的格式能够说明IP协议具有什么功能,在TCP/IP的标准中,各种数据格式常以32位(4字节)为单位来描述。 一个IP数据包有首部和数据两部分组成。首部的前一部分是固定长度,占20字节,是所有IP必须有的。在…

图解IP数据报格式

IP数据报格式详解 IP数据报的首部格式及其内容是实现IP协议的主要功能的基础,因此我们有必要搞清楚这部分的内容。 一个IP数据报由20字节的固定部分和最大40字节的可变部分组成。 ■ 固定部分:指每个IP数据报首部都必须包含的部分。 ■ 可变部分&#…

计算机网络---IP数据报

(一)IP数据报格式 TCP/IP协议栈 IP数据报格式: 版本:IP协议的版本号 IPv4/IPv6 首部长度:单位是4B,最小为5,以4字节为单位 固定部分20B 区分服务:指示期望获得哪种类型的…

【IP协议(一)】——IP数据报格式及其含义,IP数据报的切分

💂 个人主页:努力学习的少年🤟 版权: 本文由【努力学习的少年】原创、在CSDN首发、需要转载请联系博主💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 🚀 IP数据报格式 版本:占4位,指…

IP数据报的首部

IP数据报的首部 注:IP数据报的格式,能够说明IP协议都具有什么功能。 1. IP数据报首部——固定部分 1.1 版本 占4位,指IP协议的版本。通信双方使用的IP协议的版本必须一致。IP协议版本号为4(即IPv4),IP协议版本号为6(即IPv6)…

计算机网络——IP数据报分析

目录 🛴一、IP数据报简介 🛹二、Wireshark抓包分析 🛴一、IP数据报简介 版本:占4比特,表示IP协议的版本。通信双发使用的IP版本必须一致 首部长度:占4比特,表示IP数据报首部的长度。该字段的取…

IP数据报格式详解

IP协议提供不可靠无连接的数据报传输服务,IP层提供的服务是通过IP层对数据报的封装与拆封来实现的。IP数据报的格式分为报头区和数据区两大部分,其中报头区是为了正确传输高层数据而加的各种控制信息,数据区包括高层协议需要传输的数据。 IP…

网络层——IP数据报详解

IP数据报格式 各个字段的分析: 版本 4位    指IP协议的版本,通信双方使用的IP协议版本必须保持一致。主要用两个版本IPV4、IPV6首部长度 4位   4位表示的最大十进制数是15。注意,首部长度字段所表示数的单位是32位(也就是4个…

IP数据报

文章目录 前言一、IP数据报的格式1.IP数据报2.数据报中各个字段的意义 二、ICMP(Internet控制报文协议)1.报文格式2.常见应用 三、ARP协议四、路由表 前言 在前面的学习中我们学习了数据的封装和解封装,了解了封装是从发送端由上向下一层一层…

IPv4数据报的首部格式

版本:占4比特,表示IP协议的版本,通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4 首部长度占4比特,表示IP数据报首部的长度。该字段的取值以4字节为单位。最小十进制取值为5,表示IP数据报首部只有…

EXE4J 错误提醒 Pleasedefine EXE4J_JAVA_HOME to point to an installes 64-bit JDK or JRE

EXE4J 错误提醒 Please define EXE4J_JAVA_HOME to point to an installed 64-bit JDK or JRE 首先查看上一步的提醒,这里显示支持的版本为最小1.8到最大11,而我环境变量配置为13,版本过高 解决办法 1、添加符合版本的jdk 2、升级exe4j …

首次使用exe4j遇见的问题

exe4j安装注册: https://www.cnblogs.com/jepson6669/p/9211208.html 问题一、安装exe4j 问题和解决方法描述: 大概是这个意思,安装这个exe4j需要jvm,你的电脑上要有jdk和jre,并且这个jdk版本必须是1.8~11之间的64…

exe4j下载和使用(超详细)

1、下载exe4j 链接: 点击下载 提取码: b3cy 1.1、安装步骤就不说了,按照提示一步一步进行即可 2、这里使用的jar包是maven项目打包出来的jar PS:注意 这里针对的是maven项目打包成的jar,如果是普通Java项目打包成的jar 请参考别的文章2.1…

exe4j 打包 jar 文件为 exe 文件(GUI程序)

exe4j 打包 jar 文件为 exe 文件(GUI程序) 1、资源分享2、把项目打包成 exe 文件2.1 把项目打包成 jar 包(用 fatjar 打包项目)(1) 把 net.sf.fjep.fatjar_0.0.32.jar 包放入 eclipse\plugins 目录下(2) 完成第一步后,…

exe4j打成的exe文件运行时弹窗this executable was created with an evaluation version of exe4j问题解决

其实这是因为没有激活造成的,激活码网上很多,这里给一个L-g782dn2d-1f1yqxx1rv1sqd 点击welcome页的右下角的License, Name和Company随便输,然后输入激活码确认就可以了

exe4j下载安装

exe4j下载安装 exe4j下载exe4j安装exe4j激活exe4j使用 exe4j下载 exe4j下载地址 1.点击exe4j下载地址 2.点击Setup Executable (55 MB) ZIP Archive (75 MB) 进行下载 exe4j安装 1.双击 exe4j_windows-x64_7_0.exe开始安装 2.点击运行按钮 3.点击Next按钮 4.选择 I ac…

exe4j打包问题解决方案

在我们想要打包java文件时候,由于编译版本与运行环境的问题困扰我们许久:java.lang.UnsupportedClassVersionError: Os/Os 已由 Java 运行时的更新版本(类文件版本 56.0)编译,此版本的 Java 运行时仅识别最高 52.0 的类…

exe4j中,报错:This executable was created with an evaluation version of exe4j

运行exe4j工具打包好的.exe文件,报错:This executable was created with an evaluation version of exe4j 由于是新下载安装的exe4j工具,没有进行注册!所以导致报这个错! 在使用exe4j时,如果exe4j没有注册…