2.5 トランスポート層 147
TCP と UDP TCP (Transmission Control Protocol) コネクション型 ギャランティード マルチキャスト ブロードキャスト不可 UDP (User Datagram Protocol) コネクションレス ベストエフォート マルチキャスト ブロードキャスト可 cf. IP (Internet Protocol) コネクションレス ベストエフォート 148
ポート番号の例 ポート番号プロトコル名アプリケーション 21 FTP ファイル転送 23 telnet 遠隔ログイン 25 SMTP 電子メール 53 DNS ドメイン名 80 HTTP WWW 110 POP-3 電子メール読み出し 143 IMAP 電子メール読み出し 443 HTTPS セキュアWWW 149
TCP のサービスモデル アプリケーション層 トランスポート層 ネットワーク層 トランスポート層 アプリケーション層 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D 150
TCP セグメント 32 ビット 送信元ポート 宛先ポート 順序番号 確認通知番号 TCP ヘッダ長 U R G A C K P S H R S T S Y N F I N ウィンドウサイズ チェックサム 緊急ポインタ オプション (0 個以上の 32 ビット語 ) データ ( 無いこともある ) 151
TCP のコネクション確立 ホスト 1 ホスト 2 ホスト 1 ホスト 2 152 SYN (SEQ = x) SYN (SEQ = x) SYN (SEQ = y) SYN (SEQ = y, ACK = x + 1) SYN (SEQ = y, ACK = x + 1) 時間 SYN (SEQ = x, ACK = y + 1) (SEQ = x + 1, ACK = y + 1) (a) (a) 通常の TCP コネクション確立 (b) 呼び出しの衝突 (b)
TCP の状態遷移 SYN/SYN + ACK (3ウェイハンドシェークの第 2 段階 ) LISTEN SYN RCVD ( 始め ) CONNECT/SYN (3ウェイハンドシェークの第 1 段階 ) CLOSED CLOSE/- LISTEN/- CLOSE/- RST/- SEND/SYN SYN/SYN + ACK ( 同時オープン ) SYN SENT ( データ転送状態 ) CLOSE/FIN ACK/ ESTABLISHED SYN + ACK/ACK (3 ウェイハンドシェークの第 3 段階 ) CLOSE/FIN FIN/ACK ( 能動クローズ ) ( 受動クローズ ) FIN WAIT 1 FIN/ACK CLOSING CLOSE WAIT ACK/- ACK/- CLOSE/FIN FIN WAIT 2 FIN + ACK/ACK FIN/ACK TIME WAIT LAST ACK ( タイムアウト /) 太い実線 : クライアントの通常経路太い点線 : サーバの通常経路 CLOSED ( 始めに戻る ) ACK/- 153
TCP のフロー制御 154 ACK = 4096 WIN = 0 アプリケーション層から 2K 受け取る アプリケーション層から 3K 受け取る 送信側ブロック 送信側は 2K まで送信可能 送信側受信側 受信側のバッファ 0 4K 空 2K 満 アプリケーション層に 2K 渡す 2K 1K 2 K SEQ = 0 LEN = 2048 ACK = 2048 WIN = 2048 SEQ = 2048 LEN = 2048 ACK = 4096 WIN = 2048 SEQ = 4096 LEN = 1024
アプリケーション層が高速な場合 送信側受信側 受信側のバッファ 0 4K 空 2K アプリケーション層に 2K 渡す 送信側ブロック 送信側は 2K まで送信可能 アプリケーション層に 2K 渡す 送信側ブロック 送信側は 2K まで送信可能 アプリケーション層に 2K 渡す 155 SEQ = 0 LEN = 2048 ACK = 2048 WIN = 2048 空 SEQ = 2048 LEN = 2048 2K ACK = 4096 WIN = 2048 空 SEQ = 4096 LEN = 2048 2K ACK = 6144 WIN = 2048 空 SEQ = 6144 LEN = 2048
連続送信可能ウィンドウサイズ ACK が戻ってくるよりウィンドウサイズが大きければ連続的に送信可能例 :100Mbps, 片道 20km 0.1ms ウィンドウサイズ : 20kbit=2500 バイト 例 :2Mbps, 往復 200ms ウィンドウサイズ : 400kbit=50,000 バイト 156
タイムアウト TCP の誤り制御 送信側受信側 157 SEQ = 0 LEN = 2048 SEQ = 0 LEN = 2048 ACK = 2048 WIN = 4096
ACK が失われた場合 送信側受信側 158 SEQ = 0 LEN = 2048 ACK = 2048 WIN = 2048 タイムアウト SEQ = 0 LEN = 2048 ACK = 2048 WIN = 4096
累積 ACK 送信側受信側 159 SEQ = 0 LEN = 2048 ACK = 2048 ACK = 4096 ACK = 6144 SEQ = 2048 LEN = 2048 SEQ = 4096 LEN = 2048 SEQ = 6144 LEN = 2048 ACK = 8192 SEQ = 8192 LEN = 2048 SEQ = 10240 LEN = 2048 ACK = 12288 SEQ = 12288 LEN = 2048 SEQ = 14336 LEN = 2088 ACK = 16384 SEQ = 16384 LEN = 2088
Fast Retransmit 送信側受信側 160 SEQ = 0 LEN = 2048 ACK = 2048 SEQ = 2048 LEN = 2048 SEQ = 4096 LEN = 2048 ACK = 2048 SEQ = 6144 LEN = 2048 ACK = 2048 SEQ = 8192 LEN = 2048 ACK = 2048 SEQ = 10240 LEN = 2048 ACK = 2048 SEQ = 12288 LEN = 2048 SEQ = 2048 LEN = 2048 ACK = 2048 ACK = 14336 SEQ = 14336 LEN = 2048 重複する ACK が 3 つ続けて届いたらタイムアウトを待たずに再送
フロー制御と輻輳制御 伝送速度の調節 伝送ネットワーク 内部の輻輳 小容量の受信者 大容量の受信者 (a) (b) 161
スロースタート 輻輳回避 44 40 タイムアウト 輻輳ウィンドウ ( キロバイト ) 36 32 28 24 20 16 12 閾値 閾値 8 4 0 0 2 4 6 8 10 12 14 16 18 20 22 24 経過時間 ( 往復遅延 ) 162
輻輳 ( パケットロス ) の検出 タイムアウト 閾値 未確認データ量 1/2 輻輳ウィンドウ 1MSS 3 個の重複する ACK 閾値 未確認データ量 1/2 輻輳ウィンドウ 閾値 163
UDP ヘッダ 32 ビット 送信元ポート番号 UDP 長 宛先ポート番号 UDP チェックサム 164
RTP (Real-Time Transport Protocol) ユーザ空間 マルチメディアアプリケーション RTP Ethernet ヘッダ IP UDP ヘッダヘッダ RTP ヘッダ ソケットインタフェース RTP ぺイロード OS カーネル UDP IP イーサネット (a) UDPペイロード IPペイロードイーサネットぺイロード (b) 165
RTP ヘッダ 32 ビット バージョン P X CC M ぺイロードタイプ 順序番号 タイムスタンプ 同期送信元識別子 寄与送信元識別子 166
2.6 経路制御 167
Dijkstra のアルゴリズム B 6 C B (2, A) C (, -) A 2 6 2 1 E 2 F 4 3 3 2 3 D A E (, -) F (, -) D (, -) G (a) H G (6, A) (b) H (, -) B (2, A) C (8, B) B (2, A) C (8, B) A E (4, B) F (, -) D (, -) A E (4, B) F (6, E) D (, -) G (6, A) (c) H (, -) G (5, E) (d) H (, -) B (2, A) C (8, B) B (2, A) C (8, B) A E (4, B) F (6, E) D (, -) E (4, B) A F (6, E) D (, -) G (5, E) (e) H (9, G) G (5, E) (f) H (8, F) 168
距離ベクトル方式 (Bellman-Ford のアルゴリズム ) 宛先ノードまでの遅延の見積値を隣接ノード間で交換 受け取った見積値にそのノードまでの遅延を加えた値を比較し 最小のものを選択 169
B 6 C 2 2 3 3 E A 2 F D 1 2 6 4 3 G B から F から G から計算結果 A 2 A 6 A 5 A 4 B B 0 B 4 B 3 B 2 B C 6 C 3 C 6 C 5 F D 9 D 5 D 7 D 7 F E 2 E 2 E 1 E 0 - F 4 F 0 F 3 F 2 F G 3 G 3 G 0 G 1 G H 6 H 2 H 4 H 4 F H 170
link state 方式 隣接ノードとそこに至る遅延時間を他のすべてのノードに伝える 各ノードにおいて Dijkstra のアルゴリズムにより最短経路を計算 171
経路制御プロトコルの例 RIP (Routing Information Protocol) 距離ベクトル version 2 でサブネットに対応 OSPF (Open Shortest Path First) link state BGP (Border Gateway Protocol) 自律システム ( プロバイダ ) 間の経路制御 距離ベクトルだが途中経路をすべて伝える 172