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往套介面寫資料時,核心從應用程序緩衝區中拷貝所有資料到套介面的傳送緩衝區,如果套介面傳送緩衝區容不下應用程式的所有資料,或者是應用程序的緩衝區大...