计算机网络:网络层 —— IPv4 数据报的首部格式

文章目录

      • IPv4数据报的首部格式
        • IPv4数据报分片
        • 生存时间 TTL字段
        • 协议字段
        • 首部检验和字段

IPv4数据报的首部格式

IPv4 数据报的首部格式及其内容是实现 IPv4 协议各种功能的基础。

TCP/IP 标准中,各种数据格式常常以32比特(即4字节)为单位来描述

![[IPv4数据报的首部格式.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]]

当 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]]

  1. 确定原始数据报的大小:原始 IPv4 数据报的总长度是 3820 字节。其中包括 20 字节的 IP 首部。

  2. 计算有效载荷的大小有效载荷的大小 = 总长度 - IP首部长度 = 3820 - 20 = 3800 字节。

  3. 确定每个分片的最大大小:根据题目要求,每个分片的大小不能超过 1420 字节。每个分片包含 20 字节的 IP 首部和最多 1400 字节的有效载荷。

  4. 计算所需的分片数量

    • 第一分片:从第 0 到第 1399 字节(共1400字节)
    • 第二分片:从第 1400 到第 2799 字节(共1400字节)
    • 第三分片:从第 2800 到第 3799 字节(共1000字节)
  5. 设置分片信息

    • 分片标识 (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

  6. 总结分片信息

分片编号总长度(字节)标识MFDF片偏移
120 + 140023333100
220 + 14002333310175
320 + 10002333300350

通过以上步骤,我们可以将原始的 3820 字节 IPv4 数据报成功地分成三个符合要求的分片。

生存时间 TTL字段

生存时间(Time To Live,TTL):长度为 8 个比特,最大取值为二进制的11111111,即十进制的 255。该字段的取值最初以秒为单位。因此,IPv4 数据报的最大生存时间最初为 255 秒。路由器转发 IPv4 数据报时,将其首部中该字段的值减去该数据报在路由器上所耗费的时间,若结果不为 0 就转发,否则就丢弃。

生存时间字段后来改为以“跳数”为单位路由器收到待转发的IPv4数据报时,将其首部中的该字段的值减1,若结果不为0就转发,否则就丢弃

生存时间字段可以防止被错误路由的IPv4数据报无限制地在因特网中兜圈

![[生存时间 TTL字段.png]]

协议字段

协议长度为8个比特,用来指明 IPv4 数据报的数据载荷是何种协议数据单元PDU

常用的一些协议和相应的协议字段值

协议名称协议字段值
ICMP1
IGMP2
TCP6
UDP17
IPv641
OSPF89
首部检验和字段

首部检验和长度为16个比特,用于检测 IPv4 数据报在传输过程中其首部是否出现了差错。IPv4数据报每经过一个路由器,其首部中的某些字段的值(例如生存时间 TTL、标志以及片偏移等)都可能发生变化,因此路由器都要重新计算一下首部检验和。

首部检验和的计算方法:

![[首部检验和的计算方法.png]]

上述检验和的计算方法不仅用于IP协议,还用于运输层的用户数据报协议 UDP 和传输控制协议 TCP,常被称为因特网检验和(Internet Checksum)。这种检验和的检错性能虽然不如 CRC 循环冗余校验,但更易用软件实现。

首部检验和计算的重点在于二进制反码求和的运算,两个数进行二进制反码求和的运算规则是从低位到高位逐列进行计算:

  • 0 和 0 相加是 0
  • 0 和 1 相加是 1
  • 1 和 1 相加是 0,但要产生一个进位 1,加到下一列
  • 若最高位相加后产生进位,则最后得到的结果要加 1
  • 将最终结果取反码,得到检验和。

由于网际层并不向其高层提供可靠传输的服务,并且计算首部检验和是一项耗时的操作,因此在 IPv6 中,路由器不再计算首部检验和,从而更快转发IP数据报

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java_Springboot核心配置详解

Spring Boot以其简洁、高效和约定优于配置的理念,极大地简化了Java应用的开发流程。在Spring Boot中,核心配置是应用启动和运行的基础。本文将详细介绍Spring Boot中的两种配置文件格式、基础注解的配置方式、自定义配置以及多环境配置。 一、Spring Bo…

【GESP】C++一级知识点研究,cout和printf性能差异分析

一道简单循环输出练习题(BCQM3148,循环输出),由于cout的代码超时问题,让我注意到二者在使用上的差异,遂查阅研究如下。 全文详见:https://www.coderli.com/gesp-knowledge-cout-printf/【GESP】C一级知识点研究&#…

【网络安全】揭示 Web 缓存污染与欺骗漏洞

未经许可,不得转载。 文章目录 前言污染与欺骗Web 缓存污染 DoS1、HTTP 头部超大 (HHO)2、HTTP 元字符 (HMC)3、HTTP 方法覆盖攻击 (HMO)4、未键入端口5、重定向 DoS6、未键入头部7、Host 头部大小写规范化8、路径规范化9、无效头部 CP-DoS10、HTTP 请求拆分Web 缓存污染与有害…

《数字图像处理基础》学习03-图像的采样

在之前的学习中我已经知道了图像的分类:物理图像和虚拟图像。《数字图像处理基础》学习01-数字图像处理的相关基础知识_图像处理 数字-CSDN博客 目录 一,连续图像和离散图像的概念 二,图像的采样 1, 不同采样频率采样同一张图…

微服务实战系列之玩转Docker(十七)

导览 前言Q:如何实现etcd数据的可视化管理一、创建etcd集群1. 节点定义2. 集群成员2.1 docker ps2.2 docker exec2.3 etcdctl member list 二、发布数据1. 添加数据2. 数据共享 三、可视化管理1. ETCD Keeper入门1.1 简介1.2 安装1.2.1 定义compose.yml1.2.2 启动ke…

MobileNetv2网络详解

背景: MobileNet v1中DW卷积在训练完之后部分卷积核会废掉,大部分参数为“0” MobileNet v2网络是由Google团队在2018年提出的,相比于MobileNet v1网络,准确率更高,模型更小 网络亮点: Inverted Residu…

巨好看的登录注册界面源码

展示效果 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"widthdevic…

机械臂建模之DH表

本文配图 取自哔哩哔哩机器人学视频 林沛群老师的PPT 机械臂几何直观描述 首先要知道DH表中四个参数的含义&#xff1a; 对于 a 、 α 、 d 、 θ i a、 \alpha 、 d 、 \theta_i a、α、d、θi​ 四个参数&#xff0c;上图采用MDH的方式&#xff0c;对于一个轴的这四个参数&a…

Flink CDC系列之:学习理解核心概念——Data Pipeline

Flink CDC系列之&#xff1a;学习理解核心概念——Data Pipeline 数据管道sourcesink管道配置Table IDroutetransform案例 数据管道 由于 Flink CDC 中的事件以管道方式从上游流向下游&#xff0c;因此整个 ETL 任务被称为数据管道。 管道对应于 Flink 中的一系列操作。 要描…

Git 本地操作(2)

会以下操作就可以完成本地的版本控制了&#xff0c;就不需要再复制文件每次改一个东西就复制整个工程保存下来啦&#xff01; 建议先看上一篇文章噢 &#xff01;&#xff01;&#xff01; 一、新建项目git本地操作 1、初始化仓库 创建一个 project 文件夹&#xff0c;将需…

Python Requests 的高级使用技巧:应对复杂 HTTP 请求场景

介绍 网络爬虫&#xff08;Web Crawler&#xff09;是自动化的数据采集工具&#xff0c;用于从网络上提取所需的数据。然而&#xff0c;随着反爬虫技术的不断进步&#xff0c;很多网站增加了复杂的防护机制&#xff0c;使得数据采集变得更加困难。在这种情况下&#xff0c;Pyt…

Linux中NFS配置

文章目录 一、NFS介绍1.1、NFS的工作流程1.2、NFS主要涉及的软件包1.3、NFS的主要配置文件 二、安装NFS2.1、更新yum2.2、安装NFS服务2.3、配置NFS服务器2.4、启动NFS服务2.5、配置防火墙&#xff08;如果启用了防火墙&#xff0c;需要允许NFS相关的端口通过&#xff09;2.6、生…

MATLAB发票识别系统

课题介绍 该课题为基于MATLAB的发票识别系统。主要识别发票的编号。可定做发票的日期&#xff0c;金额等字段的识别。通过输入图片&#xff0c;校正&#xff0c;定位目标区域&#xff0c;分割&#xff0c;字符分割&#xff0c;模板匹配识别&#xff0c;得出结果。整个设计包含…

前端拖拽库方案之react-beautiful-dnd

近期&#xff0c;知名 React 拖拽库 react-beautiful-dnd 宣布了项目弃用的决定&#xff0c;未来将不再维护。这一决定源于其存在的缺陷与局限性&#xff0c;促使作者转向开发一个更加现代化的拖拽解决方案——Pragmatic drag and drop&#xff08;下面会介绍&#xff09;&…

Rust 力扣 - 643. 子数组最大平均数 I

文章目录 题目描述题解思路题解代码题解链接 题目描述 题解思路 我们遍历长度为k的窗口&#xff0c;我们只需要记录窗口内的最大和即可&#xff0c;遍历过程中刷新最大值 结果为窗口长度为k的最大和 除以 k 题解代码 impl Solution {pub fn find_max_average(nums: Vec<…

Linux——五种IO模型

目录 一IO基本理解 二五种IO模型 1五种IO模型示意图 2同步IO和异步IO 二非阻塞IO 1fcntl 2实现非阻塞IO 三多路复用 1select 1.1定位和作用 1.2介绍参数 1.3编写多路复用代码 1.4优缺点 2poll 2.1作用和定位 2.2介绍参数 2.3修改select代码 3epoll 3.1介绍…

php解密,sg11解密-sg15解密 如何由sourceGuardian11-sourceGuardian15加密(sg11加密~sg15加密)的源码

sg11加密~sg11加密的PHP文件运行需安装SG11加密-SG15加密组件使用、支持WINDOW及LINUX各版本 sg11解密(SourceGuardian)-sg15解密(SourceGuardian)&#xff0c;号称目前最安全的组件加密已可以解密&#xff0c;解密率99.9%&#xff0c;基本可以直接使用&#xff0c;代码特征是…

Jetson OrinNX平台CSI相机导致cpu load average升高问题调试

1. 前言 硬件: Orin NX JP: 5.1.2, R35.4.1 用v4l2-ctl --stream-mmap -d0 命令去获取相机数据时, 用top查看cpu使用情况, CPU占用率很低,但load average在1左右, 无任何程序运行时,load average 为0 用ps -aux 查看当前进程情况,发现有两个系统进程vi-output, …

qt QIcon详解

1、概述 QIcon是Qt框架中的一个类&#xff0c;专门用于处理和显示图标。它提供了灵活的接口&#xff0c;支持从多种来源加载图标&#xff0c;如文件、资源或系统主题&#xff0c;并且支持多种图像格式&#xff0c;如PNG、JPEG、SVG等。QIcon类能够与Qt中的各种控件&#xff08…