ip报头和ip报文切片组装问题

在tcp层将数据打包封装向下传递后,网络层将其整个看为一个数据,然后对其数据加网络报头操作,在网络层最具有代表的协议就是ip协议。在这里我们探究ipv4的报头。

ip报头

4位版本:指定ip的版本号,对于ipv4来说就是4。

4位首部长度:和tcp报头一样,15个单位,每个单位代表4个字节。

8位服务类型:3位弃用,1位待用,还有4位分别标识:: 最小延时, 最大吞吐量, 最高可靠性, 最小成本,仅能存在一位被设置,假设是打游戏那就要设置最小延迟,如果是文件传输就要最大吞吐量,如果是银行转账就是最高可靠性。这是给路由器看的位。

16位报文长度:顾名思义,就是报文的大小

16位标识、3位标识位、13位偏移我们等等再唠。

8位生存时间:就是个计数器,防止报文长时间占用网络。

16位首部检验和:防止数据丢失篡改等等。

32位源ip地址:就是发送方的ip。

32位目的ip地址:该报文要去的目的机器ip。

报文切片组装

由于在网络中流动的报文是有大小限制的,一般而言,在ethernet默认MTU值为1500字节,我们就以1500字节讨论这个切片问题。

当传输层tcp协议向下传递了一个2980字节的数据帧。

在网络层中如果报文过大,必须将其做分片操作。

介绍报头第二行设置

16位标识:每一个在网络层组装的报文都是不同的16位标识,类似于tcp层的32位序列号,这个序列号是区分不同报文的序列号,如果从网络得到相同的16位标识的报文,那么报文就是被切片了。

3位标识:1位待用,1位禁止切片的标识,如果某个报文该位被设置,但是又过大,那么就直接将其报文丢弃。1位更多分片标志位,如果有报文该位被设置1,那么其报文之后一定还有报文在路上,如果被标识为0,原可能未被分片,或者是分片的最后一片。

13位分片位置:就是该分片在原报文中的起始位置。


5个问题:

  1. 分片好吗?
  2. 如何识别ip报文的不同
  3. 如何识别分片
  4. 如何分片。
  5. 如何对获得的分片组合
  6. 异常处理

1、分片并不是主流,分片增加了网络负担,并且升高了丢包率。

2、依托ip报头中的16位标识,区分报文,原报文不同的情况下,报文取得16位标识是一定不同的

3、如果发现接收多个ip报文16标识相同说明报文被分片,当然不同标识也不是未被分片。如果发现3位标识的"更多分片"被设置为1,那么就说明被分片了(最后一个分片设置为0)。如果偏移设置不为0,说明被分片了(第一个分片的分片偏移为1)。

4、分片过程:

分片后必须为其他报文增加新的ip报头。每次切分后需要设置新旧报头的3个标识:报文总大小,更多分片,13为分片偏移。

5、分片组合

6、异常处理,如果接收到多个分片报文,会留存分片报文到最大网络传输时间,如果在时间后仍然分片报文为齐全,则将该全部16为标识相同的分片报文全部丢弃。

相关推荐
小羊Yveesss8 小时前
2026年外贸建站服务器怎么选?访问速度、稳定性和海外收录怎么判断
大数据·运维·服务器
AI创界者8 小时前
【实战演练】基于 Kali Linux 的自动化漏洞扫描与安全加固指南
网络·安全·web安全
从零开始的代码生活_9 小时前
Linux epoll 多路转接详解
linux·运维·网络·后端·tcp/ip·计算机网络·php
小鹿软件办公9 小时前
通过调整编码参数使用 VLC 媒体播放器无损压缩视频方法
运维·网络·音视频
随风一样自由10 小时前
【WSL+Linux】国内网络连接微软官方服务器(或GitHub)不稳定,导致下载内核或Linux发行版时超时断开如何解决?
linux·服务器·wsl
源图客10 小时前
Claude Code基础使用
服务器·前端·数据库
清晨曦月10 小时前
【从零构建分布式在线评测系统】二、Judge0服务器上的心跳程序
运维·服务器·分布式
yqcoder11 小时前
什么是 Math 对象
网络·网络协议·udp
I'm a winner18 小时前
【IP核】 Xilinx FPGA LVDS 高速接口,含验证工程与板级测试用例
tcp/ip·fpga开发·测试用例
Piko61420 小时前
H3C IRF2 堆叠实战:打造高可靠核心交换网络
运维·网络·笔记