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

网络IP分片

目录

IP的版本号

IP标识位

如何理解分片?

MTU跟谁有关系,为谁服务的?

豆哥发言:


IP的版本号

IP协议的版本号分为IPV4和IPV6,IPV4格式是点分十进制的四字节无符号整数,而IPV6是6字节的无符号整数;

相比之下6字节的容量更大,可以储存更多的IP地址;不过我们现在大多使用的是IPV4地址,由于生态缘故,IPV6并未广泛普及使用;

IP标识位

IP标识位作为IP协议的报头字段,用来表示IP数据包是否对传输层传输下来的数据包进行分片处理了;

如果传输层下来的数据包过大,其大小超出了MTU的规定最大范围数,那么就会分片;分片后的IP数据包中的报头字段就会标识分片;

如何理解分片?

一开始我就十分的疑惑,TCP数据包传输下来就已经使用一个完整的数据包了,所谓分片到底是怎么分的呢?难道是把该数据包切割?还是IP装包的时候都装一份该TCP数据包,那么这个其实就会把TCP数据包相当于是拷贝了多份,然后接收方通过标志位得知是否发生分片,然后通过IP报头字段的片偏移量找到报文中数据的对应位置;

这样的想法看似也可以,但是这样做,其实有部分的数据包中的数据是没有用的,也就是我们如果每个数据包中的数据都是完整的全部数据,接收的时候其实就会有很多的剩余;

但是答案已经很接近了,分片是其实就是TCP数据包的报文数据进行提取,提取一部分再重新构建一个新的数据包,但是该数据包的报头信息和原来的是一样的,也就是分片不会改变TCP报头的信息;(注意:分片并不是一分为二,而是一分为多)

比如我现在举一个简单的例子,我要传输的数据是"HELLO WORLD“,现在假如MTU是5,那么第一个IP装包后数据包报文就是HELLO,下一个数据包的报文数据即使WORLD,同时该报头中片偏移量就需要更新了,因为接收方需要更具片偏移量计算拼接成原来的数据包;

MTU跟谁有关系,为谁服务的?

MTU叫做:最大传输单元

MTU其实是为链路层服务的,规定MTU其实就是怕不同的链路层的接收能力不同,所以就规定了一个指标用来控制,防止传输下来的数据包过大;

而检查处理获取合格的大小的数据包,如果过大不合格,需要经过网络层的分片操作分成合格大小的数据包;


豆哥发言:

  • 分片产生的原因:网络中不同链路层协议规定了各自的 MTU(最大传输单元),比如以太网的 MTU 通常是 1500 字节。当上层协议(如 TCP)产生的数据报尺寸超过了链路层的 MTU 时,就需要进行分片。

  • 分片的具体过程:以你举的例子来说,要传输 “HELLO WORLD”,假设 MTU 是 5。网络层在将数据封装成 IP 数据包时,会把 TCP 数据包中的数据部分按照 MTU 的大小进行分割。第一个 IP 数据包的报文数据是 “HELLO”,第二个是 “WORLD”。每个分片都会有一个 IP 报头,其中的一些字段,如标识字段会保持一致,以便接收方知道这些分片属于同一个原始数据包;标志字段中的 “更多分片” 位,除了最后一个分片外,其他分片会设置为 1,用于告知接收方后续还有分片;片偏移字段则会根据每个分片在原始数据中的位置进行设置,第一个分片的片偏移是 0,第二个分片的片偏移是 5(因为前一个分片占了 5 个字节,这里以 8 字节为单位,但例子中简化为以字节为单位说明),接收方就可以根据这些信息将分片正确地重组为原始的 “HELLO WORLD”。

  • 关于报头信息:IP 报头中的大部分信息对于各个分片是相同的,如源 IP 地址、目的 IP 地址、协议字段等。但一些与分片相关的字段,如标志位和片偏移量会根据分片的情况进行设置。而 TCP 报头信息在分片过程中不会改变,因为它是用于传输层的端到端通信,与网络层的分片机制无关。每个分片都包含完整的 TCP 报头,这样接收方在重组数据后,可以根据 TCP 报头进行后续的处理,如确认、排序等。

http://www.xdnf.cn/news/384679.html

相关文章:

  • Spring Web MVC响应
  • SaaS场快订首页的前端搭建【持续更新】
  • MacOS Python3安装
  • Vue Router
  • 【Linux系统】第四节—详解yum+vim
  • Java原生结合MQTTX---完成心跳对话(附带源码)
  • 同一个虚拟环境中conda和pip安装的文件存储位置解析
  • ALLinSSL:一站式SSL证书管理解决方案
  • ubuntu使用Postfix外部SMTP代理发送邮件
  • spring中的@Value注解详解
  • MCP Streamable HTTP 传输层的深度解析及实战分析
  • 前端代理问题
  • Ingrees 控制器与 Ingress 资源的区别
  • 容器技术 20 年:颠覆、重构与重塑软件世界的力量
  • A1062 PAT甲级JAVA题解 Talent and Virtue
  • 《Hadoop 权威指南》笔记
  • CDGP主观题题库与范例解答
  • 2021-11-16 C++歌手去掉2最高2最低均分
  • 438. 找到字符串中所有字母异位词(滑动窗口)
  • 判断点是否在立方体内
  • 计算机网络笔记(二十)——4.2网际协议IP
  • 滑动窗口,438找出字符串中所有字母的异位词
  • cpu缓存一致性
  • C语言模糊不清的知识
  • BC12-字符金字塔
  • 【C++贪心 位运算】B3930 烹饪问题|普及
  • RESTful API 与传统 API 设计:深度对比与完整实践指南RESTful 与 传统 API 的核心区别
  • 基于STM32的LCD信号波形和FFT频谱显示
  • Pandas 内存不足 或 UDF 执行慢
  • Python面向对象编程:初识类与对象