计算机网络那些事之 MTU 篇

news2024/11/17 16:48:34

哈喽大家好,我是咸鱼

今天我们来聊聊计算机网络中的 MTU (Maximum Transmission Unit)

什么是 MTU ?

MTU(Maximum Transmission Unit)是指数据链路层中的最大传输单元

通俗点来讲,MTU 是指数据链路层能够传输的最大数据帧的大小(以字节为单位)
在这里插入图片描述
以 CentOS 7 为例,可以通过 ifconfig 命令来查看 MTU 值
在这里插入图片描述

为什么需要 MTU ?

我们知道,数据在数据链路层中通常是以数据帧(Frame)的形式来传输

因为传输的 Frame 不可能无限大(传小的可以),那么一次传多大的 Frame 最合适、最高效就成了一个需要考虑的问题

所以说我们要设定一个值(也就是 MTU),这个值用来限制 Frame 的大小

维基百科有这么一段话

Larger MTU is associated with reduced overhead. Smaller MTU values can reduce network delay.

由上面的话可以得出:

  • MTU越大,开销越小

这句话是很容易理解的,更大的 Frame 意味着包含的有效数据也就更多

我一次能传更多的数据了,那么传输次数就少了,在网络上的开销就变小了

  • 较小的MTU值可以减少网络延迟

这句话容易让人引起困惑,为什么 MTU 值小能够减少网络延迟呢?

如果 MTU 设置的很大,意味着一次能传更大的数据了,那占据链路的时间就会更长,所以总体上网络延迟就会变大

而且如果一大段数据里面有一个 bit 出错了,这一大段就会整个重传,重传的代价是很大的

那么 MTU 设置成多少合适呢?

为什么 MTU 的值是 1500?

RFC 标准定义以太网的默认 MTU 值为 1500,为什么是 1500 ?

这是一个历史遗留问题

早期的以太网使用共享链路的工作方式,为了保证 CSMA/CD(载波多路复用/冲突检测)机制,规定了以太帧长度最小为 64 字节,最大为 1518 字节

  • 最小 64 字节是为了保证最极端的冲突能被检测到,64 字节是能被检测到的最小值
  • 最大不超过 1518 字节是为了防止过长的帧传输时间过长而占用共享链路太长时间导致其他业务阻塞

所以说数据帧的最大长度被限制为 1518 字节(包括帧头、帧尾和CRC校验)
在这里插入图片描述
18 字节用于帧头和帧尾,其中 CRC 校验占据 4 字节,剩下的 1500 字节就是最大数据载荷(Payload)

因此,1500 字节被定义为以太网数据帧中数据部分的最大长度(MTU)

虽然技术不断发展,但这个规定一直没有更改

以太网经过几十年的发展,速度已经从最初的10M被提升到了上百G,速度提高了上万倍

在这样高速度的传输数据中,如果还是延续经典以太网的最大帧长不超过1518 字节的限制,那么在每秒中传输的数据包的个数将很大

于是一些厂商提出了巨型帧(Jumbo Frame)的概念,把以太网的最大帧长扩展到了9K

目前还没有获得 IEEE 标准委员会的认可,但是大多数的设备厂商都已经开始支持

发送数据大小超过 MTU 怎么办?

以太网的 MTU 默认值是 1500,如果发送 Frame 小于 MTU(例如 1000 字节),直接传输就行

如果大于 MTU(4000 字节),那就需要进行分片(Fragment)

即第一次发送 1500 字节(IP header 20 字节 + Payload 1480 字节)

第二次发送 1500 字节(IP header 20 字节 + Payload 1480 字节)

第三次 1000 字节(IP header 20 字节 + Payload 980 字节)

在这里插入图片描述
可能有小伙伴问,那我传的数据大小不够数据帧规定的最小 64 字节怎么办?

答案是:在实际数据内容后面添加填充数据,使得数据包总长度达到最小长度要求。填充数据可以是任意无意义的字节,例如全 0 或全 1 的数据

如何保证发送的数据不超过 MTU ?

前面我们知道,如果发送的数据大于 MTU,则就会进行分片操作

要让最终传给数据链路层的 Frame 数据大小不超过 1500 bytes,就要保证上层中的每一层的数据都没有超过这个大小

如果 MTU 是 1500,那么 IP 层就要保证 IP 层的 Packet 数据不超过 1480 bytes (1500 bytes – 20 bytes IP header),

对于 TCP 来说,它要保证每一个 Segment 数据大小不超过 1460 bytes (1460 bytes – 20 TCP header)

以 TCP 层(传输层)为例子, TCP 层是怎么知道发送的数据不会超过 MTU 呢?

  1. IP 层(网络层)问数据链路层数据最大传输单元( MTU )是多少
  2. TCP 层会问 IP 层数据最大传输大小(Maximum packet size)是多少

这样 TCP 层就会知道自己的最大传输数据大小,叫做 MSS(Maximum segment size)

在 TCP 的握手阶段,MSS(Maximum Segment Size)是用于指定TCP报文段中数据部分的最大长度

对于 TCP 来说,知道自己的 MSS 没有什么用

例如作为接收端来说,收到的包大小取决于发送端,得让发送端知道自己的 MSS 才行

所以在建立 TCP 连接时,双方需要协商一个合适的 MSS 值,以便在数据传输过程中进行分片和重组

什么是 TSO

前面我们介绍了什么是 MTU、MSS

如果你去抓一下包看看,你可能会遇到下面这种情况
在这里插入图片描述
明明协商了 MSS 为 1460 字节,为什么数据居然有一万多字节?

在建立 TCP 连接时,双方需要协商一个合适的 MSS 值,以便在数据传输过程中进行分片

但是这个分片过程往往是简单重复而且计算量比较大的,需要占用较多的 CPU 资源

所以网卡就会对内核说:哥这种小事我来干就好了,不需要麻烦您

然后内核就会把大包发给网卡,网卡来负责分片

这个叫做 TSO(TCP Segment Offload)

TSO(TCP Segmentation Offload)是一种网络传输卸载技术,用于减轻主机的网络数据包分段负担,提高网络传输性能

我们在抓包的时候看到是还在内核里的包,后面网卡拆包的过程是看不到的

网卡不但能对发送的包进行 offload,也可以对接收的包进行 onload,简单来说就是网卡会先把一些小的包积攒下来,然后合起来发送给内核

# 查看网卡上面是否开启 TSO 功能
# on 表示开启
[root@root~]# ethtool -k <网卡名称>
tcp-segmentation-offload: on
        tx-tcp-segmentation: on
        tx-tcp-ecn-segmentation: on
        tx-tcp6-segmentation: on
        tx-tcp-mangleid-segmentation: off

最后总结一下:

在这里插入图片描述

  • MTU 是指数据链路层能够传输的最大数据帧的大小(以字节为单位)。由于历史原因,MTU 的值最小为 64 字节,最大为 1518 字节(Payload 则是 46~1500 字节)
  • 如果发送的数据大于 MTU,则就会进行分片操作;如果小于 MTU,就会在实际数据内容后面添加填充数据,使得数据包总长度达到最小长度要求
  • MSS(Maximum Segment Size)是用于指定 TCP 报文段中数据部分的最大长度。在建立 TCP 连接时,双方需要协商一个合适的 MSS 值以便在数据传输过程中进行分片和重组
  • TSO(TCP Segmentation Offload)是一种网络传输卸载技术。TSO 技术将分片过程从 CPU 转移到网卡上的专用硬件,网卡负责将应用程序的大块数据分段为适当大小的数据包,并添加 TCP 首部,然后直接发送到网络上

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于workerman 即时通讯聊天(uniapp + pc)

laychat workerman 实现 webIM即时通讯系统 下载 laychat-master.zip https://github.com/hszyh/laychat 实现了功能: 1、通过snake后台实现对聊天成员的增删改查&#xff0c;动态推送给在线的用户 2、实现了群组的查找 3、实现了创建我的群组,删除我的群组,添加群组成员…

性能测试工具——LoadRunner内部介绍以及常见问题

目录 Tools Recording Options General Options 注释脚本 Review log Runtime-Settings General Network Browser Internet Protocol HTTPS证书 总结&#xff1a; Tools Recording Options 接下来我们挨个看一下里面的东东以及区别 General&#xff08;通常的&am…

【Python编程】将格式为ppm和pgm的图片批量转换为png或jpg格式的图片

前序 如果文件夹中有异常图片&#xff0c;则可以使用以下代码从而跳过这些异常图片而不影响转换代码的运行。例如本人在解压时中断而导致的图片异常问题&#xff0c;图片示例如下&#xff1a; from PIL import ImageFile ImageFile.LOAD_TRUNCATED_IMAGES True正文 导入用…

Golang学习日志 ━━ gin-vue-admin插件开发记录

gin-vue-admin是一套国人用golang开发的后台管理系统&#xff0c;本文记录插件开发内容。 官网&#xff1a;https://www.gin-vue-admin.com/ 学习视频&#xff1a;https://www.bilibili.com/video/BV1kv4y1g7nT/ 插件目录 后端位置&#xff1a;\server\plugin\ 前端位置&#…

信号与系统复习笔记——采样与通讯系统

信号与系统复习笔记——采样与通讯系统 采样定理 冲激串采样函数可表示为&#xff1a; p ( t ) ∑ n − ∞ ∞ δ ( t − n T ) p(t) \sum_{n-\infty}^{\infty} \delta(t - nT) p(t)n−∞∑∞​δ(t−nT) 周期 T T T 称为采样周期&#xff0c;而 ω s 1 T \omega_s …

7月29-31日·相约上海丨上海国际智能遮阳与建筑节能展览会即将举办

上海国际智能遮阳与建筑节能展览会&#xff08;ISSE&#xff09;即将盛大召开。这个七月&#xff0c;期待您的参与&#xff0c;一同共聚盛会&#xff01; 1、关于展会 国内建筑遮阳市场尚在快速发展期&#xff0c;随着社会经济的发展以及建筑节能环保概念的不断深入&#xff…

开发的功能不都是经过上线测试,为什么上线后还会那么多 Bug ?

你是否也经过这样的灵魂拷问&#xff1a;「开发的功能不都是经过上线测试的吗&#xff1f;为什么上线后还会那么多 Bug &#xff1f;」。 大家明明都很努力&#xff0c;为什么「输出」的结果没有更进一步&#xff1f;今天我们就水一水这个「狗血」话题&#xff0c;究竟是谁个锅…

一半以上的年轻人存款不足10万元,能带给我们什么思考?

目录 年轻人存款现状现在的年轻人真的没有存款意愿吗&#xff1f;为什么年轻人存款少&#xff1f;收入低&#xff0c;臣妾做不到啊生活成本高消费观念不同超前消费、过度负债存款意识弱 依据自身情况聊聊你的目前的存款在哪一个区间&#xff1f;你觉得存款难吗&#xff1f;谈谈…

Open62541 NodeSet loader 编译与使用

大多数的OPC UA 建模工具通常是将NodeSet 编译成为C 或者C# 的源代码&#xff0c;然后和Server 程序一起编译。比如uaModeler&#xff0c;Opc foundation 的UA ModelCompiler 以及Open62541 提供的nodeset_Compiler 都是如此&#xff0c;这种方式在载入配套规范的Nodeset 无疑是…

使用Jenkins构建发布一个简单的maven项目

上一章&#xff0c;完成了jenkins在ubuntu上的安装&#xff0c;这一章将使用单个Jenkins服务完成一个maven项目的打包和发布。 1、在Jenkins的管理页面中安装相关插件 用到的插件有&#xff1a;Maven Integration、Git、Publish Over SSH三个&#xff0c;在Dashboard -> M…

全国水系与流域(五级)矢量数据下载

1. 全国水系与流域&#xff08;五级&#xff09;矢量数据 全国共计3040条水系&#xff0c;4015个流域 全国水系与流域&#xff08;五级&#xff09;矢量数据 链接 解压密码&#xff1a;rserforum.com 说明&#xff1a;“流域等级划分包括1-5级&#xff0c;其中1-2级为一级支流…

从零开始理解Linux中断架构(12)--硬中断之中断控制器(GICV3)

前面我们搞清楚了elx_irq的外围部分,了解清楚了kernel_enter/kernel_exit大致的作用。本节我们进入到硬中断处理部分。硬中断处理程序的位置见下图: 硬中断处理主要的工作就是判断中断发起源,应答中断控制器,根据中断源查询出并调用该中断源的设备级处理函数。 前面…

pcl matlab 计算平面与空间三角形的交线

一、生成一个平面 过程&#xff1a; 单有法向量不能确定一个平面,至少还要有平面上的一个点的坐标才行 假如知道法向量n(A,B,C) 而平面过某点M(x0,y0,z0) 那么平面的方程为 A(x-x0)B(y-y0)C(z-z0)0 要在图中画出来&#xff0c;那么先要给x&#xff0c;y一个范围 举个离子&#…

Appuploader:常见错误及解决方法指南

目录 前言 一.登录apple官网&#xff0c;注册账号 二.下载Appuploader和登录 三.bundle ID 四.设备管理 五.证书管理 六.描述文件管理 七.打包 八.安装测试 &#xff08;PS&#xff1a;第一次安装成功会显示不受信任&#xff0c;进入设置-通 安全性”界面&#xff0c…

Interactive Natural Language Processing

本文是对《Interactive Natural Language Processing》的翻译。 交互式自然语言处理 摘要1 引言2 交互式对象2.1 人在环2.2 KB在环2.3 模型或工具在环2.4 环境在环 3 交互界面3.1 自然语言3.2 形式语言3.3 编辑3.4 机器语言3.5 共享内存 4 交互方法4.1 预训练语言模型4.2 提示…

Broken Gallery 靶场

主机发现 sudo nmap -sn 192.168.28.0/24 sudo nmap -sT --min-rate 10000 -p- 192.168.28.32 -oA nmapscan/ports sudo nmap -sT -sV -sC -O -p22,80 192.168.28.32 -oA nmapscan/detial sudo nmap --scriptvuln 192.168.28.32 -oA nmapsccan/vuln 访问80 图片下载下来 exift…

如何在 ZBrush 和 UE5 中创建精灵吟游诗人(P2)

小伙伴们大家好&#xff0c;下篇咱们精彩继续&#xff0c;主要是讲解角色建模完成后的重新拓扑、UV、灯光设置和渲染。 纹理的重新拓扑和UV 一切都在 Maya 中完成&#xff0c;重新拓扑是一个漫长的过程&#xff0c;因为角色有很多元素&#xff0c;值得庆幸的是&#xff0c;在…

模型训练-3D并行

1. 数据并行&#xff08;Data Parallel&#xff09; 1.1常规数据并行 有一张显卡&#xff08;例如rank 0显卡&#xff09;专门用于存储模型参数、梯度信息和更新模型参数。将训练数据分成多份&#xff08;份数等于显卡数量&#xff09;&#xff0c;每张卡上的模型参数相同&…

CSS编写的瓶颈在哪里?CSS预处理器登场解决你的燃眉之急!

文章目录 I. 引言解释CSS预处理器是什么提及CSS预处理器的好处 II. 为什么要使用CSS预处理器减少代码量变量Mixin函数 & 条件语句 提升CSS的可读性和维护性嵌套规则继承 方便维护加入Source Map方便调试自动前缀 III. 简介几个流行的CSS预处理器Sass介绍Sass的特性解释Sass…