6

TCP 的数据报大小限制

 3 years ago
source link: https://liqiang.io/post/tcp-data-frame-size-limit?lang=ZH_CN
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

All Posts

TCP 的数据报大小限制

@SOLUTION· 2021-08-31 23:06 · 2 min read

对于 TCP 我们都非常熟悉了,三次握手,可靠传输这些名词都是了然于胸的,但是,有一些其他的事情也很有趣,例如你知道一个 TCP send 的大小限制是多少吗?

我们不妨回顾一下 TCP 的发送过程,首先是应用层调用一个 send 将数据从用户态放到内核态,这中间过程比较复杂,但是可以不表,然后再由内核态交给硬件 - 网卡,然后再发送出去。我们其实也很清楚,这中间每一层都有分段的概念,例如 TCP 会分段,IP 会分片。

  • TCP 会分段是因为拥塞控制和流量控制
  • IP 会分片是因为网络的 MTU(Maximum Transmission Unit)

那么假设我用一根网线直接将两台 PC 直连,那一个大的 TCP 包也会分段吗?如果不一定,那么最大可以发送的 TCP 包是多大?

从链路层开始推断起吧,MTU 一般都不会超过,常见的数值应该是 1500,所以 IP 层以及之上再大到这里也是会被分开;假设忽略这个,再来就是 IP 层了,IP 层的最大大小是 65535,去掉 20 byte 的头部,那就是 65515 bytes 了,这里可以不分片,再来就是 TCP 了,最短 20,然后就剩下 65515-20,那就是 65495 bytes 了,这就是可承载的最大报文数据段了。

  • 理论上最大的 TCP 有效最大数据长度是:65495(瓶颈:IP 分片长度)
  • 实际上最大的 TCP 有效最大数据长度是:1460(1500-20-20,瓶颈:MTU)
© 2012-2020 路人的技术 版权所有. Powered by LauZoo. Theme based on Nuo.

Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK