IP协议(下)

目录

一、IP分片

1.为什么需要IP分片

2.IP报头信息

二、分片的组装

1.接收方怎么知道一个报文被分片了

2.同一个报文的分片怎么全部识别出来的

3.报文如何排序,如何得知报文有没有收全

4.怎么将各分片正确组装

5.怎么确定合成的报文是正确的

6.总结

三、自己进行分片的组装

1.自己做一次分片

2.实际的IP判断


本文章讲解IP协议的分片问题,也是IP协议的最后一部分。

一、IP分片

1.为什么需要IP分片

前面在讲述IP协议报头的时候,我忽略了16位标识、3位标志和13位片偏移这三个字段,由于这三个字段只服务于分片,对跨网络传输没有帮助,所以我将它们同一放在了后面。

在网络分层模型中,IP协议所在的网络层的下一层是数据链路层。

数据链路层使用的协议为MAC桢协议,IP协议依旧需要将数据向下交付,通过MAC桢协议处理后才能将MAC桢数据通过网线发送。(忽略物理层)

但是MAC桢协议的单帧有效载荷不能超过最大传送单元(MTU),大部分为1500字节。

另一方面,IP协议的校验和只负责IP报头的校验,TCP的校验和会同时负责报头和有效载荷的校验。

也就是说,IP报文的长度是由TCP决定的。

正是因为MAC桢协议的限制,TCP只能将数据分包发送,且保证每个数据报文长度不超过MTU。

那如果TCP就给了IP一个超过MTU的报文,MAC桢协议又没法处理,IP该怎么办呢?

所以就需要IP将报文分片,保证每个报文都不超过MTU,然后再向下交付。

因为网络各层协议相互独立,所以IP的分片属于IP自身的行为。

分片只能由当前主机的IP协议来做,组装也只能由对方主机的IP协议来做。

2.IP报头信息

(1)16位标识

16位标识:一个16位整数,保证自己和其他的保文不重复。

(2)3位标志

3位标志:有3个比特位。

  • 第一位为保留位,不使用且为0。
  • 第二位为1表示禁止分片,若此时报文长度超过MTU,则IP会丢弃报文。若为0表示允许分片,IP正常分片即可。
  • 第三位表示更多分片,对于一个TCP报文的分片,最后一个分片该位为0,其他均为1。

(3)13位片偏移

表示该分片的有效数据头部相对未分片的数据的偏移量。若不分片,对应报文在原始报文的偏移量为0。

(4)填入分片数据

IP将一个4500字节的TCP报文,分片成三个1500字节的IP报文。

  • 三个1500字节的报文是一组,所以它们的16位标识相同,比如设为1234。
  • 第一个报文的片偏移为0,第二个报文的片偏移为1500,第三个报文的片偏移为3000。
  • 对三位标志而言,三个报文第一位都为0。因为允许分片,所以第二位都为0。因为三个报文有先后顺序,所以偏移量为0和1500的报文该位为1,偏移量为3000的报文该位为0。

二、分片的组装

1.接收方怎么知道一个报文被分片了

一种情况,如果更多分片标志位为1,表示该报文被分片过。

另一种情况,如果更多分片标志位为0且片偏移大于0,表明该报文是分片的最后一个。

2.同一个报文的分片怎么全部识别出来的

每一组分片的报文的16为标志都相同,当然能识别出报文的归属。

3.报文如何排序,如何得知报文有没有收全

第一个报文的偏移量为0,更多分片为1,最后一个报文的偏移量大于0,更多分片为0。对于其他报文,前一个报文的偏移量+自身长度=后一个报文中偏移量,这样就能确定分包的排序,也能确定报文是否收全。

4.怎么将各分片正确组装

按照片偏移进行升序排列即可。

5.怎么确定合成的报文是正确的

TCP和IP都有校验和,IP协议校验和校验IP报头,不检查有效数据。TCP通过TCP校验和校验有效数据和TCP报头。

6.总结

(1)IP分片属于数据传输的少数情况

TCP在大部分时间里都能保证报文的长度不超过MTU,所以IP分片很少出现。

(2)分片对数据安全传递是有很大威胁的

当IP发送分片后的报文时,如果某一个报文分片丢失了,接收方就不能成功组装,此时所有已接收的分片报文都会被丢弃。而且分片越多,分片丢失的概率越大,更不利于数据传送。

由于TCP协议存在超时重传机制,哪怕IP分片丢失,数据也不会遗失。但由于分片是IP协议自己进行的,所以TCP会将未分片的报文向IP传递,IP还需要重新分片再发送。

(3)安全高效的数据传输需要TCP的合理控制

我们要想从根源上解决问题,就需要让TCP将数据分包成合适的大小,尽量避免IP分片,才能减少丢包率。

三、自己进行分片的组装

1.自己做一次分片

假设TCP向IP传输了一个3000字节的报文,报头为标准报头(20字节)。

IP给TCP报文加上自己的标准报头(20字节),发现IP报文总长为3020字节,超过了MTU的1500字节,需要分片。

IP分片会产生多个IP报文,每个报文都会有IP报头。

  • 第一片:IP报头20字节,有效载荷1480字节,1480字节中还包括TCP的报头,总长度1500字节。
  • 第二片:IP报头20字节,提取后面的有效载荷1480字节,总长度1500字节。
  • 第三片:最后剩下有效载荷60字节,再加上IP报头20字节,总长度80字节。

2.实际的IP判断

上面的处理是我们自己凭感觉进行的分片流程,TCP/IP会通过一些报文长度的上限值控制传输的过程。

MTU(最大传送单元):限制了IP报文字节的最大值,一般为1500字节。

MSS (最大段尺寸):由于IP标准报头为20字节,所以IP的有效数据最大为1480字节。而TCP标准报头也为20字节,TCP报头是IP报文的有效数据,所以TCP的最大有效载荷为1460字节,也叫最大段尺寸。所以TCP会通过滑动窗口进行分包,保证每个TCP报文的有效数据不超过MSS。

从这里,我们也再次理解了,为了保证数据的安全传输,避免IP分片,需要TCP控制好自己的报文长度。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SSM - Springboot - MyBatis-Plus 全栈体系(三十五)

第八章 项目实战 四、后台功能开发 2. 首页模块开发 2.1 查询首页分类 2.1.1 需求描述 进入新闻首页,查询所有分类并动态展示新闻类别栏位 2.1.2 接口描述 url 地址:portal/findAllTypes 请求方式:get 请求参数:无 响应数据&#xff…

【Python · PyTorch】数据基础

数据基础 1. 数据操作1.1 入门1.2 运算符1.3 广播机制1.4 索引和切片1.5 节省内存1.6 转化为其他Python对象 2. 数据预处理2.1 读取数据集2.2 处理缺失值2.3 转换为张量格式 本文介绍了PyTorch数据基础,Python版本3.9.0,代码于Jupyter Lab中运行&#xf…

红队专题-从零开始VC++C/S远程控制软件RAT-MFC-[5]客户端与服务端连接

红队专题 招募六边形战士队员端操作系统SystemInfo类获取系统信息发送系统信息头文件声明头文件调用 未找到来自 OleAcc.dll 的导入LINK 招募六边形战士队员 一起学习 代码审计、安全开发、web攻防、逆向等。。。 私信联系 端 发送连接->进入主线程->返回socket->…

[SWPUCTF 2023 秋季新生赛] web题解

文章目录 colorful_snakeNSS_HTTP_CHEKER一键连接!ez_talkPingpingpingUnS3rialize查查needIf_elseRCE-PLUSbackup colorful_snake 打开题目,查看js源码 直接搜flag 把那三行代码复制到控制器,得到flag NSS_HTTP_CHEKER 都是http请求基本知识 抓包按照…

【保姆级教程】:docker搭建MongoDB三节点副本集

容器可以理解为一个进程,镜像是把环境,组件等都配置好,运行成容器的,容器里面运行服务,也可以说是一个进程。镜像是模板,镜像是实例。 一个镜像可以创建多个实例。也就是多个容器,容器之间相互…

驱动作业10.23

现象 test.c #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #include "head.h"in…

TCP/IP(二十)TCP 实战抓包分析(四)TCP 第二次握手 SYN、ACK 丢包

一 实验二&#xff1a;TCP 第二次握手 SYN、ACK 丢包 重点&#xff1a; 通过设置 tcp_synack_retries 和 tcp_syn_retries内核参数,观察丢包的现象 ① 实验环境 iptables -t filter -I INPUT -s 172.25.2.100 -j DROPtcpdump -nni ens3 tcp and host 172.25.2.100 and por…

蛇口街道小区长者服务示范点 ——在家门口“乐享晚年”

2023年9月28日&#xff0c;深圳市南山区蛇口街道创建健康街道行动之“老年肌少症免费筛查”项目走进了海昌社区&#xff0c;为数十位长者开展了系统筛查。在家门口就能够享受到由蛇口医院康复科医生提供的专业服务&#xff0c;这对于小区的老人们来说还是第一次。自今年7月以来…

python之代理ip的配置与调试方法详解

代理IP在Python中是一种强大的工具&#xff0c;它可以用于隐藏真实IP地址、绕过访问限制、提高数据爬取和网络请求的效率等。下面将详细介绍Python中代理IP的配置与调试方法&#xff0c;帮助您更好地理解和应用代理IP。 1. 选择合适的代理IP 在使用代理IP之前&#xff0c;需要…

自然语言处理---Transformer构建语言模型

语言模型概述 以一个符合语言规律的序列为输入&#xff0c;模型将利用序列间关系等特征&#xff0c;输出一个在所有词汇上的概率分布&#xff0c;这样的模型称为语言模型。 # 语言模型的训练语料一般来自于文章&#xff0c;对应的源文本和目标文本形如: src1 "I can do&…

硬件服务器更换IPMI

重启按F2进入Biso界面 然后进入Server Management界面&#xff0c;选择BMC LAN Configuration

excel怎么固定前几行前几列不滚动?

在Excel中&#xff0c;如果你想固定前几行或前几列不滚动&#xff0c;可以通过以下几种方法来实现。详细的介绍如下&#xff1a; **固定前几行不滚动&#xff1a;** 1. 选择需要固定的行数。例如&#xff0c;如果你想要固定前3行&#xff0c;应该选中第4行的单元格。 2. 在E…

Markdown语法详解

文章目录 [toc] 一、简介二、样式1. 标题2. 字体3. 引用4. 分割线5. 图片6. 超链接7. 列表8. 表格9. 代码 一、简介 以前写学习文档常用的软件都是Word或者CSDN自带的编辑器&#xff0c;但Word用起来不太灵活&#xff0c;而CSDN自带编辑器又感觉逼格不够&#xff08;主要原因&…

c语言练习91:合并两个有序链表

合并两个有序链表 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 代码1&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; struct Li…

AD9371 官方例程HDL详解之JESD204B TX侧时钟生成 (一)

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 参考资料&#xff1a; UltraScale Architecture GTH Transceive…

驱动开发LED灯绑定设备文件

头文件 #ifndef __HEAD_H__ #define __HEAD_H__typedef struct {unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR; }gpio_t;#define PHY_LED1_ADDR 0x50006000 #define PHY_LED2_ADDR 0x50007000 #defin…

【Java集合类面试六】、 HashMap有什么特点?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;HashMap有什么特点&…

ONEPIECE!程序环境和预处理——C语言最终章

时间过得飞快呀&#xff0c;从第一篇blog到现在&#xff0c;已经有三四个月的时间了&#xff0c;而我们终于也迎来了C语言的最终章——程序环境和预处理&#xff01;加油吧朋友们&#xff0c;ONEPIECE就在眼前~ 目录 一、程序的"翻译环境"和"运行环境" 二…

VUE到底有什么好处?

网上有许多前端开发框架的对比&#xff0c;相对的&#xff0c;VUE在综合评分方面还是优秀的。以下是一些State of JavaScript调查数据结果&#xff1a; 使用率&#xff1a;VUE使用者在调研开发者中占比 51%&#xff1b; 开发者满意度&#xff1a;VUE的综合开发者满意度达到64%…

springcloud笔记 (8) -网关 Gateway

网关 出国需要过海关 网关&#xff1a;网络的关卡 网关的作用 1&#xff1a;路由转发 2&#xff1a;安全控制 保护每个服务&#xff0c;不需要将每个暴露出去 3&#xff1a;负载均衡 1.没有网关&#xff1a;客户端直接访问我们的微服务&#xff0c;会需要在客户端配置很多…