2014-02-19 65 views

回答

0

是的,單獨的緩衝區分配給發送和接收。最初保留的內存量取決於默認配置,如果應用程序使用set_sockopt()選擇不同的大小。隨着傳出/傳入數據包數量的增加,最初的保留內存也會增加。

在Linux上,可以使用foll sysctl讀取/修改默認值。

sudo sysctl -a | grep tcp | grep的MEM

net.ipv4.tcp_mem = 191133 254845 16777216

net.ipv4.tcp_rmem = 4096 16384 777216

net.ipv4.tcp_wmem = 4096 16384 16777216

您可以使用setsockopt( )用SO_SNDBUF和SO_RCVBUF從應用程序修改它。

+0

我懷疑當客戶端與不同服務器建立TCP連接時,是否爲每個大小爲2^16的服務器分配不同的緩衝區? –

+0

是的,它的確如此。在Linux上它默認爲2^16,但它也是可配置的。這些緩衝區是每個TCP連接,而不管它是否在同一臺服務器上。另請注意,分配的緩衝區不僅用於存儲數據。它也用於存放skbuff和其他一些東西。 – Akhil

+0

謝謝......這清除了我的懷疑 –

0

是的,沒有。當然有兩個緩衝區,發送和接收,但大小取決於平臺,並且可以由應用程序修改。

+0

我懷疑當客戶端與不同的服務器建立TCP連接時,是否爲每個大小爲2^16的服務器分配不同的緩衝區? –