詳解TCP/IP ACE B2 mewtwo TCPインタラクティブ・ データ・フロー インタラクティブ入力 • Rloginコネクションではキーストロークは1行 単位ではなく1バイト単位で送られる • クライアントがタイプした文字をサーバーがエ コーするため4つのセグメントが生成される キーストローク データバイト データバイトのack データバイトのエコー 表示 エコーバイトのack サーバー エコー date¥nをタイプしたときのデータの流れ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 0.0 0.016497 (0.0165) 0.139955 (0.1235) 0.458037 (0.3181) 0.474386 (0.0163) 0.539943 (0.0656) 0.814582 (0.2746) 0.831108 (0.0165) 0.940112 (0.1090) 1.191287 (0.2512) 1.207701 (0.0164) 1.339994 (0.1323) 1.680646 (0.3407) 1.697977 (0.0173) 1.739974 (0.0420) 1.799841 (0.0599) 1.940176 (0.1403) 1.944338 (0.0042) 2.140110 (0.1958) bsdi.1023 > svr4.login: P 0:1(1) ack 1 win 4096 svr4.1ogin > bsdi .1023: P 1:2(1) ack 1 win 4096 bsdi .1023 > svr4.login: . ack 2 win 4096 bsdi .1023 > svr4.login: P 1:2(1) ack 2 win 4096 svr4.login >b sdi.1 023:P 2 :3(1) ack 2w in 4096 bsdi.1023 > svr4.login: . ack 3 win 4096 bsdi.1023 > svr4. login: P 2:3(1) ack 3 win 4096 svr4.login >b sdi.1 023: P3 :4(1) ack 3w in 4096 bsdi.1 023 >s vr4.login: .a ck 4w in 4096 bsdi.1023 > svr4.login: P 3:4(1) ack 4 win 4096 svr4.1ogin > bsdi .1023: P 4:5(1) ack 4 win 4096 bsdi.1023 > svr4.login: . ack 5 win 4096 bsdi.1023 > svr4.login: P 4:5(1) ack 5 win 4096 svr4.login > bsdi.1023: P 5:7(2) ack 5 win 4096 bsdi.1023 > svr4.login: . ack 7 win 4096 svr4.login > bsdi.1023: P 7:37(30) ack 5 win 4096 bsdi.1023 > svr4. login: . ack 37 win 4096 svr4.login> bsdi.1023: P 37:44(7) ack 5 win 4096 bsdi.1023 > svr4.login: . ack 44 win 4096 d a t a CR/LF 表示 遅延確認応答 • データを受信したホストがすぐにACKを返す と効率が悪くなってしまう • ACKを200ミリ秒遅らせて同じ方向に向かう データに便乗させることで効率が良くなる Nagleアルゴリズム • 小さいパケットをなるべくまとめて転送する • 送出した小パケットのACKを受信するまでデ ータをためて一つのセグメントとして送信する application kernel Receiver データ ACK まとめ • インタラクティブデータは通常最大セグメント サイズよりも小さなセグメントで転送される • 遅延確認応答によってRloginセッションでや り取りされるセグメントの数を減らせる • 低速なWANではNagleアルゴリズムがセグメ ント数を減らすために利用される TCPバルク・データ・フロー スライディング・ウィンドウ スライディング・ウィンドウ スライディング・ウィンドウ スライディング・ウィンドウ PUSHフラグ • 受信したデータをバッファリングせず、直ちに アプリケーションに渡すことを要求するフラグ • しかし、ほとんどのAPIはアプリケーションが TCPにPUSHフラグを指示するための方法を 用意していない TCPヘッダ 送信元ポート番号(16) シーケンス番号(32) 確認応答番号(32) データオフセット(4) 予約(6) チェックサム(16) オプション URG 宛先ポート番号(16) 制御ビット(6) ウィンドウ(16) 緊急ポインタ(16) ACK PSH RST SYN FIN スロー・スタート • セグメントを送る数を1から始めてACKが届く うちは倍々に増やしていく • 輻輳が発生しACKが1つでも帰ってこなけれ ば、送る数を減らす ある程度まで行ったら 増加数は1ずつにする セ グ メ ン ト 数 輻輳発生 送信数を 半分に落とす 時間 更に送信数を 半分に落とす バルク・データ・スループット 送t=0 り data1 手t=1 受 け 手 data1 t=8 data2 t=9 data3 t=2 data2 t=10 data1 data3 t=3 data2 t=11 data1 t=4 data3 data2 t=12 data3 ack2 ack1 t=5 t=13 ack1 t=6 ack2 t=14 ack1 ack2 t=7 t=15 ack1 ack2 ack3 ack3 ack3 バルク・データ・スループット 送t=16 り data4 ack3 手t=17 data5 受 け 手 data4 ack6 ack7 t=25 data8 ack7 t=26 data5 data4 data10 ack7 t=19 data7 data8 ack5 data9 ack6 t=18 data6 t=24 data9 data8 data10 data9 data8 data11 data10 data9 ack8 t=27 data6 data5 data4 t=20 data11 t=28 data7 data6 adata5 ack4 t=21 data12 t=29 data7 ack4 data6 ack5 t=22 data13 data12 data11 data10 ack8 ack9 t=30 ack4 ack5 data7 ack6 dara14 data13 data12 data11 ack8 ack9 ack10 t=23 t=31 ack4 data15 data14 data13 data12 ack8 ack9 ack10 ack11 ack5 ack6 ack7 バルク・データ・スループット • パイプのキャパシティ =帯域幅×往復時間 RTT 1 2 3 4 2倍のRTT 1 2 3 4 5 6 1 2 3 4 5 6 7 8 2倍の帯域 7 8 バルク・データ・スループット • ACKの間隔は経路で最も低速な回線と同じ になる 送 り 手 ル ー 20 19 18 17 16 15 タ ー 1 2 ル ー タ ー 14 3 13 4 12 5 11 6 ル ー タ ー ル ー タ ー 10 9 受 け 手 7 太いパイプから細いパイプに向かうことで生じる輻輳 8 緊急モード • TelnetやRloginで書り込みキーを押すときや 、FTPで転送を中止する時に利用される まとめ • スライディング・ウィンドウ・プロトコルの解説 • スロースタートの解説 • バルクデータのスループットの検証
© Copyright 2025 ExpyDoc