第12章 Reliable Stream Transport Service (TCP)

第12章 Reliable Stream
Transport Service (TCP)
IPに対して実質的に新たな機能が
付加される.
TCP

大量のデータを送る
– 誤り検出・回復
• プログラマの仕事となると大変である.
– 必要な専門知識を持ったプログラマは少ない.
– 汎用のものを用意しよう.
• 一般的な,一様なインターフェースを提供
TCP


応用プログラムとのインターフェース
stream 志向
– オクテット(バイト)のストリーム

virtual circuit 接続
– 双方で連絡を取り合い,コネクションを確立する.
– 接続を authorize
– 通信中に事故が起これば,双方に通知し,それぞれ
の応用プログラムに知らせる.
– 仮想的な通信路
TCP

Buffered transfer
– 応用プログラムは好きな大きさの単位で読み書きでき
る.
– 通信プロトコル・ソフトは通信に最適な大きさの単位で
転送をすればよい.
– 「push」…バッファが一杯にならないでも送る.相手方
にも引渡しをする.

Unstructured stream
– 「データ列を区切る」というサービスをしない.
– 応用プログラムj同士が事前に取り決めておく必要が
ある.
TCP

Full Duplex 全二重接続
– 双方向同時通信
– 制御情報も送ることができる.

高信頼 (紛失・二重配送を防ぐ)
– 低信頼の手段で,どのようにして高信頼を確
保するか?
「肯定応答と再送による」
肯定応答
時間
再送
パケット紛失と多重受信

多重受信
– 輻輳で起きることがある.
• 転送途中で再送が起きる.
– ACKもダブルかもしれない.
• どれの返事かわからなくなる.


一連番号をつけて調べる.
ACKにもその番号を送り返す.
Sliding window
Sliding window

単純なACK
通信時間を無駄に待つ.
先行送信
window方式


window size = 1 … ウィンドウなしと同じ
window size を大きくするとネットワークの
idle time を減らせる.
– 定常状態でネットワークの能力いっぱいまで

能率 windowの大きさとネットワークの能
力による.
Sliding window

どのような問題を解決するか?
TCP


The Transmission Control Protocol
通信規約 (programは一応用例)
何を提供するか
– format,通信手順,受け取り手の識別
– 障害からの回復(紛失,多重受信)
– 開始と終了の手順

何を提供しないか
– 応用プログラムとのインターフェース

下層の通信システムをあまり選ばない
TCP ポート,コネクション,Endpoint

Port
– UDPとTCPはプロトコルが異なるので混同し
ない.
– 同じサービスには同じ番号



connection (endpoint, endpoint)
endpoint (IPaddress, port)
コネクションの確立をはじめに行う.
– Passive Open と Active Open
TCP port

Multiplex/demultiplex
connection
brahms.net.is.uec.ac.jp
(130.153.66.130, 1069)
isl.stanford.edu
(36.60.0.10, 1184)
roo.cc.uec.ac.jp
(130.153.27.161, 25)
(130.153.27.161, 53)
m-unix.cc.u-tokyo.ac.jp
(130.69.241.99, 1184)
セグメント


セグメント 転送の単位
sliding window の目的
– 効率
– 流量制御
– octet レベルでの sliding window
– 送受側双方で4つのwindow
• 一方向で送受各1
• 双方向でそれぞれに.
流量制御

end-to-end の流量制御
– 中間のマシン(ルータ)でのあふれは ICMP
可変長window size

window advertisement
– acknowledge octet のほかにあとどのくらい
受け取れるかを知らせる.
– Window size を変更
– 0 にすると送信停止 (バッファが足りない!)

再送アルゴリズムと congestion control
– TCPの実装次第で
• 輻輳を強めたり弱めたりする.
TCPセグメントの format
– Seq# 送出ストリームのoctet番号
– Ack# 次に受信したいoctet番号
• 便乗(piggyback)
TCPセグメントの format
– code bit
– window
– checksum
advertize (便乗)
psuedo header を含める.
Out of Band Data
– 割り込み,中断信号 ^C, ^\, ^Z
– Urgent ptr … Urg data の終わり位置
– stream に入れない.
– normal mode
urgent mode
最大セグメント長


option を用いて受信したい最大長を通知
計算機の規模,MTUに合わせる.
– 過小だと効率が悪い.
• TCP+IP hdr 40 octet
– 過大だと,
• fragmentation, 紛失,再送

最適値はなかなか難しい.
確認応答と再送
– ACK: 次に待つ octet stream sequence番号

cumulative scheme
– はじめからの連続受信領域のみを知らせる.
– 利点
• ACKが簡単に生成でき,あいまいさがない.
• 紛失ACKの再送が不要
– 短所
• 成功した受信をすべて知らせるわけではないので
効率が悪い.