Linux性能学习(4.2):网络_为什么MTU是1500

news2024/9/21 2:34:39

文章目录

  • 1 基本概念
  • 2 为什么MTU是1500
  • 3 有效载荷最大是1500吗
  • 4 Linux下如何修改MTU

参考资料:
1. RFC894
2. 什么是MTU(Maximum Transmission Unit)?

1 基本概念

Maximum Transmission Unit,缩写MTU,即最大传输单元。即发送端一次能够发送报文的最大字节数。

网络中的数据传递以数据包为单位进行的,如果一个数据包过大,表示通信效率更高,但是数据包大延迟就大,数据异常的概率就大,数据丢失时重传的损耗也就更大;如果数据包过小,同样的数据量需要发送很多包,那么通信效率就会很小。因此会默认定一个最大MTU,可以提高通信效率,一般默认是1500。

MTU是数据链路层的概念,网络中一些常见链路层协议MTU的缺省数值如下:
FDDI协议:4352字节
以太网(Ethernet)协议:1500字节
PPPoE(ADSL)协议:1492字节
X.25协议(Dial Up/Modem):576字节
Point-to-Point:4470字节

2 为什么MTU是1500

早期的以太网规定以太帧的大小范围为:64 ~ 1518,以太帧头14字节,CRC数据4字节,去掉这16个字节,以太帧的范围为46~1500。
在这里插入图片描述

以太帧的范围为46~1500,如果数据大小小于46字节,那么就会在数据后面进行填充到最小值46个字节。

3 有效载荷最大是1500吗

那么问题来了,这个1500是有效载荷的最大数据吗?
开发者在传输有效数据时候,网络栈会根据开发者使用的网络协议从上往下进行层层封装,当达到数据链路层时候,最大的字节数为1500字节。

以UDP通信为例,在传输层会加上8字节的UDP头,在网络层会加上20字节的IP头,然后在网络接口层,则会加上以太帧头和CRC总共18字节,达到最大值1518字节。在这种情形下最大的有效载荷是1500-UDP头(8字节)-IP头(20字节)= 1472字节,即UDP通信场景下,一包数据的最大有效载荷为1472个字节。

上面说的发送单个包的最大有效载荷大小,是应用层的有效载荷只够只发送一个数据包的情况。实际上如果应用层发送的有效载荷超过一个数据包,那么单个包的有效最大载荷应该是1500-IP头(20字节)= 1480字节。假如我们要发送2952字节的有效数据,那么在传输层加上8字节的UDP头,大小为2960字节。在网络层加上20字节IP头,大小为2980字节,进行转发时候,发现IP报文长度超过了1500,就会分片处理。会分为两个包:

  • 第一个包:IP头(20字节)+1480有效数据。其中,这1480数据实际上是8字节UDP头+1472有效数据;
  • 第二个包:复制第一个包的IP头20字节+剩余的有效载荷,即实际载荷2952-第一包发送的有效载荷1472=1480字节。

在TCP通信中,会在建立连接时协商最大数据分段长度MSS,通常MSS为1500(MTU)- 20(IP头) -20 (TCP头)=1460字节。

TCP通信和UDP通信的分片不一样,UDP是在IP层,即网络层进行分片,如果分多包的话,后面的包是没有UDP头的,而TCP是在传输层层进行分段,每个包都是有TCP头的。

假如有效载荷为2000个字节,MSS为1460字节,那么在传输层会分为两包:

  • 第一包:TCP头(20字节)+1460有效数据;
  • 第二包:TCP头(20字节)+ 剩余的有效数据540字节(2000-1460=540)。
    然后这两包数据在网络层在加上20字节的IP头。
    在这里插入图片描述

4 Linux下如何修改MTU

在Linux下可以使用ifconfig指令来修改mtu的大小,如修改网卡wifi0的MTU为1000:

ifconfig wifi0 mtu 1000 up

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

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

相关文章

Python爬虫:Scrapy框架

🚀Python爬虫:Scrapy框架 🕷️ Scrapy介绍📦 Scrapy框架📁 Scrapy项目🔍 创建爬虫过程🕸️ 页面分析📑 提取信息🎉 完整代码📝 结语 在本篇博文中&#xff0c…

C++6.29思维,作业

有以下类定义&#xff0c;按要求实现剩余功能 #include <iostream> using namespace std;class Person { private:int age;int *p; public://无参构造Person():p(new int(89)){age 18;cout << "无参构造" << endl;}//有参构造Person(int age,int …

docker的容器

首先要关闭防火墙,不然会阻止连接 查询防火墙状态 systemctl status firewalld 如果是running的状态要关闭一下 关闭防火墙 systemctl stop firewalld 禁用防火墙(禁止开机启动) systemctl disable firewalld 容器的创建语句: docker run …

第11节 跟上板块轮动的节奏

板块 文章目录 板块什么是板块板块的分类板块的轮动 板块相关接口本节课任务 什么是板块 股票板块是一些具有相同特征的股票的集合&#xff0c;命名通常也会简单明了的直接按照特征命名。例如沪深300板块&#xff0c;蓝筹板块。对上市公司进行“分班”不论是对于企业还是对于投…

Leetcode-每日一题【148.排序链表】

题目 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3]输出&#xff1a;[1,2,3,4] 示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0]输出&#xff1a;[-1,0,3,4,5] 示例 3&#xff1…

VC++多文档项目同时显示多个文本文件

VC6新建一个多文档工程&#xff1b;工程名为txt&#xff1b;生成的类如下&#xff1b;与单文档项目相比多了一个ChildFrm&#xff1b; 在类向导为Doc类添加OnOpenDocument函数&#xff1b; 此时生成的OnOpenDocument()函数如下&#xff1b; BOOL CTxtDoc::OnOpenDocument(LPCT…

Python基础 —— 条件语句

考虑了好久&#xff0c;不知道是先写条件循环&#xff0c;还是先写数据类型,因为如果先写条件循环的话&#xff0c;要涉及到数据类型的内容&#xff1b;先写数据类型的话&#xff0c;又要设计到条件循环的内容…纠结一番后&#xff0c;决定还是先说条件循环&#xff0c;再在数据…

chatgpt赋能python:用Python抓取数据:提高SEO的关键

用Python抓取数据&#xff1a;提高SEO的关键 在数字化时代&#xff0c;数据已经变成了最宝贵的财富之一。然而&#xff0c;对于企业和网站管理者来说&#xff0c;数据仅仅是有价值的当它被收集和转化成行动中存在的信息。这时&#xff0c;Python成为了一个有用的工具&#xff…

基于VORS、CCDM模型、GeoDetector、GWR模型集成技术在城镇化与生态系统健康空间关系分析及影响效应中的应用

城市群是一国经济发展水平的象征&#xff0c;也是一国经济发展到一定阶段的标志&#xff0c;我国城市群建设体量不断增加&#xff0c;将成为全球经济的核心&#xff0c;中国城市群的建设逐步引领全球进入到了21世纪的中国新时代。然而&#xff0c;高速的城镇化发展&#xff0c;…

leetcode题集训 sql

目录 背景步骤175组合两个表&#xff08;多表联查&#xff09;176 177 第n高的薪水&#xff08;Distinct关键字 排序&#xff09;178分数排名 &#xff08;排序 order over关键字&#xff09;179 连续出现的数字 &#xff08;模拟多张表联查&#xff09;181. 超过经理收入的员工…

学号编码:TooY0ung的学院(结构体)

根据66十二位编码规则&#xff0c;用城市代码和出生年编制学号。 【本笔记适合初通算法的 coder 翻阅】 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础…

Web-文件上传漏洞总结

目录 1、常规前端绕过 2、修改文件类型 3、使用 .user.ini 或 .htaccess&#xff08;可能还存在大小写绕过&#xff09; 4、使用字典爆破可行后缀 5、结合文件包含漏洞使用图片马 6、条件竞争 1、常规前端绕过 如下图&#xff0c;在前端存在限制&#xff0c;只能上传图片…

springboot校园点餐小程序

校园点餐系统 springboot校园点餐系统小程序 java校园点餐小程序 技术&#xff1a; 基于springbootvue小程序校园点餐系统的设计与实现 运行环境&#xff1a; JAVA版本&#xff1a;JDK1.8 IDE类型&#xff1a;IDEA、Eclipse都可运行 数据库类型&#xff1a;MySql&#xff08;…

GPT模型训练实践(2)-Transformer模型工作机制

Transformer 的结构如下&#xff0c;主要由编码器-解码器组成&#xff0c;因为其不需要大量标注数据训练和天然支持并行计算的接口&#xff0c;正在全面取代CNN和RNN&#xff1a; 扩展阅读&#xff1a;What Is a Transformer Model? ​ ​ 其中 编码器中包含自注意力层和前馈…

HCIA回顾笔记整理

OSI 7层参考模式 开放式系统互联参考模型 应用层 抽象语言--> 编码 表示层 编码-->二进制 会话层 提供应用程序地址 -- 无标准 上三层&#xff0c;应用程序加工数据的部分 下四层&#xff0c;数据流层 负责数据传输 传输层 数据分段&#xff08;…

Hive基础知识

1.Hive简介 Hive是由Facebook开源用于解决海量结构化日志的数据统计工具。Hive是基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张表&#xff0c;并提供类SQL查询功能。 2.Hive本质 Hive的本质是将HQL转化成MapReduce程序。 Hive处理的数据存储在H…

Git远程操作

目录 分布式版本控制系统 远程仓库 新建远程仓库 管理仓库 issue Pull Request 克隆远程仓库到本地 向远程仓库推送 拉取远程仓库 配置git 忽略特殊文件 给命令配置别名 分布式版本控制系统 我们之前所说的所有内容&#xff0c;都是在本地&#xff0c;也就是只在你的…

Java——抽象类和接口

一、抽象类 1.1、抽象类 使用abstract关键字定义的类称为抽象类 public abstract class Employee {private String name;private int number; }在 Java中抽象类不可以实例化为对象。例如&#xff1a; 1.2、抽象方法 使用abstract关键字定义的方法称为抽象方法。抽象方法没…

IDEA自动导入包

问题 IDEA如何自动导入包 详细问题 项目开发中&#xff0c;笔者常常先将光标瞄准所需导入的类&#xff0c;后使用快捷键AltEnter进行导包操作。这种方式需要逐个处理&#xff0c;相对费事费力&#xff0c;IDEA如何自动导入所有程序所涉及的包呢 解决方案 1、左上角 F i l …

基于Elman神经网络的电力负荷预测(附源码)

一、算法原理 Elman神经网络是一种典型的动态递归神经网络&#xff0c;它是在BP网络基本结构的基础上&#xff0c;在隐含层增加一个承接层&#xff0c;作为一步延时算子&#xff0c;达到记忆的目的&#xff0c;从而使系统具有适应时变特性的能力&#xff0c;增强了网络的全局稳…