当前位置: 首页 > news >正文

IP数据报

 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.xdnf.cn/news/45595.html

相关文章:

  • kotlin,编码、解码
  • Navicat、DataGrip、DBeaver在渲染 BOOLEAN 类型字段时的一种特殊“视觉风格”
  • DSN主从同步
  • 【Linux】vim配置----超详细
  • 拼多多面经,暑期实习Java一面
  • 大数定理(LLN)习题集 · 题目篇
  • Java技术栈 —— 基本规范
  • [matlab]子图排版和线性回归
  • 基于Python智能体API的Word自动化排版系统:从零构建全流程模块化工作流与版本控制研究
  • MAC-QueryWrapper中用的exists,是不是用join效果更好
  • SpringBoot实战4
  • chili3d调试6 添加左侧面板
  • Linux学习——了解和熟悉Linux系统的远程终端登录
  • 架构师面试(三十四):IM 假在线
  • Qt中修改了UI设计文件后编译不生效问题的解决办法
  • 基于若依开发公网访问项目
  • 精益数据分析(8/126):从Airbnb案例看精益创业与数据驱动增长
  • 数据通信学习笔记之OSPF的区域
  • 学习笔记—C++—string(一)
  • 2025年渗透测试面试题总结-拷打题库07(题目+回答)
  • SQL之DML(查询语句:select、where)
  • Mysql insert一条数据的详细过程
  • [SpringBoot-1] 概述和快速入门(使用vscode)
  • 在阿里云和树莓派上编写一个守护进程程序
  • 数据分析师-Part1-职业介绍
  • 每天学一个 Linux 命令(26):less
  • Vue3 响应式原理: Proxy 数据劫持详解
  • Oracle高级语法篇 - 用户与角色关系
  • 从零创建 Docker 镜像
  • DeepSeek与ECharts融合助力复杂图表高效制作