IP数据报的首部

article/2025/9/16 4:42:17

IP数据报的首部

注:IP数据报的格式,能够说明IP协议都具有什么功能。
这里写图片描述

1. IP数据报首部——固定部分

1.1 版本

  • 占4位,指IP协议的版本。
  • 通信双方使用的IP协议的版本必须一致。
  • IP协议版本号为4(即IPv4),IP协议版本号为6(即IPv6)。

1.2 首部长度

  • 占4位,可表示的最大十进制数值是15。
  • 这个字段所表示数的单位是32位字(即4字节),因此,当IP的首部长度为1111(即十进制的15)时,首部长度就达到最大值60个字节。
  • 最常用的首部长度就是20个字节(即首部长度为0101),这时不使用任何选项,是固定首部的长度。
  • 当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。

1.3 区分服务

  • 占8位,用来获得更好的服务。

1.4 总长度

  • 占16位,指首部和数据之和的长度。
  • 数据报的最大长度为2^16 -1 = 65535字节。
  • 在IP层下面的每一种数据链路层都有其自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)。当一个IP数据报封装成数据链路层的帧时,此数据报的总长度(即首部加上数据部分),一定不能超过下面的数据链路层的MTU值。
  • 虽然使用尽可能长的数据报会使传输效率提高,但由于以太网的普遍应用,所以实际上使用的数据报长度很少有超过1500字节的。
  • 为了不使IP数据报的传输效率降低,有关IP的标准文档规定,所有的主机和路由器必须能够处理的IP数据报的长度不得少于576字节。这个数值也就是最小的IP数据报的总长度。
  • 当数据报长度超过网络所容许的最大传送单元MTU时,就必须把过长的数据报进行分片后才能在网络上传送(“片偏移”字段相关)。这时,数据报首部中的总长度不是指未分片前的数据报长度,而是指分片后的每一个分片的首部长度与数据长度的总和。

1.5 标识

  • 占16位,指IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值付给标识字段。
  • 但这个标识并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。
  • 当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就会被复制到所有的数据报片的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。

1.6 标志

  • 占3位,但目前只有两位有意义。
  • 标志字段中的最低位记为MF(More Fragment)。
    (1)MF=1即表示后面“还有分片”的数据报。
    (2)MF=0即表示这已是若干数据报片中的最后一个。
  • 标志字段中的中间位DF(Don’t Fragment),意思是“不能分片”,只有当DF=0时才允许分片。

1.7 片偏移

  • 占13位,指出较长的分钟再分片后,某片在原分组中的相对位置。
  • 也就是说,相对于用户数据字段的起点,该片从何处开始。
  • 片偏移以8个字节为偏移单位。也就是说,每个分片的长度一定是8字节(64位)的整数倍。
  • 例子:一数据报的总长度为3820字节,其数据部分为3800字节长(使用固定首部),需要分片为长度不超过1420字节的数据报片。因固定首部长度为20字节,因此每个数据报片的数据部分长度不能超过1400字节。于是分成3个数据报片,其数据部分的长度分别分为1400,1400和1000字节。原始数据报首部被复制为各数据报片的首部,但必须修改有关字段的值。
    这里写图片描述

1.8 生存时间

  • 占8位,常用的英文缩写是TTL(Time To Live),表明数据报在网络中的寿命。
  • 由发出数据报的源点设置这个字段。
  • 其目的是为了防止无法交付的数据报无限制地在因特网中兜圈子,因而白白浪费网络资源。
  • 随着技术的发展,TTL字段的功能改为“跳数限制”。路由器在转发数据报之前就把TTL值减1。若TTL值减少到零,就丢弃这个数据报,不再转发。
  • 因此,现在TTL的单位不再是秒,而是跳数。
  • TTL的意义是指明数据报在因特网中至多可经过多少个路由器。显然,数据报能在因特网中经过的路由器的最大数是255。
  • 若把TTL的初始值设置为1,就表示这个数据报只能在本局域网中传送。

1.9 协议

  • 占8位,指出此数据报携带的数据是使用何种协议,一遍使目的主机的IP层知道应将数据部分上交给哪个处理过程。
  • 常用的一些协议和相应协议的字段值。
    这里写图片描述

1.10 首部检验和

  • 占16位,只检验数据报的首部,但不包括数据部分。
  • 这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。
  • 不检验数据部分可减少计算的工作量。
  • 为了进一步减少计算检验和的工作量,IP首部的检验和不采用复杂的CRC检验码而是采用以下算法:
    (1)在发送方,先把IP数据报首部划分为许多16位字的序列,并把检验和字段置零。
    (2)用反码算术运算把所有16位字相加后,将得到的和的反码写入检验和字段,
    (3)接收方收到数据报后,将首部的所有16位字再使用反码算术运算相加一次。将得到的和取反码,即得出接收方检验和的计算结果。若首部未发生任何变化,则此结果必为0,于是就保留这个数据报,否则即认为出错,并将此数据报丢弃。
    这里写图片描述

1.11 源地址

  • 占32位。

1.12 目的地址

  • 占32位。

2. IP数据报首部——可变部分

IP首部的可变部分就是一个选项字段。

2.1 可选字段(长度可变)

  • 选项字段用来支持排错、测量以及安全等措施,内容很丰富。
  • 此字段的长度可变,从1~40个字节不等,取决于所选择的项目。
  • 某些选项项目只需要1个字节,它只包括1个字节的选项代码。但还有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符。

2.2 填充

  • 最后用全0的填充字段补齐成为4字节的整数倍。

注:增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。新的IP版本IPv6就把IP数据报的首部长度做成固定的。


参考文献:
[1]《计算机网络(第5版)》谢希仁——第四章 4.2


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

相关文章

计算机网络——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没有注册…

SpringBoot 2.x 使用 exe4j 打包成 exe 可执行文件(附带启动传参)

1.下载安装exe4j 官网地址: exe4j Download 2.注册exe4j 启动exe4j后 点击右下角 Change License 填写用户名公司与注册码 ​​​​​​​ 注册码列表自行百度 3.准备打包文件 创建一个文件夹 文件夹内包含 整个jdk 项目jar包 ico图标 4.运行exe4j开始打包 步骤一 …

exe4j完成Java转exe 自带jre

当用户电脑上没有安装Java环境时,我(们)交付程序时,还需要提交一份jre exe4j支持选择自带的jre;但是好像不支持选择精简的jre,会导致生成的exe不能正常运行 知道怎样用精简jre转exe的朋友请留言…orz,我之前提到了怎…

exe4j打包工具使用

前言:用于将eclipse中的项目打包成.exe形式。 eclipse中的项目打包成jar形式:eclipse项目右键–>Export–>java–>Runnable JAR file–>Next→Export destination(选择jar包导出路径),Library handing(选择第三项 Copy…&#xf…

利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件

利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件 exe4j 的工作原理EXE 制作教程 将 JAR 包制成能在 Windows 上直接运行的 EXE 文件,是很多 Java 爱好者喜欢做的事情。虽然这不是对 JAR 包的商业用法,不过很多人都希望能学以致用,而不仅仅是…

EJ.Technologies.Exe4j 8.0-key

exe4j 是一个 Windows 启动器生成器,在您购买 install4j 时免费提供。如果您想在没有安装程序的情况下创建 Java 启动器,exe4j 很有用。exe4j 是一个简单易用的软件应用程序,它允许程序员快速创建 EXE 格式的 Java 应用程序并将它们集成到 Wi…

exe4j 压缩java代码到无JRE环境的电脑上运行

exe4j_6.0下载(x86\x64\注册机): https://pan.baidu.com/s/1oFzif5ZVswbgbBkKHc8HFQ 打包步骤: 再次偷一下懒,使用别人的内容,原文:https://blog.csdn.net/qq_20473985/article/details/531862…

exe4j 关闭命令行窗口运行

exe4j 运行关闭命令行窗口 java 程序打包成 jarexe4j 将jar转为 exe 文件exe4j 关闭未注册弹窗信息exe4j 设置UI启动,关闭黑框 使用 java swing 做个小软件,为了使用方便,使用 exe4j 将 jar 包转成了 exe 文件,可以直接双击运行&a…