TCP连接的最大数据包大小是多少,或者如何获得最大数据包大小?
发布于 2010-04-11 01:05:00
TCP包大小的绝对限制是64K (65535字节),但实际上这比你看到的任何包的大小都要大得多,因为较低的层(例如以太网)的包大小较小。
例如,用于以太网的MTU (最大传输单元)是1500字节。某些类型的网络(如令牌环)具有较大的MTU,而某些类型具有较小的MTU,但这些值对于每种物理技术都是固定的。
发布于 2010-06-19 13:05:48
这是一个很好的问题,实际上我在工作中经常遇到这个问题。有很多“技术正确”的答案,比如65k和1500。我做了很多写网络接口的工作,使用65k是愚蠢的,1500也会给你带来大麻烦。我的工作在许多不同的硬件/平台/路由器上进行,老实说,我从1400字节开始。如果你需要超过1400,你可以开始一寸一寸地往上爬,你可能会到1450,有时到1480左右?如果你需要更多,那么你当然需要分成两个包,其中有几种明显的方法。
问题是,您正在讨论创建一个数据包并通过TCP将其写出,但当然还有附加的报头数据等等,所以您的“行李”会使您达到1500或更高。而且很多硬件都有较低的限制。
如果你“推动它”,你会得到一些非常奇怪的事情。显然是截断的数据,或者是我很少看到的丢弃的数据。损坏的数据也很少,但肯定会发生。
发布于 2010-04-10 23:10:28
在应用程序级别,应用程序使用TCP作为面向流的协议。TCP反过来又有分段,并抽象出处理不可靠IP数据包的细节。
TCP处理数据段而不是数据包。每个TCP数据段都有一个包含在TCP报头中的序列号。在TCP数据段中发送的实际数据是可变的。
在您可以使用的某些操作系统上,有一个名为TCP_MAXSEG的getsockopt值,它可以检索最大的TCP段大小(MSS)。不过,并不是所有操作系统都支持它。
我不确定你到底想做什么,但是如果你想减少使用的缓冲区大小,你也可以看看: SO_SNDBUF和SO_RCVBUF。
https://stackoverflow.com/questions/2613734
复制相似问题