4.7、IPv4 数据报的首部格式

news2024/12/23 18:25:30

image-20230101191053436

固定部分:每个 IP 数据报首部都必须包含的内容

  • 某些 IP 数据报的首部除了包含 20 20 20 字节的固定部分外,还包含一些可选的字段来增加 IP 数据报的功能

IP 数据报的首部常以 32 32 32 个比特为单位进行描述

  • 图中的每一行都由 32 32 32 个比特(也就是 4 4 4 字节)构成

每个小格子称为字段或者域

每个字段或某些字段的组合用来表达 IP 协议的相关功能

1、版本字段(4 bit)

版本字段

  • 4 4 4 比特,表示 IP 协议的版本。
    通信双方使用的 IP 协议的版本必须一致。目前广泛使用的 IP 协议版本号为 4 4 4(即 IPv4 )。

image-20230101200113190


2、首部长度字段(4 bit)

首部长度字段

  • 4 4 4 比特,表示 lP 数据报首部的长度。该字段的取值以 4 4 4 字节为单位。
  • 最小十进制取值为 5 5 5 0101 0101 0101) ,表示 IP 数据报首部只有 20 字节固定部分;
  • 最大十进制取值为 15 15 15 1111 1111 1111),表示 IP 数据报首部包含 20 20 20 字节固定部分和最大 40 40 40 字节可变部分。

image-20230101200122082


2、可选字段(1~40 B)

可选字段

  • 长度从 1 1 1 个字节到 40 40 40 个字节不等。用来支持排错、测量及安全等措施
  • 可选字段增加了 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。
  • 这就增加了每一个路由器处理 IP 数据报的开销。实际上可选字段很少被使用。

image-20230101200136513


3、填充字段(全 0)

填充字段

  • 确保首部长度为 4 4 4 字节的整数倍。使用全 0 0 0 进行填充。

IP 数据报的首部长度一定是 4 4 4 字节的整数倍。

  • 由于首部中的可选字段的长度从 1 1 1 个字节到 40 40 40 个字节不等。
  • 那么,当 20 20 20 字节的固定部分 + 1 1 1 40 40 40 字节长度不等的可变部分
  • 会造成首部长度不是 4 4 4 字节的整数倍时,就用取值为全 0 0 0 的填充字段填充相应的字节
  • 以确保 IP 数据报的首部长度时 4 4 4 字节的整数倍

image-20230101200148802


4、区分服务(8 bit)

区分服务

  • 8 8 8 比特,用来获得更好的服务。
  • 该字段在旧标准中叫作服务类型,但实际上一直没有被使用过。
  • 1998 1998 1998 年,因特网工程任务组 IETF 把这个字段改名为区分服务。
  • 利用该字段的不同数值可提供不同等级的服务质量。
  • 只有在使用区分服务时,该字段才起作用。一般情况下都不使用该字段。

image-20230101200056392


5、总长度(16 bit)

总长度

  • 16 16 16 比特,表示 lP 数据报的总长度(首部 + 数据载荷)。
  • 最大取值为十进制的 65535 65535 65535 2 16 − 1 2^{16}-1 2161),以字节为单位。

image-20230101200224915


首部长度字段和总长度字段的区别与联系

image-20230101200512369

假设首部中的首部长度字段的二进制取值为 0101 0101 0101

  • 则可以计算出 IP 数据报的首部长度: ( 0101 ) 2 × 4 = 5 × 4 = 20 (0101)_2 \times 4 = 5 \times 4 =20 (0101)2×4=5×4=20(字节)

假设首部中的总长度字段的二进制取值为 0000001111111100 0000001111111100 0000001111111100

  • 则可以计算出 IP 数据报的总长度: ( 0000001111111100 ) 2 = 1020 (0000001111111100)_2 = 1020 (0000001111111100)2=1020(字节)

进而可以算出数据载荷的长度

  • 数据载荷长度 = 总长度 - 首部长度 = 1000 1000 1000(字节)

image-20230101200910985


6、标识(16 bit)、标志(3 bit)、片偏移(13 bit)

标识、标志、片偏移

  • 它们共同用于 IP 数据报的分片

image-20230101201033849

这是网络层的 IP 数据报,它将在数据链路层封装成帧。

每一种数据链路层协议都规定了帧的数据载荷的最大长度

  • 最大传输单元 MTU

image-20230101201315796

需要将原 IP 数据报分片为更小的 IP 数据报,在将各分片 IP 数据报封装成帧

标识字段

  • 16 16 16 比特,属于同一个数据报的各分片数据报应该具有相同的标识。
  • IP 软件维持一个计数器,每产生一个数据报,计数器值加 1 1 1 ,并将此值赋给标识字段。

标志

3 3 3 比特,各比特含义如下:

DF 位:

  • 1 1 1 表示不允许分片;
  • 0 0 0 表示允许分片

MF 位:

  • 1 1 1 表示 “后面还有分片”;

  • 0 0 0 表示 “这是最后一个分片”

保留位:

  • 必须为 0 0 0

片偏移

  • 13 13 13 比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位。
  • 8 8 8 个字节为单位

image-20230101201033849


7、对 IP 数据报分片

IPv4 数据报进行分片

如下所示:该 IP 数据报的总长度: 3820 3820 3820 个字节

image-20230101202142715

假设使用以太网传送该 IP 数据报。

  • 以太网的最大传送单元 MTU 1500 1500 1500 字节

也就是以太网的数据载荷部分最大为 1500 1500 1500 字节(上层的固定首部 + 数据载荷 = 下层的数据载荷)

  • 无法封装 3820 3820 3820 字节长的 IP 数据报

因此,需要把该 IP 数据报分片成几个更小的 IP 数据报

  • 每个长度不能大于 1500 1500 1500 个字节

然后再将每个分片 IP 数据报封装成一个以太网帧进行传输


我们对原 IP 数据报的数据载荷分成三个更小的分片

前两个分片分别为: 1400 1400 1400 个字节

第三个分片为: 1000 1000 1000 个字节

说明:分片的总长度不能超过 1420 1420 1420 字节

分片结束后,给每个分片重新添加一个首部,使之称为 IP 数据报

image-20230101202844553

思考:给各分片添加的首部是否完全相同呢?

image-20230101203624436

其中分片 1 1 1IP 数据报数据载荷部分的第一个字节,就是原 IP 数据报数据载荷部分的第一个字节

  • 因此片偏移字段的取值为 0 / 8 0/8 0/8(除以 8 8 8 的原因是片偏移字段以 8 8 8 字节为单位)

现在假定分片 2 2 2 的数据报经过某个网络时还需要再进行分片

image-20230101203741857


8、生存时间 TTL (8 bit)

生存时间 TTL

  • 8 8 8 比特,最初以秒为单位,最大生存周期为 255 255 255 2 8 − 1 2^8-1 281) 秒;

    • 路由器转发 IP 数据报时,将 IP 数据报首部中的该字段的值减去 IP 数据报在本路由器上所耗费的时间,
    • 若不为 0 0 0 就转发,否则就丢弃。
  • 现在以 “跳数” 为单位,路由器转发 IP 数据报时,将 IP 数据报首部中的该字段的值减 1 1 1

    • 若不为 0 0 0 就转发,否则就丢弃。

image-20230101203956310


9、生存时间 TTL 的作用

生存时间 TTL 的作用

  • 防止 IP 数据报在网络中永久兜圈

如下所示

image-20230101204328680

为了简单起见,只给出了路由表中的由人工配置的静态路由条目

例如:R2 的路由表的目的网络 N2 条目

image-20230101204451072


假设我们在人工配置这条静态路由条目时,错将下一跳 R3 配置成了 R1

  • 这将导致将去往网络 N2IP 数据报错误地转发给路由器 R1

image-20230101204626931

假设 N1 要发给 N2 IP 数据报

image-20230101213214058

若没有其他措施,IP 数据报将在路由环路中永久兜圈


10、协议字段 (8 bit)

协议字段

  • 8 8 8 比特,指明 IPv4 数据报的数据部分是何种协议数据单元。
  • 常用的一些协议和相应的协议字段值如下。

image-20230101213426030

例如:image-20230101213454788


11、首部检验和字段(16 bit)

首部检验和字段

  • 16 16 16 比特,用来检测首部在传输过程中是否出现差错。

  • CRC 检验码简单,称为因特网检验和。

IP 数据报每经过一个路由器,路由器都要重新计算首部检验和

  • 因为某些字段(生存时间、标志、片偏移等)的取值可能发生变化。

由于 IP 层本身并不提供可靠传输的服务,并且计算首部校验和是一项耗时的操作

  • 因此在 IPv6 中,路由器不再计算首部校验和,从而更快转发 IP 数据报。

image-20230101213552709


12、源 IP 地址(32 bit)和目的 IP 地址(32 bit)

源 IP 地址和目的 IP 地址

  • 各占 32 32 32 比特,用来填写发送该 IP 数据报的源主机的 IP 地址和接收该 IP 数据报的目的主机的 IP 地址。

image-20230101213810333


13、习题 ! ! \color{red}!! !!

image-20230101213919446

image-20230101214506671

image-20230101214631743


image-20230101215156058

IP 分组头中,目的 IP 地址字段前还有 16 16 16 个字节的内容

在以太网帧中,数据载荷前还有 14 14 14 个字节的内容

因此,在以太网帧中,从第 31 31 31 个字节开始的 4 4 4 个字节,实际上就是 IP 地址的内容

image-20230101215736690

题目所给的以太网数据帧的第一列数据,实际上并不是以太网帧的内容,仅仅作为行号

  • 其增量为 16 16 16 ,表示每行有 16 16 16 个字节的内容

image-20230101220027206

从图中可知,主机的默认网关就是路由器 R,主机会将 Web 请求发送给默认网关

  • 由默认网关将 Web 请求转发到因特网。

因此,以太网帧头中的目的 MAC 地址字段,封装的就是默认网关的 MAC 地址。

image-20230101220220851

4 4 4

image-20230101220304874

14、小结

image-20230101220336398

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/147374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小波分析——4.使用小波对信号成分进行分析

文章目录首先创建一个包含多频率成分的信号然后我们用数学实现一个墨西哥草帽小波然后我们开始对原始信号进行处理吧接下来可以把信号成分进行绘制在前面的章节里已经介绍过小波的理论、公式等知识点,现在我们来看看如何用小波来实现对复杂信号的成分分析。 在我们…

性能优化系列之『HTML5 离线化:主流的技术实现方案有哪些?』

文章の目录一、离线包类型二、离线包架构三、离线包下载四、离线包运行模式五、大厂离线包方案写在最后一、离线包类型 全局离线包:包含公共的资源,可供多个应用共同使用私有离线包:只可以被某个应用单独使用 二、离线包架构 三、离线包下载…

Fairness in Recommendation: A Survey 阅读笔记

论文链接 搁置了许久的毕设,又要开始重新启航。 2022年的最后一段时间过得真是很崎岖,2023希望大家平安喜乐。 课设还未结束,但是毕设不能再拖,开工啦!这又是一篇综述,有关推荐系统中的公平性,…

5.Isaac教程--创建Isaac应用

创建Isaac应用 本教程将指导您完成使用 Isaac SDK 创建机器人应用程序的过程,以视频输入的 OpenCV 边缘检测处理为例。 文章目录创建Isaac应用预安装显示相机源创建应用程序文件启用节点间通信配置组件创建 Bazel 构建文件运行应用程序查看相机源处理相机源添加边缘…

1.6日报

以redis为基础完成 addCacheData getCacheDataByUniqueId delCacheDataByUniqueId 并且测试通过。 升级getQRcodeAndScene接口,添加版本参数,实现“不同环境取不同小程序版本“功能 并添加扫码跳转页面功能。 遇到的问题及解决 加深对RequestBody…

性能优化系列之『HTTP-2 :升级HTTP-2的好处有哪些?如何升级?』

文章の目录一、HTTP/2 概念二、HTTP/2 优点三、HTTP/2 站点的优势四、在 Nginx 上启用 HTTP/21、升级 OpenSSL2、重新编译3、验证 HTTP/24、浏览器请求截图写在最后一、HTTP/2 概念 HTTP/2(超文本传输协议第2版,最初命名为 HTTP 2.0)&#x…

【Spring AOP】@Aspect结合案例详解(一): @Pointcut使用@annotation + 五种通知Advice注解

文章目录前言AOP与Spring AOPAspect简单案例快速入门一、Pointcutannotation二、五种通知Advice1. Before前置通知2. After后置通知3. AfterRunning返回通知4. AfterThrowing异常通知5. Around环绕通知总结前言 在微服务流行的当下,在使用SpringCloud/Springboot框…

分布式基础篇3——前端开发基础知识

前端技术对比一、ES61、简介2、什么是 JavaScript3、ES6新特性3.1 let3.2 const3.3 解构表达式3.4 字符串扩展3.5 函数优化3.6 对象优化3.7 map 和 reduce3.8 Promise3.9 模块化二、Vue1、MVVM 思想2、Vue 简介3、Vue 入门案例4、Vue 指令插值表达式v-text、v-htmlv-bindv-mode…

景区地图最短路径快速实现

1 前言以前粗略学习了一下在地图中实现最短路径,并在切图工具中实现了自动处理生成导航相关数据。https://blog.csdn.net/bq_cui/article/details/86795213最近发现工具实现的结果,错误一大堆。这次再详细捋一捋整个步骤,感兴趣的同学可以试一…

ctemplate 的安装和使用

ctemplate 用于linux下的web开发,可以动态生成一个html网页,这里的 “ 动态 ” 指的是网页的数据不是固定的,可以使用变量来填充网页内容。 目录 1、下载ctemplate 2、安装 ctemplate 3、使用ctemplate库 1、下载ctemplate 可以在gite…

前端对接微信公众号网页开发流程,授权对接

前面讲到 前端对接微信公众号网页开发流程,前期配置,本篇文章主要详细介绍关于公众号的授权对接。 一、引入微信js-sdk 在需要调用 JS 接口的页面引入如下 JS 文件 http://res.wx.qq.com/open/js/jweixin-1.6.0.js如需进一步提升服务稳定性&#xff0…

如何在windows上使用VMware安装macOS虚拟机

如何在windows上使用VMware安装macOS虚拟机一、准备工作1.1 安装 VMware1.2 下载macOS的安装包1.3 下载VMware虚拟机解锁安装苹果系统工具二、解锁VMware支持macOS安装2.1 关闭已经打开的VMware软件2.2 安装VMware Workstation Unlocker三、VMware创建虚拟机3.1 解压缩macOS的安…

【蓝桥杯】X 进制减法

难点一&#xff1a;base base * s[i] % mod;//***当前位乘以x&#xff0c;x要*s[i],一直要乘到个位的进制难点二&#xff1a;当当前该位的的进制位&#xff0c;为max(max(a[i]1, b[i]1), 2)的时候&#xff0c;结果最小ACcode:#include<iostream>using namespace std;con…

性能优化系列之『混合式开发: React Native内核及优势介绍』

文章の目录一、React Native愿景二、技术优势1、技术2、效率3、发版三、底层内核1、RN&#xff1a;helloWorld.jsx2、iOS&#xff1a;helloWorld.m3、Android&#xff1a;helloWorld.xml4、Web&#xff1a;helloWorld.html四、行业背景五、选型建议写在最后一、React Native愿景…

【计算机体系结构基础】指令流水线

单周期处理器 简要描述单周期处理器的执行过程&#xff1a; PC从指令存储器中读取指令 取指后译码得出相关的控制信号读取regfile&#xff08;寄存器堆&#xff09; 运算器对regfile中取出的操作数进行计算&#xff0c;将计算的结果写回通用寄存器堆或者得到访存指令的地址或…

边缘数据采集网关如何实现PLC远程上下载

边缘数据采集网关&#xff0c;又称边缘计算网关、工业物联网网关&#xff0c;是连接工业设备与通信网络的桥梁&#xff0c;可以实现不同协议之间的解析转换&#xff0c;打造高效实时的数据采集系统&#xff0c;并借助边缘计算规则对数据进行清洗过滤&#xff0c;适配云平台实现…

QT 学习笔记(十五)

文章目录一、UDP 通信过程1. Linux 下的 UDP 通信过程2. QT 下的 UDP 通信过程3. 在 QT 中实现 UDP 通信的流程4. TCP/IP 和 UDP的区别二、UDP 文本发送1. UDP 文本发送实例演示2. UDP 广播3. UDP 组播三、UDP 文本发送实现代码1. 主窗口头文件 widget.h2. 主窗口源文件 widget…

论文创新及观点

FEW-SHOT TEXT CLASSIFICATION WITH DISTRIBUTIONAL SIGNATURES 任务 Given an N-way K-shot classification task 论文设计图像 数据集 20 Newsgroups is comprised of informal discourse from news discussion forums (Lang, 1995).Documents are organized under 20 to…

数据分析-深度学习 Day2

目录&#xff1a;第一节 机器学习&深度学习介绍第二节 机器学习攻略一、机器学习的框架二、模型训练攻略三、针对Optimization Issue的优化&#xff0c;类神经网络训练不起来怎么办(一) 局部最优点和鞍点(二) 批处理和momentum(三) 自动调节学习率Learning rate(四) 损失函…

vue实现微信端和企业微信端扫码

前要&#xff1a;微信端调用微信的扫一扫和企业微信端调用企业微信的扫一扫获取订单码查询&#xff01;&#xff01; 一、微信端扫一扫 这里使用的是uniapp框架调用微信的内置sdk扫码防伪溯源&#xff01;http引入或者npm安装模块&#xff1a; //public/index.html <!DOCT…