计算机网络:网络层 —— IPv4 数据报的首部格式
文章目录
- IPv4数据报的首部格式
- IPv4数据报分片
- 生存时间 TTL字段
- 协议字段
- 首部检验和字段
 
 
 
IPv4数据报的首部格式
IPv4 数据报的首部格式及其内容是实现 IPv4 协议各种功能的基础。
在 TCP/IP 标准中,各种数据格式常常以32比特(即4字节)为单位来描述
![![[IPv4数据报的首部格式.png]]](https://i-blog.csdnimg.cn/direct/3931c3a4af7143d099250dd790e12495.png)
-  固定部分:每个 IPv4 数据报都必须要包含的部分 
-  某些 IPv4 数据报的首部,除了包含 20 字节的固定部分,还包含一些可选的字段来增加 IPv4 数据报的功能 
-  版本:长度为 4 个比特,用来表示 IP 协议的版本,通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议的版本号为4(即IPv4) 
-  首部长度:长度为4个比特,该字段的取值以4字节为单位,用来表示IPv4数据报的首部长度(总是4的整数倍)。 -  最小取值为二进制的 0101,即十进制的5,再乘以4字节单位,表示IPv4数据报首部只有20字节固定部分。
-  最大取值为二进制的 1111,即十进制的15,再乘以4字节单位,表示IPv4数据报首部包含20字节固定部分和最大40字节可变部分。
 
-  
-  可选字段:长度从1字节到40字节不等,用来支持排错测量以及安全措施等功能。虽然可选字段增加了 IPv4 数据报的功能,但这同时也使得 IPv4 数据报的首部长度成为可变的,这就增加了因特网中每一个路由器处理 IPv4 数据报的开销。实际上,可选字段很少被使用。 
-  填充:用来确保 IPv4 数据报的首部长度是4字节的整数倍,使用全0进行填充。当首部长度(20字节固定部分+可变部分)的长度不是 4字节 整数倍时,填充相应数量的全0字节,以确保 IPv4 数据报的首部长度是 4字节 的整数倍。 
-  区分服务:长度为 8 个比特,用来获得更好的服务该字段在旧标准中叫作服务类型,但实际上一直没有被使用过。1998年,因特网工程任务组IETF把这个字段改名为区分服务。利用该字段的不同取值可提供不同等级的服务质量。只有在使用区分服务时该字段才起作用,一般情况下都不使用该字段。 
-  总长度:长度为16个比特,该字段的取值以字节为单位,用来表示IPv4数据报的长度(首部长度+数据载荷长度)。最大取值为二进制的 16 个比特1,即十进制的65535(很少传输这么长的IPv4数据报) 
-  源IP地址:长度为32比特,用来填写发送 IPv4 数据报的源主机的 IPv4 地址。 
-  目的IP地址:长度为32比特,用来填写接收 IPv4 数据报的目的主机的 IPv4 地址。 
IPv4数据报分片
IPv4 数据报中的标识、标志、片偏移部分,共同用于IPv4数据报分片
![![[IPv4数据报分片.png]]](https://i-blog.csdnimg.cn/direct/0edac863c01945b281422e490e001d98.png)
当 IPv4 数据报长度超过 MTU(最大传输单元,Maximum Transmission Unit) 时,无法封装成帧,需要将原 IPv4 数据报分片为若干个更小的IPv4数据报,再将分片后的IPv4数据报封装成帧。
-  标识:长度为 16 个比特,属于同一个IPv4数据报的各分片数据报应该具有相同的标识。IP 软件会维持一个计数器,每产生一个 IPv4 数据报,计数器值就加1,并将此值赋给标识字段。 
-  标志: -  最低位(More Fragment, MF)- MF = 1,表示本分片后面还有分片
- MF = 0,表示本分片后面没有分片
 
-  中间位(Don’t Fragment, DF)- DF= 1,表示不允许分片
- DF= 0,表示允许分片
 
-  最高位为保留位,必须设置为0 
 
-  
-  片偏移:长度为13个比特,该字段的取值以8字节为单位,用来指出分片IPv4数据报的数据载荷偏移其在原IPv4数据报的位置有多远。 
某个 IPv4 数据报总长度为 3820 字节,采用 20 字节固定首部,根据数据链路层要求,需要将该 IPv4 数据报分片为长度不超过 1420 字节的数据报片:
![![[IPv4数据报分片例.png]]](https://i-blog.csdnimg.cn/direct/4ee64d4d1f994d73958a4d5f40ddca0e.png)
-  确定原始数据报的大小:原始 IPv4 数据报的总长度是 3820 字节。其中包括 20 字节的 IP 首部。 
-  计算有效载荷的大小:有效载荷的大小 = 总长度 - IP首部长度 = 3820 - 20 = 3800 字节。 
-  确定每个分片的最大大小:根据题目要求,每个分片的大小不能超过 1420 字节。每个分片包含 20 字节的 IP 首部和最多 1400 字节的有效载荷。 
-  计算所需的分片数量: - 第一分片:从第 0 到第 1399 字节(共1400字节)
- 第二分片:从第 1400 到第 2799 字节(共1400字节)
- 第三分片:从第 2800 到第 3799 字节(共1000字节)
 
-  设置分片信息: -  分片标识 (Identification):保持不变,设为 23333。 
-  MF标志位 (More Fragments):除最后一个分片外的所有分片都设为1,表示还有更多分片。最后一个分片设为0。 
-  DF标志位 (Don’t Fragment):所有分片都设为0,因为已经进行了分片操作。 
-  片偏移 (Fragment Offset):以8字节为单位,第一个分片为0,第二个分片为 1400 8 = 175 \frac{1400}8 = 175 81400=175 第三个分片为 2800 8 = 350 \frac{2800}8 = 350 82800=350。 
 
-  
-  总结分片信息: 
| 分片编号 | 总长度(字节) | 标识 | MF | DF | 片偏移 | 
|---|---|---|---|---|---|
| 1 | 20 + 1400 | 23333 | 1 | 0 | 0 | 
| 2 | 20 + 1400 | 23333 | 1 | 0 | 175 | 
| 3 | 20 + 1000 | 23333 | 0 | 0 | 350 | 
通过以上步骤,我们可以将原始的 3820 字节 IPv4 数据报成功地分成三个符合要求的分片。
生存时间 TTL字段
生存时间(Time To Live,TTL):长度为 8 个比特,最大取值为二进制的11111111,即十进制的 255。该字段的取值最初以秒为单位。因此,IPv4 数据报的最大生存时间最初为 255 秒。路由器转发 IPv4 数据报时,将其首部中该字段的值减去该数据报在路由器上所耗费的时间,若结果不为 0 就转发,否则就丢弃。
生存时间字段后来改为以“跳数”为单位,路由器收到待转发的IPv4数据报时,将其首部中的该字段的值减1,若结果不为0就转发,否则就丢弃。
生存时间字段可以防止被错误路由的IPv4数据报无限制地在因特网中兜圈。
![![[生存时间 TTL字段.png]]](https://i-blog.csdnimg.cn/direct/e9c4dcc3ddd84f98b46a5d6a1f751fb5.png)
协议字段
协议:长度为8个比特,用来指明 IPv4 数据报的数据载荷是何种协议数据单元PDU。
常用的一些协议和相应的协议字段值
| 协议名称 | 协议字段值 | 
|---|---|
| ICMP | 1 | 
| IGMP | 2 | 
| TCP | 6 | 
| UDP | 17 | 
| IPv6 | 41 | 
| OSPF | 89 | 
首部检验和字段
首部检验和:长度为16个比特,用于检测 IPv4 数据报在传输过程中其首部是否出现了差错。IPv4数据报每经过一个路由器,其首部中的某些字段的值(例如生存时间 TTL、标志以及片偏移等)都可能发生变化,因此路由器都要重新计算一下首部检验和。
首部检验和的计算方法:
![![[首部检验和的计算方法.png]]](https://i-blog.csdnimg.cn/direct/de2020019aed43809d1d5cc673216a80.png)
上述检验和的计算方法不仅用于IP协议,还用于运输层的用户数据报协议 UDP 和传输控制协议 TCP,常被称为因特网检验和(Internet Checksum)。这种检验和的检错性能虽然不如 CRC 循环冗余校验,但更易用软件实现。
首部检验和计算的重点在于二进制反码求和的运算,两个数进行二进制反码求和的运算规则是从低位到高位逐列进行计算:
- 0 和 0 相加是 0
- 0 和 1 相加是 1
- 1 和 1 相加是 0,但要产生一个进位 1,加到下一列
- 若最高位相加后产生进位,则最后得到的结果要加 1
- 将最终结果取反码,得到检验和。
由于网际层并不向其高层提供可靠传输的服务,并且计算首部检验和是一项耗时的操作,因此在 IPv6 中,路由器不再计算首部检验和,从而更快转发IP数据报。
相关文章:
 
计算机网络:网络层 —— IPv4 数据报的首部格式
文章目录 IPv4数据报的首部格式IPv4数据报分片生存时间 TTL字段协议字段首部检验和字段 IPv4数据报的首部格式 IPv4 数据报的首部格式及其内容是实现 IPv4 协议各种功能的基础。 在 TCP/IP 标准中,各种数据格式常常以32比特(即4字节)为单位来描述 固定部分&#x…...
MySQL 之 索引
索引 概述 是帮助MySQL高效获取数据的数据结构,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在数据结构上实现高效查找算法,这种…...
 
手动探针台的用途及组成部分
探针台系统分为手动探针台与自动探针台,以下我们主要分析手动探针台。 探针台用途: 手动探针台又称探针测试台主要用途是为半导体芯片的电参数测试提供一个测试平台,探针台可吸附多种规格芯片,并提供多个可调测试针以及探针座&am…...
❤️算法笔记❤️-(每日一刷-5、最长回文串)
文章目录 题目思路解答 题目 给你一个字符串 s,找到 s 中最长的 回文 子串。 示例 1: 输入:s "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。示例 2: 输入…...
nginx 路径匹配,关于“/“对规则的影响
1、基本规则 假如后端实际地址为: http://127.0.0.1:8080/api/user/getById?id123 则: 1)通过nginx转发,使用http://127.0.0.1/api/user/getById?id123访问 server {listen 80;server_name 127.0.0.1;location /api…...
安全知识见闻-网络安全热门证书
一、OSCP(Offensive Security Certified Professional) 1. 证书介绍 2.考点 3.部分考试要求 4.练习方法 二、OSEP(Offensive Security Exploit Developer) 1.证书介绍 2.考点 3.练习方法 三、CISSP(Certified lnformation Systems Security Professional&a…...
Pandabuy事件警示:反向海淘品牌如何规避风险
Pandabuy,作为一个曾经备受海外消费者青睐的跨境电商平台,以其丰富的商品种类、优质的服务和便捷的购物流程迅速崛起。然而,近期的一系列丑闻,尤其是涉嫌销售大量仿制名牌运动鞋的事件,让Pandabuy陷入了前所未有的信任…...
 
【纯血鸿蒙】安装hdc工具
这里我先写Mac版的,Windows的在下面 首先要知道你的SDK安装在哪里了,不知道的话,可以打开DevEco Studio,打开设置页面里的HarmonyOS SDK,这个我们之前配置环境变量的时候用过。 其实主要是用到这里toolchains下的hdc命令。 所以我们需要配置环境变量。 1、打开Mac下的…...
TensorFlow面试整理-给定一个任务(如图像分类、文本分类),如何从头构建一个TensorFlow模型?
构建一个 TensorFlow 模型来执行图像分类或文本分类任务的步骤基本类似,虽然数据类型不同,但核心流程相同。以下将以 图像分类任务 和 文本分类任务 为例,展示如何从头构建 TensorFlow 模型,覆盖数据预处理、模型构建、编译、训练和评估的完整流程。 一、图像分类任务:从头…...
 
unity中出现一些莫名其妙的问题
问题现象:一个功能昨天测试还正常的今天突然不能用了,而且关于这个功能的代码都没调整过。 原因:相关逻辑上存在异常代码,可能是别人提交的代码运行中有异常未处理导致 处理办法:解决异常 查找哪些位置使用了该异常脚本…...
Python爬虫-汽车投诉排行榜单数据
前言 本文是该专栏的第40篇,后面会持续分享python爬虫干货知识,记得关注。 本文以某汽车平台为例,通过python采集其“汽车投诉排行”榜单数据。具体的实现思路以及完整实现代码逻辑,笔者将在正文为你详细介绍。废话不多说,跟着笔者直接往下看正文详细内容。(附带完整代码…...
 
[C++][数据结构][哈希表]详细讲解
目录 1. 哈希概念 2.哈希冲突 3.哈希函数 4.哈希冲突解决 4.1闭散列 4.1.1何时扩容?如何扩容? 4.1.2线性探测 4.1.3二次探测 4.2开散列(哈希桶) 4.2.1概念 4.2.2开散列增容 1. 哈希概念 顺序结构以及平衡树中,元素关键码与其存储…...
 
Android Gradle
#1024程序员节|征文# Gradle 是一款强大的自动化构建工具,广泛应用于 Android 应用开发。它通过灵活的配置和丰富的插件系统,为项目构建提供了极大的便利。本文只是简单的介绍 Gradle 在 Android 开发中的使用,包括其核心概念、构…...
 
Vue2自定义指令及插槽
这里写目录标题 自定义指令基础语法指令的值封装v-loading指令 插槽默认插槽后备内容(插槽的默认值)具名插槽作用域插槽 自定义指令 自定义指令:自己定义的指令,封装一些dom操作,扩展额外功能 基础语法 全局注册&am…...
 
【Qt】系统相关——多线程、Qt多线程介绍、常用函数、线程安全、网络、UDP Socket、TCP Socket
文章目录 Qt系统相关1. 多线程1.1 Qt多线程介绍1.2 常用函数1.3 线程安全 2. 网络2.1 UDP Socket2.2 TCP Socket Qt 系统相关 1. 多线程 1.1 Qt多线程介绍 QThread 代表一个在应用程序中可以独立控制的线程,它还可以和进程中的其他线程共享数据。QThread 对象管理…...
 
1GS/s 4通道14bit PCIE采集卡
1GS/s 4通道14bit PCIE采集卡是一款同时具备直流耦合程控放大器和双极性宽带信号输入的高速数据采集卡。板载FPGA具备实时信号处理能力,这些特性使其成为激光雷达、光纤传感、粒子物理等应用领域进行信号采集和分析的理想工具。提供快速的PCI Express 3.0 x8数据传输…...
 
动态IP是什么?
随着互联网成为人们生活的重要组成部分,以信息传递为主导的时代种,网络连接质量对我们的工作效率、学习进度以及娱乐体验等方面都有很大影响。 动态IP,作为网络连接中的一种重要IP代理形式,越来越受到用户的欢迎。本文将深入解析…...
 
51单片机完全学习——红外遥控
一、红外接收模块原理 红外接收头内部本身有一个反相,意思就是:平时发送方无信号时接收到的是1,发送方有发送载波时接收头引脚输出的是0,写代码的时候注意这一点。红外协议,你也可以理解成,他对0和1重新做…...
 
群控系统服务端开发模式-应用开发-业务架构逻辑开发BaseAPI
一、加密工具开发 首先在根目录下extend文件中创建Encipher文件夹,用于专门开发加解密工具,新建RSA算法控制器并命名为Encrypt.php。然后在根目录下config文件夹中创建rsa.php文件,用于配置RSA算法参数。 1、秘钥生成算法 <?php /*** RS…...
【AI日记】24.10.27 了解AI的未来
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 工作1 内容:挑选AI大佬的访谈,跳着看了几个时间:2小时 工作2 内容:OpenAI Sam Altman最新访谈:GPT-4o和AI未来 2024.5时间:2小时收…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
 
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
 
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
 
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
 
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
