我正在使用带有SO_SENDBUF / SO_RECVBUF的setsockopt来设置具有256 * 1024字节的TCP的发送/接收缓冲区。 但是当我在wireshark中看到时,我可以看到TCP的“窗口大小”仅显示为1525。 wmem_max和rmem_max也设置为值131071(126 kb)。理想情况下,我预计它至少为128 kbps。 有人可以帮忙吗? 这也可能是wireshark的问题,它显示错误的“窗口大小”。
答案 0 :(得分:1)
您需要在服务器上的监听套接字上设置该大小,然后才能在任何accept()之前设置该大小,并且在连接之前需要在客户端上将其设置在套接字上。 这样你就可以让TCP的'window scaling'选项生效,这只能在连接握手期间发生。建立连接后为时已晚。这样,TCP接收窗口可以与接收缓冲区一样大,假设存在各种其他条件。
但是,除非您拥有一个具有超常带宽的极高延迟网络,否则256k可能会过大。将它设置为高于bandwidth-delay product
没有任何意义,{{1}}可以计算为以秒为单位的带宽(以字节/秒为单位),以字节为单位给出结果。