网络工程师 (43)IP数据报

前言

       IP数据报是互联网传输控制协议(Internet Protocol,IP)的数据报格式,由首部和数据两部分组成。

一、首部

       IP数据报的首部是控制部分,包含了数据报传输和处理所需的各种信息。首部可以分为固定部分和可变部分。

  1. 固定部分

    • 版本:占4位,指IP协议的版本。目前广泛使用的协议版本号为4(即IPv4)。通信双方的协议版本必须一致。
    • 首部长度:占4位,表示数据报首部的长度。因首部长度可表示的最大数值是15个单位(每单位为4字节),所以IP的首部长度的最大值为60字节。
    • 区分服务:占8位,表示对数据报的服务要求。该字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用。其中,前三位表示优先级(0~7,0最低),D、T、R和C分别表示对时延、吞吐量、可靠性和路由服务费用有选择的要求。最后一位未用。
    • 总长度:占16位,指整个数据报(包括首部和数据)的长度,单位为字节。数据报的最大长度为65535字节(64KB)。这个字段很重要,因为数据报在传输过程中需要被封装成链路层的帧,而帧有自己的最大传输单元MTU(Maximum Transfer Unit)。如果数据报的总长度超过了MTU,那么就需要对数据报进行分片。
    • 标识:占16位,用于数据报各分片最终被重装成原来的数据报。它是一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。目的主机将相同标识字段值的各分片数据报最后进行正确地重装(合片)。
    • 标志:占3位,但只有后两位有意义。最低位记作MF(More Fragment),MF=1表示后面“还有分片”,MF=0表示已是最后一个分片。次低位是DF(Don't Fragment),用来控制是否允许数据报分片。只有DF=0才允许分片。
    • 片偏移:占13位,指较长的分组在分片后某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始,以便目的主机重装数据报。片偏移以8个字节为偏移单位,即每个分片的长度一定是8字节(64位)的整数倍。
    • 生存时间:占8位,记为TTL(Time To Live),表示该数据所在网络中的寿命。其单位最初是秒,但为了方便,现在都用“跳数”作为TTL的单位。数据报每经过一个路由器,其TTL值就减1,当TTL值减为零时,就丢弃这个数据报。
    • 协议:占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。
    • 首部检验和:占16位,这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。
    • 源地址:占32位,表示数据报的发送方地址。
    • 目的地址:占32位,表示数据报的接收方地址。
  2. 可变部分

    • 可变部分是一个可选字段,其长度可变,从1个字节到40个字节不等,取决于所选择的项目。选项字段用来支持排错、测量以及安全等措施,内容很丰富。此字段包括安全和处理限制(用于军事领域)、记录路径(让每个路由器都记下它的IP地址)、时间戳(让每个路由器都记下IP数据报经过每一个路由器的IP地址和当地时间)、宽松的源站路由(Loose Source Route)(为数据报指定一系列必须经过的IP地址)以及严格的源站路由(Strict Source Route)(与宽松的源站路由类似,但是要求只能经过指定的这些地址,不能经过其他的地址)等。
    • 增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的,增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用,新的IP版本IPv6就将IP数据报的首部长度做成固定的。

二、数据部分

       数据部分是高层需要传输的数据。在IP数据报中,数据部分紧跟在首部之后,其长度由总长度字段减去首部长度字段得到。

三、IP数据报的工作原理

  1. 封装与发送:在源主机上,传输层的数据交给IP协议后,IP协议要在其前面加上一个IP报头(即首部),用于控制对数据的转发和处理等。然后,通过地址解析协议ARP将目的IP地址映射为物理地址,把IP数据报嵌入数据链路层帧中,交由数据链路层完成将其发送到网络上的工作。

  2. 寻址与路由:当IP数据报在网间穿行时,网络上的IP协议需要对它进行寻址和路由选择,以使其正确到达目的地。

  3. 分段与重组

    • 分段:如果一个路由器收到一个IP数据报,其长度对下一个物理网络来讲太长,那么就由IP协议将它分成若干个段。分段可以在任何需要的中间路由器上进行。在IP报头中,用标识符、标志和片偏移三个字段来实现对报文的分段。
    • 重组:当这些分段到达目的主机时,由端系统中的IP层将其重组成源IP数据报,然后传至传输层处理。
  4. 流量控制:IP层还提供初步的流量控制。如果由于IP分组到达主机或路由器太快而被丢弃时,IP层就会发送一个ICMP源抑制报文给发送端,告诉它数据发得太快了。

 结语        

每一个心灵的闪光瞬间

都是对生活的深深热爱与感悟

!!!

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

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

相关文章

【SpringBoot苍穹外卖】debugDay0 打开前端页面

在某一天学完后,电脑关机,再打开啥都忘了,记起来一点点,前端页面打不开,后端控制台一直循环出错。原来是下面这样哈哈。 查看端口是否被别的程序占用的操作步骤 winR输入cmd打开命令行 netstat -ano | findstr "8…

docker 运行 芋道微服务

jar包打包命令 mvn clean install package -Dmaven.test.skiptrue创建文件夹 docker-ai 文件夹下放入需要jar包的文件夹及 docker-compose.yml 文件 docker-compose.yml 内容:我这里的是ai服务,所以将原先的文件内容做了变更,你们需要用到什…

MySQL-事务隔离级别

事务有四大特性(ACID):原子性,一致性,隔离性和持久性。隔离性一般在事务并发的时候需要保证事务的隔离性,事务并发会出现很多问题,包括脏写,脏读,不可重复读,…

【MediaTek】 T750 openwrt-23.05编 cannot find dependency libexpat for libmesode

MediaTek T750 T750 采用先进的 7nm 制程,高度集成 5G 调制解调器和四核 Arm CPU,提供较强的功能和配置,设备制造商得以打造精巧的高性能 CPE 产品,如固定无线接入(FWA)路由器和移动热点。 MediaTek T750 平台是一款综合的芯片组,集成了 5G SoC MT6890、12nm 制程…

五十天精通硬件设计第32天-S参数

系列文章传送门 50天精通硬件设计第一天-总体规划-CSDN博客 目录 1. S参数基础 2. S参数在信号完整性中的作用 3. 单端 vs. 差分S参数 4. S参数的关键特性 5. S参数的获取与使用 6. S参数分析中的常见问题 7. 实际案例:PCIe通道分析 8. 工具推荐 总结 信号完整性中…

pytest asyncio 支持插件 pytest-asyncio

pytest 是 Python 测试框架,但其不支持基于 asyncio 的异步程序(例如,测试 FastAPI 异步代码),pytest-asyncio 是一个 pytest 插件,该插件赋予 pytest 可以测试使用 asyncio 库代码的能力。 https://github…

Transformer以及BERT阅读参考博文

Transformer以及BERT阅读参考博文 Transformer学习: 已有博主的讲解特别好了: 李沐:Transformer论文逐段精读【论文精读】_哔哩哔哩_bilibili知乎:Transformer模型详解(图解最完整版) - 知乎 个人杂想&…

分享一款AI绘画图片展示和分享的小程序

🎨奇绘图册 【开源】一款帮AI绘画爱好者维护绘图作品的小程序 查看Demo 反馈 github 文章目录 前言一、奇绘图册是什么?二、项目全景三、预览体验3.1 截图示例3.2 在线体验 四、功能介绍4.1 小程序4.2 服务端 五、安装部署5.1 快速开始~~5.2 手动部…

【R语言】回归分析与判别分析

一、线性回归分析 1、lm()函数 lm()函数是用于拟合线性模型(Linear Models)的主要函数。线性模型是一种统计方法,用于描述一个或多个自变量(预测变量、解释变量)与因变量(响应变量)之间的关系…

Visual Studio Code支持WSL,直接修改linux/ubuntu中的文件

步骤1 开始通过 WSL 使用 VS Code | Microsoft Learn 点击远程开发扩展包。 步骤2 Remote Development - Visual Studio Marketplace 点击install, 允许打开Visual Studio Code。 步骤3 共有4项,一齐安装。 步骤4 在WSL Linux(Ubuntu)中&#xf…

Unreal5从入门到精通之如何在 C++ 中创建 UserWidget

文章目录 前言UUserWidget 子类示例创建我们的 C++ 类的新蓝图子类更改现有蓝图的父类现在我们有了 C++ 基类,下一步做什么?蓝图还是 C++?结论前言 在之前的教程中,我展示了如何在编辑器中创建 UserWidget 蓝图, 在本教程中,我们将创建一个新的基于 C++ 的子类UUserWid…

利用雪花算法+Redis 自增 ID,生成订单号

在我们的项目中,我们需要定义一些全局唯一的 ID,比如订单号,支付单号等等。 这些ID有以下几个基本要求: 1、不能重复 2、不可被预测 3、能适应分库分表 为了生成一个这样一个全局的订单号,自定义了一个分布式 ID …

下载安装运行测试开源vision-language-action(VLA)模型OpenVLA

1. 安装 项目官网OpenVLA 首先按照官网提示的以下代码,执行创建环境->安装最小依赖->git克隆项目等 # Create and activate conda environment conda create -n openvla python3.10 -y conda activate openvla# Install PyTorch. Below is a sample comma…

Postman接口测试的cookie,token,session....鉴权

在接口测试过程中,常常需要进行Cookie、Token或Session等鉴权操作。Postman是一种流行的API开发环境,可以使用其自带的功能来进行这些鉴权操作。 下面是关于Postman接口测试中Cookie、Token和Session鉴权的详细介绍。 Cookie鉴权 在Postman中使用Cook…

深度学习机器学习:常用激活函数(activation function)详解

目录 Sigmoid Function ReLU(Rectified Linear Unit) LeakyReLU(Leaky Rectified Linear Unit) ClippedReLU(Clipped Rectified Linear Unit) PRelu(Parametric ReLU) Tanh&am…

使用llama.cpp在gpu和cpu上运行deepseek-r1 7b的性能对比

使用deepseek-r1 7b模型的q5km量化版本进行测试, gpu上的token解码速度是cpu的近8倍. 测试环境: ubuntu22.04 x86llama.cpp cpu intel 10750h 4.41 tokens / s model size params backend threads test t/s qwen2 7B Q5_K - Medium 5.07 GiB 7.62 B CPU 6 pp512 …

MVC模式和MVVM模式

目录 一、MVC模式和MVVM模式 1. MVC模式 2. MVVM 模式 3.在Qt中的应用示例 4.总结 二、MVC与MVVM模式的共同点和区别 1.共同点 2.区别 3.交互流程 4.总结 MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)是两种…

Numpy简易入门

1.1 认识Numpy数组对象 1.1.1 导入NumPy工具包 #导包并起别名为np import numpy as np1.1.2 创建一个三行五列的数组 data np.arange(15).reshap(3, 5)打印结果&#xff1a; 1.1.3 查询data类型 print(type(data))打印结果&#xff1a; <class numpy.ndarray> nda…

Java中的Spliterator与并行计算

在Java编程中&#xff0c;Spliterator是一个强大的接口&#xff0c;它为集合和数组等数据结构提供了并行处理的能力。Spliterator的设计目标是支持高效并行遍历&#xff0c;同时兼容传统的迭代器模式。本文将详细介绍Spliterator的使用方法&#xff0c;并通过实例展示其在并行计…

Jenkins 新建配置 Freestyle project 任务 六

Jenkins 新建配置 Freestyle project 任务 六 一、新建任务 在 Jenkins 界面 点击 New Item 点击 Apply 点击 Save 回到任务主界面 二、General 点击左侧 Configure Description&#xff1a;任务描述 勾选 Discard old builds Discard old builds&#xff1a;控制何时…