网络层:IPv4数据报的首部格式

news2024/11/17 6:45:56

1.IPv4数据报的首部格式

笔记来源:
湖科大教书匠:IPv4数据报的首部格式

声明:该学习笔记来自湖科大教书匠,笔记仅做学习参考

下图来源:以太网MAC帧格式
IP数据报属于MAC帧的数据部分

IPv4数据报的首部格式

1.1 IP数据报首部的固定部分

1.1.1 版本

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

1.1.2 首部长度

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

1.1.3 区分服务字段(一般不使用)

用来获得更好的服务,占8比特,
利用该字段的不同数值可提供不同等级的服务质量
只有在使用区分服务时,该字段才起作用。一般情况下都不使用该字段。

1.1.4 总长度

表示IP数据报的总长度(首部+数据载荷),占16比特
最大取值为十进制的65535,以字节为单位。


总长度 = 首部长度 + 数据载荷长度


例子:
首部长度:0101
总长度:0000001111111100
下图所示为IP数据报首部格式

首部长度: = ( 0101 ) 2 × 4 = 5 × 4 = 20  Bytes =(0101)_{2}×4=5×4=20\ \text{Bytes} =(0101)2×4=5×4=20 Bytes(以4字节为单位)
总长度: ( 0000001111111100 ) 2 = 1020  Bytes (0000001111111100)_{2}=1020\ \text{Bytes} (0000001111111100)2=1020 Bytes(以字节为单位)
数据载荷长度: 1020 − 20 = 1000  Bytes 1020-20=1000\ \text{Bytes} 102020=1000 Bytes

1.1.5 用于IP数据报分片的三个字段

标识

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

标志(占3bit)

DF位MF位保留位
1表示不允许分片1表示后面还有分片
0表示允许分片0表示这是最后一个分片必须为0

片偏移

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

为什么要将IP数据报的数据载荷分片?
因为IP数据报的最大长度远远大于传输信号的数据链路的最大传输单元(MTU),可以理解为链路一下装不下那么多,所以需要将其分片,分开发送
为什么需要片偏移?
同一个IP数据报的分片标识相等,每发送一个包,标识的值就会增加,使得数据载荷部分不得不后移,偏移后原数据发生改变,为了恢复数据载荷的原数据,我们相应的往前偏移几个标识的位置后即可恢复

对IPv4数据报进行分片的例1
图中0 ~ 1399、1400 ~ 2799、2800 ~ 3799 是对每个字节的编号
对IPv4数据报进行分片的例2

1.1.6 生存时间(TTL)

现在以“跳数”为单位,路由器转发IP数据报时,将IP数据报首部中的该字段的值减1,若不为0就转发,否则就丢弃。
每转发一次TTL-1,若值为0则丢弃,其他值对其进行转发

为什么需要生存时间TTL?
防止IP数据报在网络中永久兜圈

1.1.7 协议

指明IPv4数据报的数据部分是何种协议数据单元,占8比特。

协议名称ICMPIGMPTCPUDPIPv6OSPF
协议字段值126174189


1.1.8 首部检验和

用来检测首部在传输过程中是否出现差错。比CRC检验码简单,称为因特网检验和,占16比特
IP数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段(生存时间、标志、片偏移等)的取值可能发生变化。
由于IP层本身并不提供可靠传输的服务,并且计算首部校验和是一项耗时的操作,因此在IPV6中路由器不再计算首部校验和,从而更快转发IP数据报。

1.1.9 源IP地址、目的IP地址

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

1.2 IP数据报首部的可变部分

1.2.1 可选字段(很少被使用)

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

1.2.2 填充字段

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

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

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

相关文章

VS2019编译GSL

VS2019 编译GSL 下载GSL:https://github.com/BrianGladman/gsl,此仓库带有用于编译的VS解决方案。 解压后,在 build.vc 目录下有两个解决方案: gsl.dll.sln 用于编译生成动态库gsl.lib.sln 用于编译生成静态库 请先阅读 build…

haproxy服务器对nginx服务器web服务调度负载均衡、用nfs做共享目录(脚本部署)

目录 一、准备 二、在作为haproxy的服务器上导入以下shell执行haproxy安装 三、由于nginx服务需要用的nfs共享目录,先部署nfs 四、nginx服务器1部署 五、nginx服务器2部署同上 六、测试 一、准备 四台服务器 系统IP搭建服务器centos7192.168.1.12haproxycent…

深度学习经典trick汇总

深度学习经典trick汇总 trick这个词或许有投机取巧的意味,但深度学习论文中出现的很多这个trick确实对模型更方面性能有所提高,而且它们中的很多还具有普适性,那么这种“trick“或许应该被叫做“技术”。 1. 权重衰减 θ t 1 ( 1 − ω α…

DHCP服务器

文章目录 DHCP服务器DHCP的工作原理DHCP服务器的用途DHCP协议的工作方式DHCP服务器给予客户端固定或动态的IP参数关于租约所造成的问题与租约期限多台DHCP服务器在同一物理网段的情况 何时需要架设DHCP服务器使用DHCP的时机不建议使用DHCP主机的时机 DHCP服务器端的配置所需软件…

Quantum Utility!IBM开辟“量子计算的实用时代”

光子盒研究院 今天,IBM(纽约证券交易所股票代码:IBM)宣布了一项新的突破,并发表在科学杂志《自然》的封面上。 ——团队首次证明了量子计算机可以在100多个量子比特的规模上产生精确的结果;并且至少在一种计…

Redis入门 - 基础通用指令

原文首更地址,阅读效果更佳! Redis入门 - 基础通用指令 | CoderMast编程桅杆https://www.codermast.com/database/redis/base-commind.html 在正式介绍Redis数据结构及其操作指令之前,我们需要先掌握一些最基础的通用指令。 这些都是Redis…

鸟类识别Python,基于TensorFlow卷积神经网络【实战项目】

一、介绍 鸟类识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Django框架,开发网页端操作平台,…

chatgpt赋能python:Python自动获取图片数据的方法

Python自动获取图片数据的方法 随着信息时代的到来,图像数据已经越来越重要。我们如何从互联网上获取大量的图片数据呢?Python提供了简单而直接的方法。本文将介绍如何使用Python自动获取图片数据,充分利用Python的编程能力,开展…

异常的相关知识

📢博客主页:盾山狂热粉的博客_CSDN博客-C、C语言,机器视觉领域博主📢努力努力再努力嗷~~~✨ 💡大纲 ⭕总结了python中所有可能的异常情况,有异常不一定是坏事,有提醒作用 一、常见异常 💡可以…

Midjourney命令列表Command List介绍

您可以通过键入命令与Discord上的Midjourney Bot进行交互。命令可以用来生成图像、更改默认设置、监看用户信息以及执行其他有用的任务。 Midjourney 命令可以在任何Bot Channel中使用,在允许 Midjourney Bot 运行的私有 Discord 服务器上使用,或者在与…

Java项目开发基本数据类型与封装数据类型的选择

问题 Java项目开发基本数据类型与封装数据类型的选择 详细问题 关于基本数据类型与封装数据类型的区别,作为面试经典题目已被熟知,但是,项目开发时,对于一个变量,是选择基本数据类型,还是封装数据类型&a…

【SpringBoot】SpringBoot案例 | Web后端开发

黑马2023JavaWeb的B站视频,还可以,学的大部分都是有用的东西。没有一上来还JDBC。 新建项目、更改application.properties配置: spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver spring.datasource.urljdbc:mysql://localhost:…

定时任务执行时间设置详解

目录 前提实践举例定时任务执行时间设置详解定时器包含的子表达式和对应子表达式允许的值子表达式中特殊字符含义的解释和相应示例 前提 一般在处理业务过程中,都需要在特定的时间点执行特定的任务,尤其是业务复杂且执行时间很长,业务之间关…

java中的时间

一、JDK7的类 (1)Date 时间 (2)SimpleDateFormat 格式化时间 (3)Calendar 日历 格林尼治时间(Greenwich Mean Time),简称GMT。 目前的世界标准时间(UTC)以替换…

C++的友元函数、友元类、内部类

目录 1.友元函数 1.定义 2.注意 2.友元类 1.定义 3.内部类(Java喜欢用,C不怎么用) 1.定义 特性: 1.友元函数 1.定义 1.友元函数可访问类的私有和保护成员,但不是类的成员函数。 2.友元函数不能const修饰 3.…

Rust语言从入门到入坑——(4)Rust语法(上)

文章目录 0 引入1、基础语法1.1、变量1.2、常量1.3、重影 2、数据类型2.1、整形2.2、浮点型2.3、其他2.注释与打印2.1 注释2.2、打印 3、总结 0 引入 在这里我们需要介绍Rust语法,一共分三部分,第一部分是基础语言,和C语言类比,如…

从零构建后端项目-创建SpringBoot项目配置MyBatis

目录 主体介绍 创建SpringBoot项目主要步骤 配置MyBatis 整合高级功能 创建SpringBoot项目 配置Tomcat 配置MySQL数据源 配置Redis数据源 配置MongoDB数据源 运行项目,检测配置 配置MyBatis 创建IDEA数据库连接 生成MyBatis各种文件 配置MyBatis 配…

总结902

目标规划: 月目标:6月(线性代数强化9讲,考研核心词过三遍) 周目标:线性代数强化5讲,英语背3篇文章并回诵,检测 每日规划 今日已做 1.背诵前21篇短文,默写了10篇文章。…

智能视频无损放大-Topaz Video AI

今天给各位小伙伴们测试了一款可以使视频智能无损放大的软件——Topaz Video AI。 小编在很早之前也有了解过Topaz系列的软件,都是通过人工智能处理的,对小白新手们很适用,由于使用人工智能方面的软件或程序对硬件要求都比较高,因…

离散数学题目收集整理练习(期末过关进度70%)

✨博主:命运之光 🦄专栏:离散数学考前复习(知识点题) 🍓专栏:概率论期末速成(一套卷) 🐳专栏:数字电路考前复习 🌟博主的其他文章&…