TCP连接的最大数据包大小是多少,或者如何获得最大数据包大小?
当前回答
如果您使用的是Linux机器,“ifconfig eth0 mtu 9000 up”是设置接口mtu的命令。然而,我不得不说,如果网络传输不是那么稳定,大MTU有一些缺点,它可能会使用更多的内核空间内存。
其他回答
TCP API中没有包。
底层协议中通常有一些数据包,比如TCP在IP上运行时,你对这些数据包不感兴趣,因为它们与用户没有任何关系,除了非常微妙的性能优化,你可能对这些性能优化不感兴趣(根据问题的提法)。
如果你问在一个API调用中可以发送()的最大字节数是多少,那么这取决于实现和设置。您通常会调用send()来获取最多几千字节的数据块,并随时准备好系统完全或部分拒绝接受它,在这种情况下,您必须手动管理将数据分割为更小的数据块,以便将数据送入TCP send() API。
通常,这取决于连接使用的接口。您可以使用ioctl()来获得MTU,如果是以太网,通常可以通过从硬件头的大小减去硬件头的大小来获得最大数据包大小,对于没有VLAN的以太网,硬件头的大小为14。
只有当整个网络的MTU至少有这么大时,才会出现这种情况。TCP可能使用路径MTU发现来减少有效MTU。
问题是,你为什么这么在乎?
似乎互联网上的大多数网站都使用1460字节作为MTU值。有时它是1452,如果你是在VPN上,它会为IPSec头降低更多。
默认窗口大小变化很大,最大可达65535字节。我使用http://tcpcheck.com查看我自己的源IP值,并检查其他互联网供应商正在使用什么。
IP协议(Ip4)中TCP设置的包大小。对于这个字段(TL),分配了16位,因此数据包的最大大小为65535字节:IP协议细节
根据http://en.wikipedia.org/wiki/Maximum_segment_size的说法,网络上IPV4数据包的默认最大大小是536字节(字节大小为8位)。参见RFC 879