IP数据报格式

article/2025/10/3 19:28:01

1、报文格式

前几篇总结过较多网络层的知识,ARP,ip地址、子网掩码等等。这次总结一下IP数据报的报文格式
IP数据报的格式能够说明IP协议都具有什么功能。在TCP/IP的标准中,各种数据格式常常以32位(4字节)为单位来描述的。
在这里插入图片描述
wireshark中IP数据报文呈现
在这里插入图片描述

一个IP数据报文由首部数据两部分组成。首部的前一部分是固定长度,共20字节。是所有IP数据报文必须具有的。在首部的固定部分的后面是一些可选字段,其长度可变。

2、首部个字段意义

  1、版本占4位,指IP协议的版本。通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。版本号为6(即IPv6)
  2、首部长度占4位,可表示的最大十进制数值是15。首部长度字段所表示的单位是32位(4字节,与TCP首部中长度字端单位一致)。因为IP首部的固定长度是20字节,因此首部长度字段的最小值为5(0101)。当首部长度为15(1111)时,表示的长度为60字节当IP分组的首部长度不是4的整数倍时,必须利用最后的填充字段加以填充达到4的整数倍。
  3、区分服务占1字节,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。只有在区分服务时,这个字段才起作用。在一般情况下都不使用这个字段。
  4、总长度占2字节,指首部和数据之和的长度,单位为字节。能表示的最大长度为65535字节。在IP层下面的链路层协议规定了一个数据帧的数据字段的最大长度,这称为最大传输单元MTU(maximum transfer unit)。当一个IP数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的链路层所规定的的MTU值。

以太网规定MTU为1500字节。MTU是数据链路层所规定的,用于限制链路层数据部分的长度。按照分层组包思路MTU是作用于网络层(网络层此时是链路层的数据部分)。若所传送的数据报长度超过链路层的MTU值,就必须把过长的数据进行分片处理(后面会详细讲述)。

  虽然使用尽可能长的IP数据报会使传输效率得到提高(载荷利用率高)。但数据报短些也有好处。每个IP数据报越短,路由器转发的速度就越快。

  5、标识(identification)占2字节。网络层软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不同于TCP首部中的序号,因为IP是无连接的服务,数据报不存在按序接收的问题。当数据报长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有被分片报文片的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装层原来的数据。
  6、标志占3位,目前只有两位有意义。

标志字段中间的一位记为DF(dongt fragment),意思是“不能分片”。当DF=0时才允许分片。
标志字段最低位MF(more fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。

  7、片偏移占13位。片偏移指出:较长的IP报文在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。每片的长度一定是8字节的整数倍。

例如:一数据报的总长度为3820字节,数据部分为3800字节(IP首部为固定20字节),需要分片传输。假设每片IP报文长度不超过1420字节。去掉固定首部长度20字节,每片报文数据部分长度不超过1400。于是分成3个数据报片,其数据部分长度分别为1400、1400、100字节。原始数据报首部被复制为各数据报片的首部,只需要改变有关字段的值。

数据分片举例

在这里插入图片描述
报文首部中与分片有关的字段中数值,标识部分是任意给定的值

总长度标识DFMF片偏移
原始数据报3820123000
分片11420123010
分片2142012301175
分片3102012300350

  8、生存时间占8位,英文缩写TTL(Time To Live),表明数据报在网络中的寿命。由发出数据报的源点设置这个字段。目的是防止无法交付的数据无限制地在互联网中兜圈子。路由器在每次转发数据报之前就把TTL值减1。若TTL值减小到零,就丢弃此报文,不在转发。
  9、协议占8位,协议字段指出此数据报携带的数据是使用何种协议(上面数据包中协议字段为6表示使用TCP协议),以便使用的目的主机的IP层知道应将数据部分上交给哪个协议进行处理。
常见的协议号

协议名ICMPIGMPIPTCPIPv6UDP
协议字段值12464117

  10、首部检验和占16位,也常成为校验和。这个字段只检验数据报的首部,但不包括数据部分(与UDP、TCP中的检验和不同)。IP数据报每经过一个路由器,路由器都需要重新计算一下首部检验和(IP首部中的TTL、标志、片偏移等都可能发生变化)。检验和的计算方式这里就不总结了。
  11、源地址占32位。
  12、目的地址占32位


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

相关文章

IP报文格式详解

转载:https://www.cnblogs.com/zhangbing12304/p/11016921.html 下图为常见的IP报文格式表: 上面是IP的报文格式,接下来我们先说明各个字段的意义。然后,用Etheral软件转包分析IP的报文格式。 1.版本:ip报文中&#…

matlab fsolve 与fzero,fsolve / fzero:找不到解决方案,看似常规

您的系统设置方式,绘制它并观察其行为实际上很方便 . 我向你的函数进行了矢量化并绘制了 f(x) = MLNEfun(x)-x ,其中 MLNE(x) 的输出是 newA . 实际上,您对系统的固定点感兴趣 . 我观察到的是: 在A~3800处有一个奇点和一个根交叉 . 我们可以使用 fzero ,因为它是一个括号中…

matlab fsolve实例,转 Matlab非线性方程求解器fsolve总结(含实例)

this.p{ m:2, b:2, loftPermalink:, id:fks_080067080082080074080086083095085085082071082086082074092, blogTitle:转 Matlab非线性方程求解器fsolve总结(含实例), blogAbstract: fsolve是采用最小二乘法来求解非线性方程。它的一般求解方式为: XFSOLVE(FUN,X0,O…

MATLAB-fsolve函数帮助文档翻译与补充

fsolve 解非线性方程组 非线性系统解算器 解决指定的问题 F(x) 0对于x, F(x)是一个返回向量值的函数。 x是一个向量或者一个矩阵;看矩阵参数。 语法: x fsolve(fun,x0) x fsolve(fun,x0,options) x fsolve(problem) [x,fval] fsolve(___) [x,fval,exitfla…

[Matlab] fsolve函数隐藏输出

fsolve函数用于求解方程的解,第一参数是要求解的方程,方程形式是f(x)0,第二个参数是从哪个点开始迭代搜索。 比如: fsolve会输出两部分内容,第一部分是迭代的结果(是否找到根),第二部分是求解结果(如果没找…

matlab之fsolve方法求解复杂非线性方程常见问题(入门)

问题描述: 二十六道二次方程,共二十个未知数。 考虑了matlab中可用的各类算法,最后采用fsolve函数解该复杂非线性方程。 参考:非线性方程(组):MATLAB内置函数 solve, vpasolve, fsolve, fzero, roots [MATLAB] - Ge…

matlab fsolve()函数的使用

fsolve()函数通常用于数值求方程或方程组的解,更常用于求解非线性方程组。其基本结构如下:(可以在matlab命令页面输入help fsolve查询) fsolve()解决的方程形式为F(X)0; 用法为: X fsolve(FUN,X0,OPTIONS) 或者写为 […

仿射变换和透视变换详解

仿射变换和透视变换都是计算机视觉中重要的图像变换操作,然而也困扰了我很久,通过找寻很多资料总算大致弄明白了这两个变换。 仿射变换 旋转和平移都是仿射变换的特殊形式。 wiki详细解释: https://en.wikipedia.org/wiki/Affine_transformat…

Opencv_10 图像的透视变换

文章目录 一. 透视变换的原理二. 透视变换实现① 函数原型② 透视变换实现 三. 透视变换的案例 一. 透视变换的原理 透视变换(Perspective Transformation)是将图片投影到一个新的视平面(Viewing Plance),也称为投影映射(Projective Mapping).通用的变换公式为: 透视变换矩阵 …

【OpenCV】透视变换 仿射变换

目录 一:透视变换基本概念 二:透视变换工作原理 三:findHomography函数 四:warpPerspective函数 五:getPerspectiveTransform函数 一:透视变换基本概念 仿射变换(affine transform)与透视变换(perspec…

逆透视变换详解 及 代码实现(二)

根据 逆透视变换详解 及 代码实现(一)的原理 下面我用车上拍摄的车道图像,采用逆透视变换得到的图像,给出代码前我们先看下处理结果。 首先是原始图像: 下图为逆透视变换图像: 下面说具体的实现吧!! 一、…

透视变换的实现以及透视变换矩阵的构造

透视变换(Perspective Transformation)是什么,无需多说,但是一个非常惨痛的现实是如果你想知道怎么样才能在编程做,你只能得到一些调用opencv函数的文章,简直有病,谁不会调用函数,我搜索实现肯定是要找代码参考看下是怎么实现算法的,你调用函数还敢叫自己“实现”?那我…

图像处理之_仿射变换与透视变换

1. 仿射变换 1) 用途 旋转 (线性变换),平移 (向量加).缩放(线性变换),错切,反转 2) 方法 仿射变换是一种二维坐标到二维坐标之间的线性变换,它保持了二维图形的“平直性”(直线经过变换之后依然是直…

Matlab 透视变换 原理及其代码实现

一、透视变换内涵 透视变换本质:将一个图像投影到新的视平面 透视变换思路: 将二维坐标系转换为三维坐标系。 将三维坐标系投影到新的二维坐标系。 该过程属于非线性变换过程,一个菱形在经过非线性变换后得到一个四边形,但是…

art上的透视变换

透视变换 透视变换在比赛中非常重要,我们在地图识别与微调时用到了透视变换。 1. 微调上的使用 在车抵达目标板附件时,摄像头检测到目标板后,可以通过透视变换确定图片距车的位置。这里需要强调下,我们使用的透视变换与四轮使用…

透视变换(Perspective Transform)

**透视变换(Perspective Transform)**是将图片投影到一个新的视角或平面,变换公式如下。 在之前的章节中我们学习过仿射变换(affine transform) 可以看到,而射变换的变换矩阵是3x2的变换矩阵。和仿射变换不同的是,透视变换的变换矩阵是一个3…

仿射变换与透视变换区别

仿射变换 1) 用途 旋转 (线性变换),平移 (向量加).缩放(线性变换),错切,反转 2) 方法 仿射变换是一种二维坐标到二维坐标之间的线性变换,它保持了二维图形的“平直性”(直线经过变换之后依然是直线&…

用OpenCV进行透视变换

1. 引言 欢迎回来!今天我们将焦点聚焦在我在图像处理中最喜欢的话题之一——透视变换。使用该技术,可以灵活方便的实现各种各样好玩的特效。 闲话少说,我们直接开始吧! 2. 单应矩阵 我们首先展开对单应矩阵的深入研究。作为图…

透视变换矩阵详解

原文: OpenGLProjection Matrix (songho.ca) 看这篇文章主要是因为对learnopengl深度测试这一章的些许疑惑, 为什么在片段着色器中,存储的每一个fragment的深度值并不是线性分布?体现在想要显示出场景里面所有物体的深度值&#x…

【图像处理】透视变换 Perspective Transformation

透视变换(Perspective Transformation)是将图片投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。通用的变换公式为: u,v是原始图片左边,对应得到变换后的图片坐标x,y,其中。变换矩阵可以拆成4部分,表示…