鑑於tcp有重傳機制,更多的時候udp對收發緩衝區的大小可能更加敏感一點。
udp緩衝區的大小主要和以下幾個值有關:
/proc/sys/net/core/rmem_max ——— udp緩衝區的最大值,單位位元組,下同
/proc/sys/net/core/rmem_default ——— udp緩衝區的預設值,如果不更改的話程式的udp緩衝區預設值就是這個。
檢視方法可以直接 cat 以上兩個檔案進行檢視,也可以通過 sysctl 檢視。
sysctl -a | grep rmem_max
其實sysctl資訊**就是 proc 下的檔案。
更改系統udp緩衝區大小
程式中進行更改
程式中可以使用setsockopt函式與so_rcvbuf選項對udp緩衝區的值進行更改,但是要注意不管設定的值有多大,超過rmem_max的部分都會被無視。
int a = value_wanted;
if (setsockopt(sockfd, sol_socket, so_rcvbuf, &a,sizeof(int)) == - 1 ) {
更改系統值
echo value_wanted > / proc /sys/net/core/rmem_default
或者在/etc/sysctl.conf新增以下**即可在重啟後永久生效。
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
不想重啟的話使用命令 sysctl -p 即可。
可以順便看下setsockopt在linux下的相關實現
case so_sndbuf:
if (val > sysctl_wmem_max)
val = sysctl_wmem_max;
if ((val * 2 ) < sock_min_sndbuf)
sk->sk_sndbuf = sock_min_sndbuf;
else
sk->sk_sndbuf = val * 2 ; //當然緩衝區在系統中的實際值要大一點,因為udp報頭以及ip報頭等都是需要空間的。
centos7更改系統udp緩衝區大小
udp對收發緩衝區的大小比較敏感 udp緩衝區的大小主要和以下幾個值有關 proc sys net core rmem max udp緩衝區的最大值,單位位元組,下同 proc sys net core rmem default udp緩衝區的預設值,如果不更改的話程式的udp緩衝區預設值就是這個。...
tcp與udp緩衝區大小總結
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 1...
socket緩衝區大小
socket緩衝區大小預設為64 k 理論上最優大小為 頻寬乘以往返時間 rtt通過ping ip位址的最後一行得到,如下圖所示 一般把緩衝區大小的最優化設定需要參照頻寬與往返時間rtt得到的頻寬延遲bdp。假設應用程式是通過乙個 100mbps 的區域網進行通訊,其 rtt 為 10 ms,那麼 ...