Linuxのデフォルトのソケットバッファサイズは何ですか?表示するコマンドはありますか?
ターミナルでバッファサイズを確認したい場合は、以下をご覧ください。
/proc/sys/net/ipv4/tcp_rmem
(読み取り用)/proc/sys/net/ipv4/tcp_wmem
(書き込み用)これらには、それぞれ最小、デフォルト、および最大のメモリサイズ値(バイト単位)である3つの数値が含まれています。
C/c ++プログラムでバッファサイズを取得するためのフローは次のとおりです。
int n;
unsigned int m = sizeof(n);
int fdsocket;
fdsocket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); // example
getsockopt(fdsocket,SOL_SOCKET,SO_RCVBUF,(void *)&n, &m);
// now the variable n will have the socket size
指摘されているように、/proc
の現在のdefaultソケットバッファーサイズを確認することもできますが、確認することもできます。 sysctl
を使用して(注:名前にipv4が含まれていますが、これらのサイズはipv6ソケットにも適用されます-ipv6 tcp_v6_init_sock()コードは単にipv4 tcp_init_sock()関数を呼び出します):
sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem
ただし、デフォルトのソケットバッファーは、靴下が初期化されたときに設定されますが、カーネルはSO_SNDBUFでsetsockopt()を使用して設定しない限り、動的にサイズを設定します。現在開いているソケットのバッファーの実際のサイズは、ss
コマンド(iproute
パッケージの一部)を使用して検査できます。これは、輻輳制御パラメーターなどのソケットに関する詳細な情報も提供できます。現在開いているTCP(t
オプション)ソケットと関連メモリ(m
)情報を一覧表示するには:
ss -tm
出力例を次に示します。
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.56.102:ssh 192.168.56.1:56328
skmem:(r0,rb369280,t0,tb87040,f0,w0,o0,bl0,d0)
Skmem(ソケットメモリ)の簡単な説明を次に示します-詳細については、カーネルソースを確認する必要があります(例: sock.h ):
r:sk_rmem_alloc rb:sk_rcvbuf # current receive buffer size t:sk_wmem_alloc tb:sk_sndbuf # current transmit buffer size f:sk_forward_alloc w:sk_wmem_queued # persistent transmit queue size o:sk_omem_alloc bl:sk_backlog d:sk_drops