计算机网络那些事之 MTU 篇

这篇具有很好参考价值的文章主要介绍了计算机网络那些事之 MTU 篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

哈喽大家好,我是咸鱼

 

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

 

什么是 MTU ?

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

 

通俗点来讲,MTU 是指数据链路层能够传输的最大数据帧的大小(以字节为单位)

计算机网络那些事之 MTU 篇

 以 CentOS 7 为例,可以通过 ifconfig 命令来查看 MTU 值

计算机网络那些事之 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校验)

 

计算机网络那些事之 MTU 篇

 

18 字节用于帧头和帧尾,其中 CRC 校验占据 4 字节,剩下的 1500 字节就是最大数据载荷(Payload)

 

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

 

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

 

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

 

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

 

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

 

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

 

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

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

 

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

 

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

 

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

 

第三次 1060字节(IP header 20 字节 + Payload 1040 字节)

 

计算机网络那些事之 MTU 篇

 

 

可能有小伙伴问,那我传的数据大小不够数据帧规定的最小 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

 

如果你去抓一下包看看,你可能会遇到下面这种情况

计算机网络那些事之 MTU 篇

 

明明协商了 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 是指数据链路层能够传输的最大数据帧的大小(以字节为单位)。由于历史原因,MTU 的值最小为 64 字节,最大为 1518 字节(Payload 则是 46~1500 字节)

    • 如果发送的数据大于 MTU,则就会进行分片操作;如果小于 MTU,就会在实际数据内容后面添加填充数据,使得数据包总长度达到最小长度要求

    • MSS(Maximum Segment Size)是用于指定 TCP 报文段中数据部分的最大长度。在建立 TCP 连接时,双方需要协商一个合适的 MSS 值以便在数据传输过程中进行分片和重组

    • TSO(TCP Segmentation Offload)是一种网络传输卸载技术。TSO 技术将分片过程从 CPU 转移到网卡上的专用硬件,网卡负责将应用程序的大块数据分段为适当大小的数据包,并添加 TCP 首部,然后直接发送到网络上文章来源地址https://www.toymoban.com/news/detail-502702.html

到了这里,关于计算机网络那些事之 MTU 篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计算机网络八股】计算机网络(一)

    计算机网络体系可以大致分为一下三种,OSI七层模型、TCP/IP四层模型和五层模型。 OSI七层模型:大而全,但是比较复杂、而且是先有了理论模型,没有实际应用。 TCP/IP四层模型:是由实际应用发展总结出来的,从实质上讲,TCP/IP只有最上面三层,最下面一层没有什么具体内

    2024年02月11日
    浏览(44)
  • 计算机网络----计算机网络的基础

    目录 一.计算机网络的相关概念 二.计算机网络的功能 三.计算机网络的发展 四.计算机网络的组成 五.计算机网络的分类 六.计算机的性能指标 1.速率 2.带宽 3.吞吐量 4.时延 5.时延带宽积 6.往返时延RTT 7.利用率 七.计算机的分层结构 八.ISO/OSI参考模型 九.OSI参考模型与TCP/IP参考模

    2024年03月17日
    浏览(45)
  • 计算机网络——计算机网络体系结构

    1.1 概念 一般认为,计算机网络是一个将分散的,具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享的信息传递的系统,简而言之,计算机网络就是一些 互联的,自治的计算机系统的集合 1.2 组成 (1)从组成部分:由 硬件,软件,

    2024年02月15日
    浏览(48)
  • 第一章 计算机网络概述【计算机网络】

    2023-3-26 17:07:26 以下内容源自《【计算机网络】》 仅供学习交流使用 计算机网络 计算机网络(第8版) 谢希仁 编著 1.2.1 网络的网络 计算机网络〈简称为网络)由若干结点(node) R和连接这些结点的链路(link)组成。 1.2.2互联网基础结构发展的三个阶段 请读者注意以下两个意思相

    2024年02月13日
    浏览(46)
  • 【计算机网络原理】第一章:计算机网络概述

    1、计算机网络的诞生 从技术范畴来看,计算机网络是计算机技术与通信技术相互融合的产物。 2、计算机网络的定义 计算机网络是互连的、自治的计算机的集合 1)自治: 互连的计算机系统彼此独立,不存在主从或者控制与被控制的关系。 2)互连: 利用通信链路连接相互独立

    2024年04月08日
    浏览(48)
  • 计算机网络-笔记-第一章-计算机网络概述

    一、第一章——计算机网络概述 二、第二章——物理层 三、第三章——数据链路层 四、第四章——网络层 五、第五章——运输层 六、第六章——应用层 目录 一、第一章——计算机网络概述 1、因特网概述 (1)网络、互联网、因特网 (2)因特网发展的三个阶段 (3)因特

    2024年02月11日
    浏览(49)
  • 【计算机网络】—— 详解码元,传输速率的计算|网络奇缘系列|计算机网络

    🌈个人主页:  Aileen_0v0 🔥系列专栏:  一见倾心,再见倾城  ---  计算机网络~ 💫个人格言: \\\"没有罗马,那就自己创造罗马~\\\" 目录 码元  速率和波特 思考1   思考2  思考3 带宽(Bandwidth)  📝总结 码元 是指用一个 固定时长的信号波形 _(数字脉冲),代表不同离散数值的基本波

    2024年02月04日
    浏览(56)
  • 【计算机网络】第一章、计算机网络体系结构

    1.计算机网络的组成 从不同的角度来看 内容 从组成上看 硬件、软件、协议 从工作方式上岸 边缘部分、核心部分 从功能上看 通信子网、资源子网 2.计算机网络的分类 角度 内容 分布范围 广域网、城域网、局域网、个域网 传输技术 广播式网络、点对点网络 拓扑结构 总线型

    2024年02月07日
    浏览(52)
  • 【计算机网络】计算机网络中的基本概念

    网络互连就是将多台计算机连接在一起,完成数据共享。数据共享本质是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信。根据网络互连的规模不同,可以划分为局域网和广域网。 局域网,即 Local Area Network,简称LAN。Local 即标识了局域网是本地,局部组

    2024年02月06日
    浏览(48)
  • 初识计算机网络 | 计算机网络的发展 | 协议初识

    1.计算机网络的发展 “矛盾是普遍存在的,矛盾是事物联系的实质内容和 事物发展的根本动力 !” 计算机在诞生之初,在军事上用来计算导弹的弹道轨迹!在发展的过程中( 商业的推动,国家政策推动 ),计算机的应用场景被发现!被应用于各种各样的场景当中! 现在,

    2024年01月25日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包