TCP/UDP プロセス間の通信のためのプロトコル TCP:信頼性高、処理時間大 UDP:信頼性低、処理時間小 ftp SMTP HTTP TCP/UDP ポート 1100 1230 1300 20 23 80 port IP Host B Host A SMTP : Simple Mail Transfer Protocol POP : Post Office Protocol
ポート番号 発信元ポートと宛先ポートの二つのアプリケーションのエンド・エンドで通信をするのがトランスポート層 このポートの先にマルチタスクOSのプロセスが対応し,そのプロセス種別をインターネットサービスアプリケーションとして16ビットの数値で標準化して示す ポート番号23なら「TELNET」,20・21なら「FTP」,25なら「SMTP」,79なら「FINGER」,80なら「HTTP」 など
UDPの特徴 プロセス間通信のためのプロトコル 実際は何も仕事をしない 利点 欠点 信頼性を保証しない コネクションレス 人が感覚で補える音声や画像通信に利用される 利点 TCPに比べて処理時間が小 欠点 メッセージの損失、重複、順序誤りが起こりうる
TCPの特徴 コネクションの開設 信頼性ある通信 データの流量制御 論理リンクを通した通信 順序番号、チェックサム、応答確認 ウィンドウコントロール
TCPフォーマット
コネクションの開設 エンドポイントの組でコネクションを開設 process process Port Y Port P process (Host A, Port X): (Host B, Port P) Host A Host B Host C process process Port Y Port P process Port X TCPコネクション Port Z IP Connection ネットワーク
コネクション開設 FlagフィールドにSynやSyn+Ackを表示これでNode1と2の特定ポート間にTCPコネクションができる 任意の初期値 仮にSeq=10 任意の初期値 仮にSeq=100 Ackは,次にNode1 からは11番を期待 することを示す Node2に期待された Seq=11を表示 かつNode1から2に 次は101番の期待を 示す FlagフィールドにSynやSyn+Ackを表示これでNode1と2の特定ポート間にTCPコネクションができる
信頼性の保証 順序番号(sequence number):順序管理 チェックサム(checksum):データの破損を検知 応答確認(Ack:Acknowledgement):損失データの再送 通信エラー時 正常時 Sender Receiver Sender Receiver send packet 1 send packet 1 loss send packet 2 send ACK for packet 1 send ACK for packet 2 time out send packet 3 resend packet 1 send ACK for packet 1 send ACK for packet 3
TCPのシーケンス番号管理 前ページの続きで,Dは送っているデータ量(バイト数)を示す. Seq(シーケンス番号)は送ったバイト数分進められる Ackにより相手から期待する次のデータの開始バイト番号(Seq)を示す
ウィンドウ制御 ひとつずつAckを返していると効率がよくないため,いくつかまとめて送り,まとめて確認する. 確認無しにまとめて送れるデータ量(これをウィンドウサイズと呼ぶ)は,相手(受信側)の受信バッファの大きさに依存するため,受信側が発信側にウィンドウサイズを通知しておく
データの流量(フロー)制御 Ackの応答によりバッファから送出する データ量(ウィンドウサイズ)を調整 データ量(ウィンドウサイズ)を調整 混雑(輻輳)に応じたエンド・エンドでの流量制御 時間が長くなる、オーバーフローすると、 ウィンドサイズを小さくする、 うまく行けば大きくなる 送出済み 確認はまだ Window(size=6) 1 2 3 4 5 6 7 8 9 10 11… send to be sent 未使用 利用可能 ここまで送出 パケット3の受信確認 パケット9まで送出可能 1 2 3 4 5 6 7 8 9 10 11...
コネクションの開放 上位アプリケーションからコネクションを開放する要求が着たら,TCP層で残っている送るべきデータが全て送れたらFINを送る
輻輳制御 TCPは端末同士でネットワークの状況を推察して混雑を避けるように転送速度(ウィンドウサイズ)を調整 Slow start 輻輳検知 順番にウィンドウサイズを1,2,4,8,と増やしていく 輻輳検知 パケットロスなどで輻輳を検知するとそのときのウィンドウサイズの半分の値(A)を記憶してからウィンドウを1に戻し,ふたたびslow startのフェーズに入る Aに達したら,線形に1ずつウィンドウを増やしていく
Windows Size (packets) Congestion Avoidance Phase 輻輳制御 TCPは端末同士でネットワークの状況を推察して混雑を 避けるように転送速度(ウィンドウサイズ)を調整 Time (msec) Windows Size (packets) 1600 1800 2000 2200 2400 5 10 15 20 25 35 40 45 50 30 Segment Loss Occurs Congestion Avoidance Phase Slow Start Phase 輻輳検知時のウィンドウの半分の値=A