TCP/IPプロトコルにおけるbacklogパラメータ
2669 ワード
テキストリンク:http://www.cnblogs.com/Orgliny/p/5780796.html
TCP接続を確立するには3回の握手が必要ですが、3回の握手が完了すると、サーバは処理(accept)しますか?
backlogは、Linuxカーネル2.2の前に、backlogサイズには半接続状態と全接続状態の2つのキューサイズが含まれている接続キューです.
ハーフコネクション状態は、サーバがListen状態のときにクライアントSYNメッセージを受信したときにハーフコネクションキューに入れる、すなわちSYN queue(サーバポート状態:SYN_RCVD)である.
全接続状態は、TCPの接続状態がサーバ(SYN+ACK)からクライアントに応答した後、クライアントへのACKメッセージがサーバに到着するまで、半接続状態に保持される.サーバがクライアントのACKメッセージを受信すると、エントリは半接続キューから全接続キューの末尾、すなわちaccept queue(サーバポートステータス:ESTABLISHED)に移行する.
Linuxカーネル2.2の後、2つのbacklogに分離して、ハーフコネクション(SYN_RCVD状態)キューサイズおよびフルコネクション(ESTABLISHED状態)キューサイズをそれぞれ制限する.
SYN queueキュー長 /proc/sys/net/ipv4/tcp_max_syn_backlog 指定します.デフォルトは2048です.
Accept queueキュー長は /proc/sys/net/core/somaxconn とlisten関数を使用するときに入力されるパラメータで、両者は最小値をとります.デフォルトは128です.Linuxカーネル2.4.25の前に、コード定数で書かれています. SOMAXCONN ,Linuxカーネル2.4.25以降、プロファイル /proc/sys/net/core/somaxconn で直接変更するか、/etc/sysctl.confで構成します. net.core.somaxconn = 128 .
ssコマンドで表示できます
LISTEN状態では、Send-QはAccept queueの最大値であり、Recv-QはAccept queueで被サーバaccept()を待機していることを示す.
また、クライアントconnect()の戻りはTCP接続の確立に成功したことを意味せず、accept queueが満タンになり、システムが後続のACK要求を直接破棄する可能性がある.クライアントは接続が確立されたと勘違いし、呼び出しを開始してタイムアウトまで待つ.サーバはACKのタイムアウトを待ち、SYN+ACKをクライアントに再送信し、再送信回数が制限される net.ipv4.tcp_synack_retries ,デフォルトは5で、再送が5回で、毎回30~40秒待ち、すなわち半接続のデフォルト時間は約180秒であり、このパラメータはtcpで洪水***された場合に一時的に有効にすることができる.
SYN queueオーバーフローの表示
参考資料:
TCP SOCKETにおけるbacklogパラメータの用途は何ですか?
TCP/IPプロトコルにおけるbacklog分析と設定およびTCP状態変化
TCP 3回握手とbacklogオーバーフロー
TCP queueのいくつかの問題
TCP洪水***の診断と処理
TCP接続を確立するには3回の握手が必要ですが、3回の握手が完了すると、サーバは処理(accept)しますか?
backlogは、Linuxカーネル2.2の前に、backlogサイズには半接続状態と全接続状態の2つのキューサイズが含まれている接続キューです.
ハーフコネクション状態は、サーバがListen状態のときにクライアントSYNメッセージを受信したときにハーフコネクションキューに入れる、すなわちSYN queue(サーバポート状態:SYN_RCVD)である.
全接続状態は、TCPの接続状態がサーバ(SYN+ACK)からクライアントに応答した後、クライアントへのACKメッセージがサーバに到着するまで、半接続状態に保持される.サーバがクライアントのACKメッセージを受信すると、エントリは半接続キューから全接続キューの末尾、すなわちaccept queue(サーバポートステータス:ESTABLISHED)に移行する.
Linuxカーネル2.2の後、2つのbacklogに分離して、ハーフコネクション(SYN_RCVD状態)キューサイズおよびフルコネクション(ESTABLISHED状態)キューサイズをそれぞれ制限する.
SYN queueキュー長 /proc/sys/net/ipv4/tcp_max_syn_backlog 指定します.デフォルトは2048です.
Accept queueキュー長は /proc/sys/net/core/somaxconn とlisten関数を使用するときに入力されるパラメータで、両者は最小値をとります.デフォルトは128です.Linuxカーネル2.4.25の前に、コード定数で書かれています. SOMAXCONN ,Linuxカーネル2.4.25以降、プロファイル /proc/sys/net/core/somaxconn で直接変更するか、/etc/sysctl.confで構成します. net.core.somaxconn = 128 .
ssコマンドで表示できます
[root@localhost ~]# ss -l
State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:http *:* LISTEN 0 128 :::ssh :::* LISTEN 0 128 *:ssh *:* LISTEN 0 100 ::1:smtp :::* LISTEN 0 100 127.0.0.1:smtp *:*
LISTEN状態では、Send-QはAccept queueの最大値であり、Recv-QはAccept queueで被サーバaccept()を待機していることを示す.
また、クライアントconnect()の戻りはTCP接続の確立に成功したことを意味せず、accept queueが満タンになり、システムが後続のACK要求を直接破棄する可能性がある.クライアントは接続が確立されたと勘違いし、呼び出しを開始してタイムアウトまで待つ.サーバはACKのタイムアウトを待ち、SYN+ACKをクライアントに再送信し、再送信回数が制限される net.ipv4.tcp_synack_retries ,デフォルトは5で、再送が5回で、毎回30~40秒待ち、すなわち半接続のデフォルト時間は約180秒であり、このパラメータはtcpで洪水***された場合に一時的に有効にすることができる.
SYN queueオーバーフローの表示
[root@localhost ~]# netstat -s | grep LISTEN102324 SYNs to LISTEN sockets dropped
Accept queueオーバーフローの表示[root@localhost ~]# netstat -s | grep TCPBacklogDrop
TCPBacklogDrop: 2334
参考資料:
TCP SOCKETにおけるbacklogパラメータの用途は何ですか?
TCP/IPプロトコルにおけるbacklog分析と設定およびTCP状態変化
TCP 3回握手とbacklogオーバーフロー
TCP queueのいくつかの問題
TCP洪水***の診断と処理