计算机网络概念
吞吐量(Throughput)
吞吐量是指对网络、设备、端口、虚电路或其他设施,单位时间内成功地传送数据的数量(以比特、字节、分组等测量)。
分组延迟/包延迟(Packet Delay/Latency)
结点处理延迟
分组到达路由器,路由器要对这个分组进行处理,处理包括检查分组有没有错误(差错检测),根据分组携带的地址信息决定将分组在哪个链路发出去。这个延迟称为结点处理延迟。
排队延迟
当分组确定从某一链路传出,但这一链路刚好在传输其他的分组,就要在结点排队等待,这个时间称为排队延迟。排队延迟很不确定。
传输延迟(Transmission Delay)
当某一链路开始传输分组时,从分组的第一个 bit 开始到最后一个 bit 发完,需要的时间称为传输延迟。排队延迟取决于分组长度和链路带宽,分组越长所需时间也越长,链路带宽表示能以怎样的速率发送。
传播延迟(Propagation Delay)
当分组从某一结点发出后,到达下一个结点所花的时间,传播延迟取决于物理链路的长度和信号的传播速度。
往返时延(Round-Trip Time)
从客户端发送请求,到它从服务端接收到反馈信息中间所花费的时间称为往返时延。
报文最大生存时间(Maximum Segment Lifetime)
任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。TTL 与 MSL 是有关系的但不是简单的相等的关系,MSL 要大于等于 TTL。
资源分配(Resource Allocation)
Max-min fairness
瓶颈链路(Bottleneck Link)
MTU(Maximum Transmission Unit)
首先要明白在 TCP/IP 协议栈中的以下 5 个概念:
- 数据帧(Frame):它的起始点和目的点都是数据链路层(二层),其包含链路层的头部(MAC 地址等等)。
- 数据包(Packet):一般指代网络层(三层)的传输单元,当传输层协议为 UDP 时,其也可以称作 UDP 数据包,用以与 IP 数据包作区分。
- 数据报(Datagram):一般指代当传输层(四层)协议为 UDP 时的传输单元,有时三层的单元也可以称为数据报,也就是 IP 数据报,所以也有 UDP 数据报来加以区分。
- 段(Segment):当传输层(四层)协议为 TCP 时的信息单元。
- 消息(message):网络层以上(经常在应用层(五层))的信息单元。
以上的所有都是包含本层头部的。
那么什么是 MTU 呢?
In computer networking, the maximum transmission unit (MTU) is the size of the largest protocol data unit (PDU) that can be communicated in a single network layer transaction. The MTU relates to, but is not identical to the maximum frame size that can be transported on the data link layer, e.g. Ethernet frame.
在维基百科中提到了 MTU 是最大的 PDU,那么什么又是 PDU 呢?
In telecommunications, a protocol data unit (PDU) is a single unit of information transmitted among peer entities of a computer network. A PDU is composed of protocol-specific control information and user data. In the layered architectures of communication protocol stacks, each layer implements protocols tailored to the specific type or mode of data exchange.
从维基百科中,我们可以看到,PDU 是包含头部信息的。
那么综合来看,MTU 则是网络层的包包含网络层的头部的最大的值。由于以太网的最大传输字节为 1518,减去 18 个字节的以太网传输头部和尾部,那么 MTU 的最大值为 1518-18=1500 字节:
Maximum Transmission Unit
,缩写 MTU
,中文名是:最大传输单元。
MTU
是数据链路层的概念。MTU
限制的是数据链路层的 Payload
,也就是上层协议的大小,例如 IP
,ICMP
等。
MTU 越大,开销越小,这句话是很容易理解的,更大的 Frame 意味着包含的有效数据也就更多。较小的 MTU 值可以减少网络延迟,而且如果一大段数据里面有一个 bit 出错了,这一大段就会整个重传,重传的代价是很大的。
如果超过了,需要分片:
为什么分片不好?
额外的处理开销。
为什么需要 MTU?
从上面的图可以看出来,以太帧头里面仅仅有源 MAC, 目的 MAC, 类型和 CRC 校验四种数据。并没有包含整个数据包的长度信息,这是因为以太网根据物理层信号变化来标识帧的起始和结束。根源在于没有必要在每一层协议都指定长度,这存在信息冗余。
同时,类型字段其实有双重用途。若该字段值 ≥1536(0x0600),则解释为类型;否则为长度。这种设计兼容两种标准。
-
Ethernet II:使用类型字段(Type,2 字节)指示上层协议(如 IPv4 为
0x0800
),依赖上层协议(如 IP 头中的总长度字段)处理数据分段。 - IEEE 802.3:同一字段作为长度字段,表示数据部分的字节数(范围 0-1500)。接收方通过固定头部长度(14 字节)和尾部 FCS(4 字节)计算总帧长。
MTU 分帧这件事是谁来做的?
路由器,主机网络协议栈。
网络传输前的 MTU 协商机制
MTU 是操作系统的概念,还是网卡的概念?/ 我们在 Linux 系统中设置 MTU 时,设置的是什么?
因为网卡是一个二层设备^,也就是说操作系统把 MAC(网关的)地址已经填写在包里了,这部分应该是软件做的。Linux 网络协议栈(包含驱动)和网卡硬件的接口。
我们在 Linux 系统中设置网卡 MTU 的时候,设置的是什么?
当数据包经过隧道时,外层会添加额外的头部(如 IPsec 头、GRE 头),导致 实际有效载荷减少。例如:原始以太网 MTU=1500,但经过 IPsec 隧道封装后,外层 MTU 可能变为 1500 - 50(IPsec 头部) = 1450。此时需在操作系统中将 MTU 设为 1450,确保 IP 层生成的数据包加上隧道头部后不超过底层链路的 MTU。
当两端的 MTU 不匹配时,会发生什么?
若发送方设置了 DF(Don't Fragment)标志(常见于 TCP 的路径 MTU 发现机制),且数据包超过路径 MTU,那么中间路由器会进行丢包。
MTU 不匹配可能导致分片、丢包或性能下降,但通过路径 MTU 发现和合理配置(MTU/MSS)可规避多数问题。关键在于确保网络允许 ICMP 反馈,并正确处理协议协商。
以太网 MTU 值为 1500 是谁规定的?
以太网的 MTU(最大传输单元)值 1500 字节是由 IEEE 在 802.3 标准中明确规定的。这一规定源于对网络传输效率与硬件限制的权衡,并成为以太网的核心设计之一。
如何保证发送的数据不超过 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 呢?
- IP 层(网络层)问数据链路层数据最大传输单元( MTU )是多少
- TCP 层会问 IP 层数据最大传输大小(Maximum packet size)是多少
这样 TCP 层就会知道自己的最大传输数据大小,叫做 MSS(Maximum segment size)
在 TCP 的握手阶段,MSS(Maximum Segment Size)是用于指定 TCP 报文段中数据部分的最大长度。对于 TCP 来说,知道自己的 MSS 没有什么用。例如作为接收端来说,收到的包大小取决于发送端,得让发送端知道自己的 MSS 才行。所以在建立 TCP 连接时,双方需要协商一个合适的 MSS 值,以便在数据传输过程中进行分片和重组。
RTO(Retransmission Timeout)
为了防止数据报丢失,当 TCP
发送一个报文时,就启动重传计时器,有 2 种情况:
- 若在计时器超时之前收到了特定报文的
ACK
,则撤消这个计时器。 - 若在计时器超时之前未收到特定报文的
ACK
,则重传该数据报,并把计时器复位。
SMSS(Sender Maximum Segment Size)
发送方能发送的最大段的大小。这个值基于网络中的最大传输单元(MTU),这个值不包括 TCP/IP 头部和选项。
RFC 5681: The SMSS is the size of the largest segment that the sender can transmit. This value can be based on the maximum transmission unit of the network, the path MTU discovery [RFC1191, RFC4821] algorithm, RMSS (see next item), or other factors. The size does not include the TCP/IP headers and options.