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

IP数据报结构详解:从基础到进阶

目录

IP数据报的格式

IP数据报首部的固定部分

IP数据报首部的可变部分

实例分析:数据报的分片

生存时间(TTL)与协议

首部检验和

总结


在网络通信中,IP数据报是至关重要的基本单元。本文将带您深入了解IP数据报的格式及其各个字段的功能。即使您是网络基础小白,也能通过本文掌握IP数据报的核心知识。

IP数据报的格式

IP数据报由首部数据部分组成。首部又分为固定部分可变部分。图4-19展示了IP数据报的完整格式。

从上表中可以看出,IP数据报的首部字段非常关键,它们定义了数据报的各种属性和行为。接下来我们将详细解释每个字段的作用。

IP数据报首部的固定部分

固定部分共20字节,是所有IP数据报必须具有的。下面介绍固定部分各字段的意义:

  1. 版本:占4位,指IP的版本。当前使用广泛的是IPv4。IPv6是下一代互联网协议,虽然有许多改进,但IPv4仍然占据主导地位。
  2. 首部长度:占4位,表示首部长度的单位是32位(4字节)。最常用的长度是20字节,不使用选项时为0101。
  3. 区分服务:占8位,用来获得更好的服务。目前大多数情况下不使用,但在一些对服务质量要求较高的应用中,区分服务字段可以帮助实现流量优先级管理。
  4. 总长度:占16位,表示首部和数据部分的总长度。最大长度为65535字节,这是由于16位字段的最大值为2^16-1。
  5. 标识:占16位,用于标识数据报。在分片传输中,所有分片具有相同的标识值。这有助于接收端将所有分片重新组装成完整的数据报。
  6. 标志:占3位,目前仅2位有意义。MF(More Fragment)表示是否有后续分片,DF(Don't Fragment)表示是否允许分片。
  7. 片偏移:占13位,表示每个分片在原始数据报中的相对位置。以8字节为单位。
  8. 生存时间(TTL) :占8位,防止数据报在网络中无限制地传输。每经过一个路由器减少1,当为0时丢弃。
  9. 协议:占8位,指示数据报携带的数据来自何种协议。如TCP(6)、UDP(17)等。
  10. 首部检验和:占16位,仅检验首部,目的是确保首部在传输中未被损坏。
  11. 源地址:占32位,表示数据报的发送地址。
  12. 目的地址:占32位,表示数据报的接收地址。
IP数据报首部的可变部分

可变部分是选项字段,用于支持排错、测量及安全措施。选项字段长度可变,最长为40字节。IPv6取消了这一部分,使首部长度固定,以提高处理效率。

实例分析:数据报的分片

当数据报长度超过网络所容许的MTU时,需将数据报分片。以下为一个分片的具体例子:

原数据报总长度为3820字节,数据部分为3800字节。为了适应网络的MTU,需要将数据报分片,每个分片的长度不超过1420字节。分片结果如下:

  • 数据报片1:总长度1420字节,片偏移0
  • 数据报片2:总长度1420字节,片偏移175
  • 数据报片3:总长度1020字节,片偏移350

表4-5 IP数据报首部中与分片有关的字段值

数据报片

总长度

标识

MF

DF

片偏移

原始数据报

3820

12345

0

0

0

数据报片1

1420

12345

1

0

0

数据报片2

1420

12345

1

0

175

数据报片3

1020

12345

0

0

350

假设数据报片2经过某个网络时还需再进行分片,则分为数据报片2-1(携带数据800字节)和数据报片2-2(携带数据600字节)。其字段值如下:

  • 数据报片2-1:总长度820字节,标识12345,MF=1,片偏移175
  • 数据报片2-2:总长度620字节,标识12345,MF=0,片偏移275

这样,接收端就能根据标识和片偏移字段正确地将数据报重新组装。

注意:IP 数据报在传送中可能被多次分片,但分片的数据报仅在目的主机才被重装为原来的数据报

生存时间(TTL)与协议

TTL字段的设计初衷是防止数据报在网络中无限制传输。每经过一个路由器,TTL值减1。当TTL值减为0时,数据报被丢弃。这有效避免了因路由错误导致的数据报在网络中兜圈子。

协议字段指示数据报携带的数据来自何种协议。常见的协议及其字段值如下:

例如,如果协议字段值为6,表示数据报携带的是TCP数据。

首部检验和

首部检验和用于校验数据报首部是否在传输中被损坏。其计算方法如下:

  1. 将首部分为若干16位字。
  1. 将检验和字段置零。
  1. 用反码算术运算将所有16位字相加。
  1. 将结果的反码写入检验和字段。

接收端收到数据报后,重新计算首部检验和。若结果为0,表示首部未被损坏,否则丢弃数据报。

总结

本文介绍了IP数据报的格式及各字段的功能。从首部的固定部分到可变部分,再到具体的分片例子,希望您能对IP数据报有一个全面的了解。通过具体实例的分析,相信即使是网络基础小白也能明白IP数据报的基本结构和功能。

如果您有任何问题或建议,请在评论区留言。我们非常重视您的反馈,以便不断优化内容。感谢阅读!

延伸阅读:如果您对IP数据报的更详细技术细节感兴趣,建议参考RFC791文档。


希望这篇简洁明了的文章能帮助您更好地理解IP数据报的结构和功能。请多多分享和点赞,让更多人受益!

图文来源:《计算机网络教程》第六版微课版

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 大数据技术--实验01-Hadoop的安装与使用【实测可行】
  • 全球性“微软蓝屏”事件反思:如何预防大规模系统故障
  • LLM模型与实践之基于 MindSpore 实现 BERT 对话情绪识别
  • k210相关图像操作
  • python-爬虫实例(4):获取b站的章若楠的视频
  • leetcode 513.找树左下角的值
  • 分布式锁-redisson锁重试和WatchDog机制
  • LabVIEW多线圈电磁式振动发电机测试
  • Python3 第三十九课 -- 实例八
  • 对于相同网段的IP,部分无法ping通问题
  • 测试管理工具、自动化测试工具、跨浏览器测试工具 推荐
  • ES中聚合查询之date_histogram查询出现key_as_string 和 key含义
  • 从零开始创建vue3项目——包含项目初始化、element-plus、eslint、axios、router、pinia、echarts
  • 爬虫学习1:初学者简单了解爬虫的基本认识和操作(详细参考图片)
  • php_webshell免杀--从0改造你的AntSword
  • avalon2.2的VM生成过程
  • Bytom交易说明(账户管理模式)
  • Cookie 在前端中的实践
  • Docker入门(二) - Dockerfile
  • gcc介绍及安装
  • iOS 颜色设置看我就够了
  • Java,console输出实时的转向GUI textbox
  • javascript 总结(常用工具类的封装)
  • JavaScript-Array类型
  • Javascript设计模式学习之Observer(观察者)模式
  • Js基础知识(四) - js运行原理与机制
  • js算法-归并排序(merge_sort)
  • OSS Web直传 (文件图片)
  • storm drpc实例
  • Vue.js源码(2):初探List Rendering
  • Vue2 SSR 的优化之旅
  • Web标准制定过程
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 世界上最简单的无等待算法(getAndIncrement)
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 最近的计划
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • AI算硅基生命吗,为什么?
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​ubuntu下安装kvm虚拟机
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • ​字​节​一​面​
  • #QT(一种朴素的计算器实现方法)
  • #stm32整理(一)flash读写
  • $NOIp2018$劝退记
  • (1)(1.13) SiK无线电高级配置(六)
  • (35)远程识别(又称无人机识别)(二)
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (C语言)字符分类函数
  • (阿里云万网)-域名注册购买实名流程
  • (第61天)多租户架构(CDB/PDB)
  • (二)springcloud实战之config配置中心