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

article/2025/9/16 4:32:19
  • 💂 个人主页:努力学习的少年
  • 🤟 版权: 本文由【努力学习的少年】原创、在CSDN首发、需要转载请联系博主
  • 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦

🚀 IP数据报格式

  • 版本:占4位,指ip协议的版本
  • 首部长度:表示IP数据报中报头的长度,可表示的最大的十进制位是15。首部长度表示的基本单位是4个字节,因此首部长度的最小值是5,也就是报头最小长度是20个字节。当首部长度是1111时,表示的是报头最大是60个字节。
  • 区分服务:占8位,用来获得更好的服务,但实际上一直没被用过。
  • 总长度:指的是一个IP数据报总的长度,也就是报头+数据。
  • 标识:占16位,在IP软件在存储器中维持着一个计数器,每产生一个数据报,计数器就+1,并将此值赋值给标识字段。当IP数据报长度超过MTU而必须进行分片,这个标识字段的值就被复制到所有的数据报片的标识字段中。相同的标识字段的值使分片后的各个数据报片最后的能正确地重装成为原来的数据。
  • 标志:占3位,但目前只有两位有意义
  1. 标志字段中的最低位为MF。MF=1即表示后面“还有分片”的数据报。MF=0表示的是这个数据报的最后一个。
  2. 标志字段中的中间一位记为DF,当DF记为1时,表示的是“不能分片”。
  • 片偏移: 占13位。片偏移指出,较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,相对于用户的数据字段,该片从何开始。片偏移以8字节为单位。这就是说,每个分片长度一定是8字节的整数倍。 
  • 生存时间 :占8位,生存时间字段常用英文缩写是TTL(Time to Live),表明的是数据报在网络中的寿命。由发出数据报圆点设置这个字段,目的是防止无法交付的数据报无限制地在因特网中兜圈子,占用网络资源。TTL以跳数作为基本单位,路由器在转发数据报中,TTL值就会-1,当TTL为0时,该数据报就会被丢弃。显然数据报能在因特网中经过的路由器的最大数值是255。若把TTL的初始值设置为1,就表示该数据报只能在本局域网中传送。
  • 协议:占8位,协议字段指出此数据携带的数据是使用何种协议,以便让使目的的IP层知道将数据部分上交到哪个处理过程。如TCP,UDP等等
  • 首部检验和: 占16位,这个字段只检验数据报的首部,不包括数据部分。
  • 源IP地址:占32位。
  • 目的IP地址:占32位。

🚀 IP数据报分片问题

在了解IP数据报分片之前,我们先思考一下IP数据报为什么要进行分片?

  • 在数据链路层当中MAC层规定了MAC帧中最多能携带数据是MTU个字节(默认的MTU值是1500个字节),那么MAC中能携带最大能携带1500个字节。如果IP层向下传递一个超过1500个字节IP数据报给mac帧,则MAC帧是不会将数据报发送出去的,所以如果在IP层中是不能将一个大小是超过MTU的IP数据报传递到MAC层,如果检测到一个IP数据报的大小是超过MTU,则IP层会将IP数据报中的数据部分进行切片。

IP层是如何将IP数据报进行分片呢?

  • 假设一个数据报的总长度为3820,其数据部分是3800,如果MTU是1420个字节,为了能让我们的MAC层能将IP报发出去,所以分片后的IP数据报不能超过1420个字节,因为IP报头是固定的20个字节,所以分片后的IP报中数据部分不能超过1400个字节,于是如下分成3片,其数据部分1400,1400,1000个字节。

 接受方主机是如何判断收到的IP报中的数据被分片过呢?

  • 如果收到一个IP数据报中的MF标志位是1,则说明该IP数据报中的数据部分被分片过,需要对数据部分进行组装。或者收到一个IP数据报中的MF标志位是0,且偏移量不是0的IP数据报,也说明该IP数据报中的数据部分也被分片过。

接收方主机是如何判断IP数据报中数据部分组装完成或者IP数据报中的数据不需要进行组装了呢?

  • 如果接收方的IP层收到一个IP数据报中的MF标志位是0,且偏移量是0,说明该IP中的数据部分不需要进行组装,如果收到是一个IP数据报中的MF标志位是0,且偏移量不是0,那么就会检测组装数据部分中是否存在缺失的情况(根据偏移量进行检测),如果组装的数据部分是连续的,那么就说明被切片的数据字段已经组装完成。

如果IP数据报中的数据部分被切片后,其中某些分片缺失后会怎么样?

  • 如果某些分片在网络中丢失后,那么接收方中的数据部分组装后是不完整的,所以代表被切分的IP数据报丢失了,所以其它的相同标识分片的数据报是会被丢弃掉,因此发送过来的数据字段就丢失了,如果上层是TCP协议,则会进行超时重传一个IP报,当然效率是会减低很多的。因此,如果将一个IP报中的数据字段被切分多个分片,是会增加该IP报丢失几率的(IP协议是没有可靠协议的),只要其中一个切片丢了,则被切分的IP报就丢了,因此是不建议将IP报进行切分。

TCP协议为了减少IP报被切分的概率,双方主机在握手阶段会交换自己的MSS,那么MSS是什么呢?

  • MSS是TCP层交互给IP层最大分段大小,不包含TCP报头,只包含数据。由于在MAC层中规定了一个最大传输单元MTU,所有的MAC帧的数据部分不能超过该MTU,因此就要求IP层不能传输超过MTU字节的IP报,但IP报中报IP报头和IP数据部分,IP数据部分是由TCP层面决定的因此,所以TCP为了减少被切分的概率,就确定一个MSS限制每一次交互给IP层的数据大小。MSS数据大小去掉IP报头和TCP报头,IP报头和TCP报头都是20个字节(不考虑扩展项)。因此:MSS数据大小=MTU-20-20.(MTU默认值是1500个字节,也可以是其它值)。

 

  • 所以双方主机在建立连接的时候会交换自己的MSS大小值,最终大小取决于双方主机的较小值,如果一台主机的MSS是1200个字节,另一台主机的MSS是1300个字节,所以双方主机MSS都取1200个字节,那么双方通信的时候TCP层面发送的数据都是1200个字节。

Ip层是如何将 IP数据报中的报头和数据部分分开的?

  • Ip层收到一个数据报,会先读取前20个字节,因为前20个字节是固定的,然后再找到首部长度判断报头中是否存在选项,如果首部长度是0101,则说明报头为20个字节,所以刚刚读取的20个字节就是报头,然后再找到总长度,数据大小=总长度-首部长度,所以接下来再读取数据大小个字节就是该数据报的数据部分。


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

相关文章

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没有注册…

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…