マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

UDPプロトコル

TCPプロトコル

詳細

TCPとUDPの比較

ヘッダ

特徴

以下の表に、

の特徴をまとめた。

#比較項目データグラム型通信コネクション型通信
1通信目的必ずしも応答を要求しない場合や、素早く相手にデータを届ける場合。2つのアプリケーション間でデータをやり取りするために使う。
2オーバーヘッド小さい。
接続の確立処理などを行わず、直ぐに通信を開始。
応答確認やエラー検出なども行わない。
大きい。
接続を確立してから通信を開始し、
応答確認やエラー検出、再送、エラー訂正処理などを行う。
3信頼性低い。
エラーが発生しても再送処理などは行われない。
高い。
エラー検出や、エラー訂正処理などが行われる。
4適する通信の種類1対多の通信や、信頼性よりもリアルタイム性が要求される通信データの送受信が保証される必要がある通信

TCPプロトコルの伝送制御

TCPプロトコルの伝送制御方法について簡単に説明する。

ウィンドウ制御

ウィンドウ制御

TCPコネクションの状態

TCPプロトコルは「コネクション型通信」のプロトコルであり、このコネクションには種々の状態が存在する。

#区分状態意味
1ポート未使用状態側(双方の側)
1-1CLOSED未使用状態のTCPポート。
通常これが表示されることはない。
2リスニング ポートの作成側(パッシブ オープン側)
2-1LISTENING待ち受け状態(リスニング状態)のポート。
クライアントからコネクション確立要求(以下、SYN)を受信し、
ACK(SYN/ACK)を返信して、SYN_RECEIVEDへ遷移する。
2-2SYN_RECEIVEDACK(SYN/ACK)に対するACKの受信を待機している状態。
ACKの受信後、ESTABLISHEDへ遷移する。
3コネクション確立要求の送信側(アクティブ オープン側)
3-1SYN_SENTサーバに対してSYNを送信し、ACK(SYN/ACK)の受信を待機している状態。
ACK(SYN/ACK)の受信後、ACKを送信してESTABLISHEDへ遷移する。
相手が無応答のときもこの状態になる。
4コネクション確立状態側(双方の側)
4-1ESTABLISHEDTCPコネクションが確立して通信している状態。
その後、終了処理を経由して以下のいずれかの状態に遷移する。
(1) コネクション終了要求(以下、FIN)を送信した場合、FIN_WAIT_1へ遷移する。
(2) FINを受信した場合、ACK(FIN ACK)を返信して、CLOSE_WAITへ遷移する。
5コネクション終了要求の送信側(アクティブ クローズ側)
5-1FIN_WAIT_1状況に応じて以下のいずれかの状態に遷移する。
(1) ACK(FIN ACK)を受信するとFIN_WAIT_2へ遷移する。
(2) 先に相手からのFINを受信するとCLOSINGへ遷移する。
5-2FIN_WAIT_2FINの受信を待機している状態。
FINの受信後、ACK(FIN ACK)を返信してTIME_WAITへ遷移する。
5-3CLOSINGFINに対するACK返信し、ACK(FIN ACK)の受信を待機している状態。
ACK(FIN ACK)を受けるとTIME_WAITへ遷移する。
5-4TIME_WAITコネクションの終了待ち状態。
しばらく待ったあと、CLOSEDへ遷移して終了する。
6コネクション終了要求の受信側(パッシブ クローズ側)
6-1CLOSE_WAITソケットを解放し、FINを送信してからLAST_ACKへ遷移する。
6-2LAST_ACKFINに対するACK(FIN ACK)の受信を待機している状態。
ACK(FIN ACK)の受信後、CLOSEDへ遷移して終了する。
TCPコネクションのオープン処理
TCPコネクションのクローズ処理

TCP,UDPの状態の確認(netstatコマンド

クライアントとサーバー

TCPのチューニング

新しいOSでは変更などもあるかも。

#項目説明
1TCP/IPインターフェイス関連の設定
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet?\Services\Tcpip\Parameters\Interfaces
1-1MTUDWORDIPパケットのサイズを決定する。大きなパケットで送信すると効率が良い。デフォルトは、1,500 byte。
2TCP/IP関連の設定
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet?\Services\Tcpip\Parameters
2-1RWIN(TcpWindowSize?)DWORDTCPのウィンドウ制御に使用するバッファ。ウィンドウ サイズの最大値を設定する。
デフォルトは 65,535 byteで、チューニングの場合は値を大きくする。
また、ウィンドウ サイズは、MSSの整数倍に設定しておく。
2-2MSS(Maximum Segment Size)DWORD通常は MTU値から 40 Byte(TCPヘッダ、IPヘッダのデータ量)を引いた値に設定する。デフォルトは 1,460 byte。
2-3DefaultTTLDWORDパケットを破棄するまでの時間(経由するルータ数など)。デフォルトは、Windows XP の場合 128。
2-4SackOpts?DWORD1:有効(デフォルト)、0:無効
エラー再送が必要なパケットを効率的に通知する機能。これは必ず 1(有効)に設定しておく。
2-5TcpMaxDupAcks?DWORDパケット紛失を判断する通知回数を指定する。1 ~ 3 の間で設定し、デフォルトは 2。
遅延の大きいネットワークでRWINを拡大した場合は、3 回に設定すると良い。
2-6Tcp1323OptsDWORD3は、window scale、timestamps オプションを有効にする値。
RWIN値が 65,536 以上なら 3 に、65,535 以下なら 0 に設定。
2-7EnablePMTUBHDetectDWORD1:有効、0:無効(デフォルト)
殆どのネットワーク機器がこの検出オプションに対応しているため、
ブラックホール(経路MTU検出に応答しない機器)検出オプションは0(無効)で良い。
2-8EnablePMTUDiscoveryDWORD1:有効(デフォルト)、0:無効
経路MTU検出オプションを有効にしてネットワーク上の機器に合わせてMTUを調整する。
これは必ず 1(有効)に設定しておく。
3AFD (Ancillary Function Driver)が使用するフロー制御に関するパタメタ
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet?\Services\AFD\Parameters
3-1LargeBufferSize?DWORD初期値:00001000
AFDが使用するバッファのサイズ
3-2MediumBufferSize?DWORD初期値:000005e0
AFDが使用するバッファのサイズ
3-3SmallBufferSize?DWORD初期値:00000080
AFDが使用するバッファのサイズ
3-4TransmitWorker?DWORD有効値は0x10(デフォルト)か0x20のみ。
・0x10:Afd.sysがシステム スレッドを使用する。
・0x20:Afd.sysが同一スレッドを使用するため、コンテキストスイッチを削減できる。
3-5DefaultReceiveWindow?DWORDAFDが使用するバッファのサイズ。
RWINより優先されるため、変更しない。
3-5DefaultSendWindow?DWORDAFDが使用するバッファのサイズ。

Tags: :インフラストラクチャ, :通信技術, :Windows, :シェル


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS