我有一个应用程序需要在 TCP 数据包中有一个固定的(516 字节)有效负载大小。应用程序本身无法修改以调整其设置,因此我需要调整操作系统的 TCP 缓冲区大小...
据我所知,TCP 缓冲区大小(SO_SNDBUF)可以进行调整,以便“自动调整”不会尝试在数据包中包含更多数据。
如果我将 SO_SNDBUF 调整为 516,这是否仅适用于有效载荷,还是会影响整个数据包(标头 + 有效载荷)?
答案1
如果将套接字上的 SO_SNDBUF 设置为 516,内核会将其加倍,并假定缓冲区必须为 1032 字节。该开销用于内核结构。
如果您创建一个 516 字节的消息缓冲区,填充它,然后调用 send() 或 sendto() 或 write(),那么这 516 字节将自动作为单个数据包在线路上发送。