首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >TCP连接的最大数据包大小

TCP连接的最大数据包大小
EN

Stack Overflow用户
提问于 2010-04-10 22:34:40
回答 10查看 400.1K关注 0票数 221

TCP连接的最大数据包大小是多少,或者如何获得最大数据包大小?

EN

回答 10

Stack Overflow用户

发布于 2010-04-11 01:05:00

TCP包大小的绝对限制是64K (65535字节),但实际上这比你看到的任何包的大小都要大得多,因为较低的层(例如以太网)的包大小较小。

例如,用于以太网的MTU (最大传输单元)是1500字节。某些类型的网络(如令牌环)具有较大的MTU,而某些类型具有较小的MTU,但这些值对于每种物理技术都是固定的。

票数 199
EN

Stack Overflow用户

发布于 2010-06-19 13:05:48

这是一个很好的问题,实际上我在工作中经常遇到这个问题。有很多“技术正确”的答案,比如65k和1500。我做了很多写网络接口的工作,使用65k是愚蠢的,1500也会给你带来大麻烦。我的工作在许多不同的硬件/平台/路由器上进行,老实说,我从1400字节开始。如果你需要超过1400,你可以开始一寸一寸地往上爬,你可能会到1450,有时到1480左右?如果你需要更多,那么你当然需要分成两个包,其中有几种明显的方法。

问题是,您正在讨论创建一个数据包并通过TCP将其写出,但当然还有附加的报头数据等等,所以您的“行李”会使您达到1500或更高。而且很多硬件都有较低的限制。

如果你“推动它”,你会得到一些非常奇怪的事情。显然是截断的数据,或者是我很少看到的丢弃的数据。损坏的数据也很少,但肯定会发生。

票数 94
EN

Stack Overflow用户

发布于 2010-04-10 23:10:28

在应用程序级别,应用程序使用TCP作为面向流的协议。TCP反过来又有分段,并抽象出处理不可靠IP数据包的细节。

TCP处理数据段而不是数据包。每个TCP数据段都有一个包含在TCP报头中的序列号。在TCP数据段中发送的实际数据是可变的。

在您可以使用的某些操作系统上,有一个名为TCP_MAXSEG的getsockopt值,它可以检索最大的TCP段大小(MSS)。不过,并不是所有操作系统都支持它。

我不确定你到底想做什么,但是如果你想减少使用的缓冲区大小,你也可以看看: SO_SNDBUF和SO_RCVBUF。

票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2613734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档