tcp與udp緩衝區大小總結

2021-07-02 02:17:42 字數 1627 閱讀 8621

1.tcp收發緩衝區預設值  

[root@localhost /]# cat /proc/sys/net/ipv4/tcp_rmem

4096    87380   4194304

87380  :tcp接收緩衝區的預設值  

[root@localhost /]# cat /proc/sys/net/ipv4/tcp_wmem

4096    16384   4194304

16384  : tcp傳送緩衝區的預設值  

2.udp收發緩衝區預設值

[root@localhost /]# cat /proc/sys/net/core/rmem_default

110592

110592:udp接收緩衝區的預設值

[root@localhost /]# cat /proc/sys/net/core/wmem_default

110592

110592:udp傳送緩衝區的預設值

3. tcp 或udp收發緩衝區最大值

[root@localhost /]# cat /proc/sys/net/core/rmem_max

131071

131071:tcp 或 udp 接收緩衝區最大可設定值的一半。

也就是說呼叫 setsockopt(s, sol_socket, so_rcvbuf, &rcv_size, &optlen);  時rcv_size 如果超過 131071,那麼

getsockopt(s, sol_socket, so_rcvbuf, &rcv_size, &optlen); 去到的值就等於 131071 * 2 = 262142  

[root@localhost /]# cat /proc/sys/net/core/wmem_max  131071

131071:tcp 或 udp 傳送緩衝區最大可設定值得一半。

跟上面同乙個道理  

4. tcp 或udp收發緩衝區最小值

tcp 或udp接收緩衝區的最小值為 256 bytes,由核心的巨集決定;

tcp 或udp傳送緩衝區的最小值為 2048 bytes,由核心的巨集決定

例子:

int isock = -1;

isock = socket(af_inet, sock_dgram, 0);

int irecvlen = 300*1024;

int irecvlen_2 = 0;

int ioptlen = 4;

int iret = -1, iret_2 = -1;

iret = setsockopt(isock, sol_socket, so_rcvbuf, &irecvlen, 4);

iret_2 = getsockopt(isock, sol_socket, so_rcvbuf, &irecvlen_2, &ioptlen);

printf("recvlen 2 is %d[%d:%d].\n", irecvlen_2, iret, iret_2);

如果預設的udp緩衝區的最大值為 110592 bytes,當通過setsockopt()函式想將其設定為300kb時,超過了最大上限的2倍,因此用getsockopt()函式獲取實際設定的緩衝區長度為221184bytes(110592*2)。

更改系統udp緩衝區大小

鑑於tcp有重傳機制,更多的時候udp對收發緩衝區的大小可能更加敏感一點。udp緩衝區的大小主要和以下幾個值有關 proc sys net core rmem max udp緩衝區的最大值,單位位元組,下同 proc sys net core rmem default udp緩衝區的預設值,如果不更...

TCP緩衝區大小及限制

本文介紹一些影響ip資料報大小的限制,我們先介紹這些限制,然後就他們如何影響應用程序傳遞的資料綜合分析 tcp與udp的輸出 每個tcp套介面有乙個傳送緩衝區,可以用so sndbuf套介面選項來改變這一緩衝區的大小。當應用程序呼叫write往套介面寫資料時,核心從應用程序緩衝區中拷貝所有資料到套介...

關於tcp和udp的緩衝區

一 基礎知識 二 tcp與udp的輸出 每個tcp套介面有乙個傳送緩衝區,可以用so sndbuf套介面選項來改變這一緩衝區的大小。當應用程序呼叫write往套介面寫資料時,核心從應用程序緩衝區中拷貝所有資料到套介面的傳送緩衝區,如果套介面傳送緩衝區容不下應用程式的所有資料,或者是應用程序的緩衝區大...