IP数据报

news2025/4/21 22:36:50

 IP数据报组成

IP数据报(IP Datagram)是网络中传输数据的基本单位。

IP数据报头部

版本(Version)

4bit

告诉我们使用的是哪种IP协议。IPv4版本是“4”,IPv6版本是“6”。

头部长度(IHL,Internet Header Length)

4bit

表示IP数据报头部的长度,单位是32位(4字节

比如:头部长度为“5”,表示头部有5个32位(5 * 4字节)。

服务类型(TOS,Type of Service)

8bit

总长度(Total Length)

16bit

整个IP数据报的长度,包括头部和数据部分单位是字节

比如:如果总长度是“1500字节”,那么数据包的大小就是1500字节。

标识符(Identification)

每个数据报都有一个唯一的ID,用于当数据报被分段 (IP数据报大于MTU)时,帮助接收端正确地把这些分段重新组合成完整的数据包。
标识符(Identification)字段 是一个 16 位的数字

比如:如果一个数据报被分成了多个小分段,它们会使用相同的标识符来标记属于同一个数据报。

标志(Flags)

用来指示数据包是否被分段,以及是否还有后续的分段。常见的标志有“更多分段”(More Fragment)标志。

比如:如果有“更多分段”标志,表示这不是数据包的最后一部分。

IP标志字段一共有3位(bit):但实际上只用到了中间两位,如下:

名称位置含义通俗解释
第0位保留位一般是0没啥用,先放着
第1位DF(Don't Fragment)不许分段如果设置了这个为1,路由器不能对数据包切片
第2位MF(More Fragments)后面还有分段如果这个为1,说明还有“下一段”数据

分段偏移(Fragment Offset)

网络中,IP数据报有最大大小限制(MTU),当数据太大,就要被“切片”——也就是分段传输
每一段都需要带一个“偏移量”,告诉接收方:我是哪一段,拼到原始数据的哪里去

假设原始数据有 4000字节,但网络限制每个IP数据包最多只能传 1500字节

IP协议就会把它分成三段:

段号数据大小分段偏移(单位是8字节)实际字节范围
第1段1480字节0第0到1479字节
第2段1480字节185(=1480/8)第1480到2959字节
第3段1040字节370(=2960/8)第2960到3999字节

注意分段偏移是按8字节为单位的,不是直接表示字节位置。每个分片的数据部分(不是总长度)必须是 8 字节的整数倍(8 的倍数),除了最后一个分片可以不是。

生存时间(TTL,Time to Live)

TTL 是一个数字,表示最多可以经过多少个路由器。限制数据包在网络中的生命时间
。每经过一个路由器,TTL值就减少1。当TTL值为0时,数据包会被丢弃(丢弃它的路由器会发送一个 ICMP 错误报文),防止在网络中无限循环。

协议(Protocol)

标识数据部分使用的上层协议。例如,如果是TCP协议,它会标识为6;如果是UDP协议,它会标识为17。

头部校验和(Header Checksum)

用来检查IP头部是否发生了错误。如果计算的校验和与接收到的校验和不匹配,说明数据包头部有错误。

比如:它可以帮助网络设备确保头部数据没有损坏。

源IP地址(Source IP Address)

表示数据包的发送者IP地址。

比如:如果源IP是“192.168.1.1”,说明这个数据包是从IP为“192.168.1.1”的设备发出的。

目标IP地址(Destination IP Address)

表示数据包的接收者IP地址。

比如:如果目标IP是“10.0.0.2”,说明数据包的目的地是IP为“10.0.0.2”的设备。

选项(Options)(可选)

有时可以在头部加上一些特殊的选项,如安全设置、时间戳等。这部分通常不是很常用。

比如:某些网络可能要求对数据包进行时间戳记录。

填充(Padding)

如果头部需要调整为32位的倍数,填充字段会添加额外的零,确保头部的总长度是4的倍数。

IP数据部分

IP数据报分片问题

字段含义
Identification所有分片有相同值,接收端靠它来识别“属于同一个原始数据包”
Fragment Offset分片在原始数据中的起始位置,单位是 8 字节
MF(More Fragments)如果还有后续分片,就设为 1;最后一片设为 0
Total Length每个分片自身的总长度(= IP头 + 数据部分)
规则说明
除最后一片外,每个分片数据部分长度必须是 8 的整数倍因为偏移量单位是 8 字节
所有分片都必须带 IP 头每个都是一个合法 IP 数据报
接收端根据:源地址 + 标识符 + 偏移量 来重组数据
最后一片的 MF = 0,表示结束

 

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

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

相关文章

【Lua语言】Lua语言快速入门

初始Lua Lua是一种轻量小巧的脚本语言,他使用标准C语言编写并以源代码形式开放。这意味着Lua虚拟机可以很方便的嵌入别的程序中,从而为应用程序提供灵活的扩展和定制功能。同时,在目前脚本引擎中,Lua的运行速度占有绝对优势。 变…

Silverlight发展历程(微软2021年已经停止支持Silverlight 5)

文章目录 Microsoft Silverlight 发展历程引言起源与背景(2006-2007)互联网技术格局与微软的挑战WPF/E 项目的启动 Silverlight 1.0 的诞生(2007)正式命名与首次发布初步的市场定位 Silverlight 2.0:真正的突破&#x…

充电桩领域垂直行业大模型分布式推理与训练平台建设方案 - 慧知开源充电桩平台

没有任何广告! 充电桩领域垂直行业大模型分布式推理与训练平台建设方案 一、平台定位与核心价值 行业首个垂直化AI平台 专为充电桩运营场景设计的分布式大模型训练与推理基础设施,实现"算力-算法-场景"三位一体闭环管理。 核心价值主张&am…

区块链交易自动化新时代:实战体验 Maestro 智能机器人

随着 DeFi 和链上交易生态的不断壮大,链上自动化工具的应用正逐渐从「量化机构」走向普通投资者和开发者。在过去的几个月中,我实测了一款基于 Telegram 的交易机器人 —— Maestro,它极大简化了链上套利、复制交易等流程,对我个人…

windows服务器及网络:论如何安装(虚拟机)

今天我要介绍的是:在Windows中对于安装系统(虚拟机的步骤以及相关的安装事宜),事不宜迟,让我们来看看系统安装(虚拟机)是怎么操作的: 对现在来说,安装电脑系统已经是非常…

Hbuilder 上的水印相机实现方案 (vue3 + vite + hbuilder)

效果 思路 通过 live-pusher 这个视频推流的组件来获取摄像头拿到视频的一帧图片之后,跳转到正常的 vue 页面,通过 canvas 来处理图片水印 源码 live-pusher 这个组件必须是 nvue 的 至于什么是 nvue,看这个官方文档吧 https://uniapp.dcl…

TinyEngine 2.4版本正式发布:文档全面开源,实现主题自定义,体验焕新升级!

本文由体验技术团队李璇原创。 前言 TinyEngine低代码引擎使开发者能够定制低代码平台。它是低代码平台的底座,提供可视化搭建页面等基础能力,既可以通过线上搭配组合,也可以通过cli创建个人工程进行二次开发,实时定制出自己的低…

毕业答辩的PPT应该包括哪些内容?

一、PPT 模板的选择 1. 忌单调的白底黑字,应进行一些艺术设计,使人看着画面舒服,但不必过于花哨。总之,专业制作,符合技术人士的喜好。 2. 去掉不相关信息,如一些下载模板上的LOGO。把学校或部门的LOGO放…

Vscode --- LinuxPrereqs │远程主机可能不符合 glibc 和 libstdc++ Vs code 服务器的先决条件

打开vscode连接远程linux服务器,发现连接失败,并出现如下报错信息: 原因是: vscode 官网公告如下:2025 年 3 月 (版本 1.99) - VSCode 编辑器 版本1.97 官网公告如下:链接 版本1.98 官网公告如下&am…

安装部署RabbitMQ

一、RabbitMQ安装部署 1、下载epel源 2、安装RabbitMQ 3、启动RabbitMQ web管理界面 启用插件 rabbitmq数据目录 创建rabbitmq用户 设置为管理员角色 给用户赋予权限 4、访问rabbitmq

Qt实现文件传输客户端(图文详解+代码详细注释)

Qt实现文件传输客户端 1、 客户端UI界面设计2、客户端2.1 添加网络模块和头文件2.2 创建Tcp对象2.3 连接按钮2.3.1 连接按钮连接信号与槽2.3.2 连接按钮实现 2.4 读取文件2.4.1 连接读取文件的信号与槽2.4.2 读取文件槽函数实现2.5 进度条2.5.1 设置进度条初始值2.5.2 初始化进…

机器学习期末

选择题 以下哪项不是机器学习的类型? A. 监督学习 B.无监督学习 C.半监督学习 D.全监督学习 D 哪一个是机器学习的合理定义? A、机器学习是计算机编程的科学 B、机器学习从标记的数据中学习 C、机器学习是允许机器人智能行动的领域 D、机器学习能使计算机能够在…

Python多任务编程:进程全面详解与实战指南

1. 进程基础概念 1.1 什么是进程? 进程(Process)是指正在执行的程序,是程序执行过程中的一次指令、数据集等的集合。简单来说,进程就是程序的一次执行过程,它是一个动态的概念。 想象你打开电脑上的音乐播放器听歌,…

【QT】 QT中的列表框-横向列表框-树状列表框-表格列表框

QT中的列表框-横向列表框-树状列表框-表格列表框 1.横向列表框(1)主要方法(2)信号(3) 示例代码1:(4) 现象:(5) 示例代码2:加载目录项在横向列表框显示(6) 现象: 2.树状列表框 QTreeWidget(1)使用思路(2)信号(3)常用的接口函数(4) 示例代码&am…

决策树:ID3,C4.5,CART树总结

树模型总结 决策树部分重点关注分叉的指标,多叉还是单叉,处理离散还是连续值,剪枝方法,以及回归还是分类 一、决策树 ID3(Iterative Dichotomiser 3) 、C4.5、CART决策树 ID3:确定分类规则判别指标、寻找能够最快速降低信息熵的方…

easyexcel使用模板填充excel坑点总结

1.单层map设置值是{属性},那使用两层map进行设置值,是不是可以使用{属性.属性},以为取出map里字段只用{属性}就可以设置值,那再加个.就可以从里边map取出对应属性,没有两层map写法 填充得到的文件打开报错 was empty (…

C# LINQ基础知识

简介 LINQ(Language Integrated Query),语言集成查询,是一系列直接将查询功能集成到 C# 语言的技术统称。使用LINQ表达式可以对数据集合进行过滤、排序、分组、聚合、串联等操作。 例子: public class Person {public int Id;public string…

GCoNet+:更强大的团队协作 Co-Salient 目标检测器 2023 GCoNet+(翻译)

摘要 摘要:本文提出了一种新颖的端到端群体协作学习网络,名为GCoNet,它能够高效(每秒250帧)且有效地识别自然场景中的共同显著目标。所提出的GCoNet通过基于以下两个关键准则挖掘一致性表示,实现了共同显著…

QT常见输入类控件及其属性

Line Edit QLineEdit用来表示单行输入框,可以输入一段文本,但是不能换行 核心属性: 核心信号 信号 说明 void cursorPositionChanged(int old,int new) 当鼠标移动时发出此型号,old为先前位置,new为新位置 void …

Few-shot medical image segmentation with high-fidelity prototypes 论文总结

题目:Few-shot medical image segmentation with high-fidelity prototypes(高精确原型) 论文:Few-shot medical image segmentation with high-fidelity prototypes - ScienceDirect 源码:https://github.com/tntek/D…