TCP连接的最大数据包大小是多少,或者我如何获取最大数据包大小?
TCP连接的最大数据包大小是多少,或者我如何获取最大数据包大小?
TCP数据包的绝对限制大小为64K(65535字节),但实际上这比您将看到的任何数据包的大小都要大得多,因为较低层(例如以太网)的数据包大小更小。
例如,以太网的MTU(最大传输单元)为1500字节。一些类型的网络(如令牌环)具有更大的MTU,而某些类型则具有较小的MTU,但每种物理技术的值都是固定的。
1480 左右
应该改成 1460
。IP 头和 TCP 头至少各占用 20 字节(除非使用了可选的头部字段),因此在(非巨型帧)以太网中,最大传输单元为 1500 - 20 - 20 = 1460
。 - Evgeniy BerezovskyTCP API 中没有数据包。
通常底层协议中会有数据包,例如当 TCP 在 IP 上完成时,你可能对它们没有兴趣,因为除了非常微妙的性能优化之外,它们与用户无关(根据问题的表述)。
如果你问一次 send()
调用可以发送的最大字节数是多少,则这取决于实现和设置。通常,你会调用 send() 发送几千字节的数据块,并始终准备好系统完全或部分拒绝接受它的情况,在这种情况下,你将必须手动将数据拆分成较小的块,以将其馈送到 TCP send() API 中。
如果您使用的是Linux机器,“ifconfig eth0 mtu 9000 up”是设置接口MTU的命令。但是,我必须指出,如果网络传输不够稳定,则大MTU会有一些缺点,并且可能会使用更多内核空间的内存。