网络流量传输MTU解析

news2024/11/24 13:07:12

基本概念

  1. 以太网的链路层对数据帧的长度会有一个限制,其最大值默认是1500字节,链路层的这个特性称为MTU,即最大传输单元

  2. Maximum Transmission Unit,最大传输单元,指的是数据链路层的最大payload,由硬件网卡设置MTU,是一个硬性限制

以太网报文结构图

由图所示,数据链路层的有效数据,最小46byte,最大一般1500byte,这里的最大就是MTU,MTU表示网络层必须将发给网卡API的包 <= 1500byte,否则会被丢弃

问题理解

MTU是链路层对网络层的限制,以太网链路的MTU默认是1500byte,意思是以太网数据链路层的有效数据payload的最大字节数不能超过1500,那这1500字节包含链路层的头部和尾部吗?

答:当然不包含!

有的以太网网卡配置了VLAN tag,通过此网卡的数据帧会携带VLAN tag,VLAN tag要算在链路层的payload里吗?或者可以说MTU = 1500里包含802.1Q的头部VLAN tag吗?

答:包含!

当网卡配置VLAN tag时,VLAN tag + Data <= MTU,有时VLAN tag不只有一个,可能是双标签,那这个VLAN tag就是8个字节。这时候的MTU如果还是1500,链路层的payload就不可能是1500了,怎么办?

答:可以把添加802.1Q的接口设置MTU=1504或1508

为什么要有MTU?
以太网最初对报文长度没有限制,网络层最大可以接收65535个字节,但是以太网对于长报文无法可靠地传输,而且丢失后重传也会占用大量的网络资源,而将报文限制在一定的长度,以太网可以将报文大概率传输到目的地,于是就有了MTU

合理的MTU会让我们获得更快的网速,MTU怎么设置更合理呢?

1、本地MTU值大于网络MTU值时,本地传输的数据包过大导致网络会拆包后传输,不但产生额外的数据包,而且消耗了“拆包、组包”的时间

2、本地MTU值小于网络MTU值时,本地传输的数据包可以直接传输,但是未能完全利用网络给予的数据包传输尺寸的上限值,传输能力未完全发挥

3、这样我们就知道,所谓合理的设置MTU值,就是让本地的MTU值与网络的MTU值一致,既能完整发挥传输性能,又不让数据包拆分。

IP分片

底层流量截获检测,这时需要重组包才能检测完成流量包

链路层的payload有MTU限制,意味着网络层下发到链路层的数据不能超过MTU,如果超过了,就需要在网络层分片,切成<=MTU的IP数据包。

网络层如果发现链路层的MTU小于IP包的大小(网络层可以调用函数获取链路层信息),也并不会立刻开始分片,还需要看IP包的是否允许分片位DF(Don’t Fragment),如果允许分片,就会分成多个ID一样的IP包

主机的网络层可以分片,路由器的网络层也可以分片,也就是说路由器的网络接口也有MTU限制,就像木桶理论一样,木桶能装多少水取决于最短的那块,网络通信的路径上决定IP包大小的,取决于源主机、目的主机、路由器中MTU最小的那个

对于UDP包,如果MTU = 1500,那么udp payload最大值是多少,才可以不用分片?

答:MTU(1500) = IPHeader(20) + UDPHeader(8) + Data Data = 1500 -20 - 8 = 1472,如果UDP包的Data <= 1472个字节,UDP包(UDPHeader+Data)在网络层不用分片,直接封装上IPHeader发往链路层

如果UDP包的payload > 1472,那么UDP包(UDPHeader + Data)在网络层需要分片,如何分片?

答:网络层并不会在每个分片里复制一次UDP头,它是把完整的UDP包切开,加上IP头发送出去,除了第一个分片有UDP头,后面的分片都不包含UDP头

目的主机的网络层接收到多个UDP分片包后,网络层必须重组才能交给上层,为什么?

答:因为多个分片包只有第一个是有UDP头的,它可以根据UDP头里的端口号通知相应的应用取走,但是后面的分片包由于没有UDP头,传输层无法把分片包交给正确的应用程序。所以UDP分片包必须在网络层重组成一个完整的UDP包,交给传输层处理

网络层根据什么重组呢?还记得上面说的,分片的时候会分成多个ID一样的IP包吗?

答:如果某些分片包没有被目的主机的网络层接收到,造成UDP包重组失败,接收方会丢弃整个数据包,这是UDP不可靠传输的一个表现。而TCP发生组包错误时,该包会被重传,保证可靠传输

对于UDP来说,一般选择576个字节通信

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

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

相关文章

高压放大器在孔道灌浆非线性超声测试中的应用

实验名称&#xff1a;高压放大器在孔道灌浆非线性超声测试中的应用研究方向&#xff1a;无损检测测试目的&#xff1a;超声波作为频率高于20kHz的声波被广泛应用于各类结构的无损检测中&#xff0c;以超声波作为探伤波的无损检测法称为超声波无损检测法&#xff0c;简称超声波法…

嵌入式开发:通过嵌入式虚

嵌入式虚拟化为实现多核处理能力的优势提供了一种可扩展的机制。嵌入式应用中的虚拟化与其企业和桌面应用有许多共同之处。独特的嵌入式使用案例和专业的底层技术为嵌入式开发人员提供了优化性能和响应设计的新机会。在台式机、数据中心以及现在的嵌入式设计中采用多核技术可以…

React hooks之useState用法(一)

系列文章目录 学习React已经有很长的一段时间了&#xff0c;今天决定重新回顾一下跟React相关的一些知识点 文章目录系列文章目录结构如下一、hooks是什么&#xff1f;useState可以能做什么二、如何使用useState&#xff08;&#xff09;第一步&#xff1a;创建【函数组件&…

java 代码

java 分层架构的由来目录概述需求&#xff1a;设计思路实现思路分析参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Survive. ha…

运维必会:ansible剧本(piaybook)

playbooks 概述以及实例操作 Playbooks 组成部分&#xff1a; Inventory Modules Ad Hoc Commands Playbooks Tasks: 任务&#xff0c;即调用模块完成的某些操作 Variables: 变量 Templates: 模板 Handlers: 处理器&#xff0c;由某时间触发执行的操作 Roles: 角色 YAML 介绍…

Individual Tree Segmentation from LiDAR Point Clouds for Urban Forest Inventory

Abstract 本研究的目的是使用 LiDAR 点云数据开发单棵树级别的自动化城市森林清单的新算法。激光雷达数据包含三维结构信息&#xff0c;可用于估算树高、基高、树冠深度和树冠直径。这使得精确的城市森林库存可以细化到单棵树。与大多数已发布的从 LiDAR 派生的栅格表面检测单…

学了这么久python,不会连自己啥python版本都不知道吧?

人生苦短&#xff0c;我用Python 源码资料电子书:点击此处跳转文末名片获取 查看 Python 版本 我们可以在命令窗口(Windows 使用 winR 调出 cmd 运行框)使用以下命令查看我们使用的 Python 版本&#xff1a; python -V 或 python --version 以上命令执行结果如下&#xff1a; …

Axure 初学者容易涉及的雷区

​工具学习是成为产品经理的一部分学习&#xff0c;工具学习总是伴随着痛苦和煎熬的&#xff0c;因为学习本身就伴随着枯燥和重复。 在未来你的Axure学习可能会出现这些情况呢&#xff1f;还没接触过axure的或者打算进行axure的朋友可能会有疑问。这里根据我们学员学习axure的经…

CentOS8基础篇4:使用U盘备份文件

一、挂载点 所谓的挂载点就是文件系统中存在的一个目录&#xff0c;通常情况下&#xff0c;创建在/mnt目录下&#xff0c;挂载成功后&#xff0c;访问挂载点就是访问新的存储设备。 挂载点应该是空目录&#xff0c;否则原来该挂载点中存在的文件将会被隐藏。而且&#xff0c;…

谷粒学苑第二章前端框架-2.1登录功能

一、vue-admin-template的config模块 vue-admin-template支持多环境&#xff0c;config配置模块提供了dev和prod两种环境。而BASE_API存储的是URL前部分&#xff0c;再拼接上controller的URL&#xff0c;即是完整的URL。修改为自己的协议://ip:port 二、vue-admin-template的s…

.net6API使用SignalR+vue3聊天+WPF聊天

目录 一、.net6api接口 二、vue3前端 三、WPF客户端 此案例分为3部分。首先创建.net6api接口&#xff0c;然后使用前端vue3进行聊天&#xff0c;再使用wpf客户端进行聊天&#xff0c;并且互通聊天。 一、.net6api接口 1.首先建立一个能正常运行的api&#xff0c;然后增加Ch…

redis未授权访问漏洞的三种场景复现以及加固思路

1.redis简介 redis是一个 非常快速 的&#xff0c;开源的&#xff0c;支持网络&#xff0c;可以基于内存&#xff0c;也可以持久化的日志型&#xff0c; 非关系型 的键值对数据库。并提供了多种语言的api。有java&#xff0c;c/c,c#,php&#xff0c;JavaScript&#xff0c;per…

1.Linux编程-gcc编译器

gcc的工作流程 gcc编译器将c源文件到生成一个可执行程序,中间一共经历了四个步骤: 四个步骤并不是gcc独立完成的,而是在内部调用了其他工具,从而完成了整个工作流程, 其中编译最耗时, 因为要逐行检查语法. gcc的工作流程: 1 预处理: cpp预处理器, 去掉注释, 展开头文件, …

Java进程CPU高负载排查步骤

近期发现服务器Java进程负载&#xff0c;超过100%一、采用top命令定位进程登录服务器&#xff0c;执行top命令&#xff0c;查看CPU占用情况&#xff0c;找到进程的pid很容易发现&#xff0c;PID为29706的java进程的CPU飙升到700%多&#xff0c;且一直降不下来&#xff0c;很显然…

python—requests模块详解

一、前言 1、requests简介 requests是一个很实用的Python HTTP客户端库&#xff0c;爬虫和测试服务器响应数据时经常会用到&#xff0c;它是python语言的第三方的库&#xff0c;专门用于发送HTTP请求&#xff0c;使用起来比urllib更简洁也更强大。 2、requests库的安装 方法…

CUDA中的数学方法

CUDA中的数学方法 文章目录CUDA中的数学方法1. Standard FunctionsSingle-Precision Floating-Point FunctionsDouble-Precision Floating-Point Functions2. Intrinsic FunctionsSingle-Precision Floating-Point FunctionsDouble-Precision Floating-Point Functions参考手册…

ROPR:一款功能强大的极速多线程ROPGadget查找工具

关于ROPR ROPR是一款速度极快且功能强大的ROPGadget查找工具&#xff0c;该工具支持多线程运行&#xff0c;可以帮助广大研究人员快速寻找和定位目标ROPGadget。 ROP&#xff08;Return Oriented Programming&#xff09;&#xff0c;即返回导向编程&#xff0c;而ROPGadget是…

算法训练营DAY52|1143.最长公共子序列、1035.不相交的线、53. 最大子序和

前两道题思路是一模一样的&#xff0c;但是需要认真理解&#xff0c;最后一道虽然思路不算难&#xff0c;但是需要注意的细节一点不少。 1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/longest-common-subsequence/最长公共子序列…

2-ChatGPT插件到Google浏览器、Firefox浏览器,并进行ChatGPT工作。

ChatGPT插件到Google浏览器、Firefox浏览器&#xff0c;并进行ChatGPT工作。1&#xff0c;首先&#xff0c;在装插件ChatGPT forGoogle插件时&#xff0c;我没安装成功&#xff0c;问题是我没有区分Google浏览器和双核浏览器的差别。2&#xff0c;如何使用ChatGPT在浏览器上进行…

基于北方苍鹰算法优化LSTM(NGO-LSTM)研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…