2.5 トランスポート層

1

アプリケーションプロトコル

アプリケーション

TCP, UDP

トランスポート
ネットワーク

物理/リンクアプリケーションIP

ネットワーク

物理/リンク

トランスポートIP

ネットワーク

物理/リンク

図1-12 TCP/IPの4レイヤモデル

IP

ネットワーク

物理/リンクトランスポートレイヤの仕事• 計算機間での 良好な データのやり取りを実現する。
– 誤りがないように• 再送• パリティー情報による自動再生(FEC; Forward Error Correction)– データを取りこぼさないように(*) ファイルアクセスと同じ インターフェース を提供• それ以外に欲しくなる機能– 並列データ転送– できるだけ高速に転送– ネットワークに “やさしく”• 道が混まないように• ネットワークは単純化、エンドホストが賢く

3

TCPとUDP• TCP (Transmission Control Protocol)– コネクション型、ギャランティード– マルチキャスト・ブロードキャスト不可• UDP (User Datagram Protocol)– コネクションレス、ベストエフォート– マルチキャスト・ブロードキャスト可cf. IP (Internet Protocol)– コネクションレス、ベストエフォート
45

TCP Port Allocation （RFC1700)
1. Well-Known Ports;
0 - 1,023
2. Registered Ports; 1,024 - 49,151
3. Dynamic and/or Private Ports ; 49,152 - 65,535
最新情報 :
ftp://ftp.isi.edu/in-notes/iana/assignments/port-numbers

6

TCP Features
1. “Stream” Oriented Data Transmission→ Connection確立(Three-way-handshake)

2. Connection (“Stream”) Identifier ＝ “Socket”{dst_IP_addr, dst_port, src_IP_addr, src_port}

3. “Sequence Number” ; 32 bits
→ バイト番号 ： 0 － (2^32-1)→ 2^32 でSequence NumberがWrapされる

4. “Full-Duplex”での通信
5. Acknowledgement (ACK) ;→ 次に受信すべきバイト番号(SN)の通知

6. エラー回復： セグメント再送(Segment retransmission)
by Time-out, Dupilicated-ACK

7. “Sliding Window Control” を用いたデータ転送制御(*) Window_size ≦ 65,535 Bytes
78TCP Well-Known Ports
Port Number
520
21
23
25
39
53
63
67
69
70
79
80
110
111
119

Keywordrje
ftp-data
ftp
telnetsmtp
rlp
domainwhois++
bootp
tftp
gopherfingerhttppop3
sunrpcnntp

Application
Remote Job Entry
File Transfer [Default data]
File Transfer [Control]
TelnetSimple Management Protocol
Resource Location Protocol
Domain Name Server
Whois++
Bootstrap Protocol Server
Trivial File Transfer
GopherFingerWorld Wide Web HTTP
Post Office Protocol - Version 3
SUN Remote Procedure Call
Network News Transfer Protocol
9ポート番号の例
ポート番号
21

プロトコル名FTP

アプリケーション
ファイル転送23

telnet

25
53

SMTP
DNS

80
110
143

HTTP
POP-3
IMAP

遠隔ログイン
電子メール
ドメイン名
WWW

443

HTTPS

電子メール読み出し
電子メール読み出し
セキュアWWW10

TCPセグメント
32ビット

送信元ポート

宛先ポート
順序番号
確認通知番号U A P R S F
R C S S Y I
G K H T N N

TCP
ヘッダ長
チェックサムウィンドウサイズ

緊急ポインタオプション (0 個以上の 32ビット語)

データ (無いこともある)

11

TCP Connection確立/開放
svr4.1037 (client)“Active open”

bsdi.discard(server)(appli. open : telnet)

SYN_ACK(a+1,b)“Passive open”“open”“open”“Active Close”(application close: quit)“half close”

FIN (m,s+1)
ACK (m+1)

EOF to Application“Passive Close”
FIN_ACK (m+1,s)ACK (s+1)(application close)“half close”→ full close 12

Three Way Handshalking• エラー が発生する可能性が存在する。
• 2つの ノードの間での それぞれのノードが持つ 情報の「同期」 を確立させたい。
• 3つのパケット(＝メッセージ)の 送受信で、情報の同期が確保・保証される(必要十分条件)。

13

CLOSED
appl: passive opensend: <nothing>appl: active open
send: SYN

LISTEN

recvl: SYN
send: SYN, ACK

appl: close
send: FIN

passive open
appl: send data
Send : RST
send: SYN
Active open
recv: SYN
close
SYN_RCVDSYN_SENT appl:
send: SYN,ACK
or timeout(simultaneous open)
recv: SYN,ACK
recv: ACK
send: ACK
send: <nothing>appl: close
send: FIN

FIN_WAIT_1
recv: ACK
send: <nothing>

ESTABLISHED recv: FIN

CLOSE_WAIT

send: ACK

appl: close
send: FIN

recv: FIN
send: ACK

recv: FIN,ACK
send: ACKFIN_WAIT_2

recv: FIN
send: ACK
Active close

simultaneous close

CLOSING
recv: ACK
send: <nothing>

TIME_WAIT
2 MSL timeout

LAST_ACK
Passive close

recv: ACK
send: <nothing><< Client >>CLOSEDappl: passive open
send: <nothing>

LISTEN

recvl: SYN
send: SYN, ACK

appl: active open
send: SYN

appl: close
send: FIN

passive open
appl: send data
send: RST
send: SYN
Active open
recv: SYN
close
SYN_RCVDSYN_SENT appl:
send: SYN,ACK
or timeout(simultaneous open)
recv: SYN,ACK
recv: ACK
send: ACK
send: <nothing>appl: close
send: FIN

FIN_WAIT_1
recv: ACK
send: <nothing>

ESTABLISHED recv: FIN

CLOSE_WAIT

send: ACK

appl: close
send: FIN

recv: FIN
send: ACK

recv: FIN,ACK
send: ACKFIN_WAIT_2

recv: FIN
send: ACK
Active close

simultaneous close

CLOSING
recv: ACK
send: <nothing>

TIME_WAIT
2 MSL timeout

LAST_ACK
Passive close

recv: ACK
send: <nothing>CLOSED<< Server >>appl: passive open
send: <nothing>appl: active open
send: SYN

LISTEN

recvl: SYN
send: SYN, ACK

appl: close
send: FIN

passive open
appl: send data
send: RST
send: SYN
Active open
recv: SYN
close
SYN_RCVDSYN_SENT appl:
send: SYN,ACK
or timeout(simultaneous open)
recv: SYN,ACK
recv: ACK
send: ACK
send: <nothing>appl: close
send: FIN

FIN_WAIT_1
recv: ACK
send: <nothing>

ESTABLISHED recv: FIN

CLOSE_WAIT

send: ACK

appl: close
send: FIN

recv: FIN
send: ACK

recv: FIN,ACK
send: ACKFIN_WAIT_2

recv: FIN
send: ACK
Active close

simultaneous close

CLOSING
recv: ACK
send: <nothing>

TIME_WAIT
2 MSL timeout

LAST_ACK
Passive close

recv: ACK
send: <nothing>TCPの誤り制御
送信側

受信側

×
タイムアウト17

ACKが失われた場合
送信側

タイムアウト受信側

×

18

RTO Expired Retransmission
bsdi.1023
1
3
4

再送間隔
1.5 sec
3 sec

6
7
8

6 sec
9

1764 sec18

svr4.discard

SYN 0:0(0) win4096 <mss1024>
SYN 3:3(0) ack 1 win4096 <mss1024>
ack 4 win4096
PSH 1:15(14) ack 4 win4096
ack 15 win 4096

2

再送トライ (RTO; 再送タイマ)
RTO = 1.5 sec /* 変更可能*/
5for ( 9 minutes){if ( RTO expired){retransmission;
RTO=RTO x 2;
RTO=min{64sec, RTO};}}end /* 諦める */19TCPのフロー制御
送信側
アプリケー
ション層から2K受け取る

アプリケー
ション層から3K受け取る

受信側

受信側の
バッファ
04K
空

2K

満
送信側
ブロック

アプリケーション層に2K渡す

2K
送信側は2Kまで送信可能

1K

2K

20

アプリケーション層が高速な場合
送信側

受信側

受信側の
バッファ
04K
空

2K
アプリケーション層に2K渡す
空
送信側
ブロック

2K
アプリケーション層に2K渡す空

送信側は2Kまで送信可能

送信側
ブロック

送信側は2Kまで送信可能

2K
アプリケーション層に2K渡す
空21

Fast Retransmit
送信側

受信側×
重複するACKが3つ続けて届いたらタイムアウト
を待たずに再送

23

トランスポートレイヤの仕事• 計算機間での 良好な データのやり取りを実現する。
– 誤りがないように• 再送• パリティー情報による自動再生(FEC; Forward Error Correction)– データを取りこぼさないように(*) ファイルアクセスと同じ インターフェース を提供• それ以外に欲しくなる機能– 並列データ転送– できるだけ 高速に転送– ネットワークに “やさしく”• 道が混まないように• ネットワークは単純化、エンドホストが賢く

24

連続送信可能ウィンドウサイズ• ACKが戻ってくるよりウィンドウサイズが大きければ連続的に送信可能➔ パイプライン状の投機的転送
例：100Mbps, 片道20km≒0.1ms→ウィンドウサイズ: 20kbit=2500バイト

例：2Mbps, 往復200ms→ウィンドウサイズ: 400kbit=50,000バイト• ウィンドウスケールオプション25

フロー制御 と 輻輳制御
伝送速度の調節伝送ネットワーク

小容量の受信者(a)内部の輻輳

大容量の受信者(b)26

スロースタート・輻輳回避
44

タイムアウト40

輻輳ウィンドウ（キロバイト）

36

閾値

3228
閾値

24
20
16128400246810121416経過時間（往復遅延）

1820

222427

TCP Congestion Window
congestion

cwnd

cwnd

advertised_window

advertised_window

timetime< Congestionなしの場合 >< Congestion経験の場合 >(*) Duplicated ACKを使用せず
28

TCP Congestion Window(1)1[受][送][受][送]111111129

TCP Congestion Window(2)
2

3[受]

[送]

[受]

[送]
23 22
33223322330

TCP Congestion Window(3)47[受][送]6 5[受][送]45 4

764 56 57 67454565674431

TCP Congestion Window(4)812[受]

[送]
56[受]

[送]
879 86710 913 1211 108 98711 10

11 10 998814 1312 1189 1015 14

13 12

911

必要なウィンドー幅 ≧ BWxRTT

1032

Window Scaling for Long Fat Pipe
- RFC1323 Network
Ethernet
T1（大陸間）T1（衛星）T3（大陸間）OC12（大陸間）

Bandwidth（bps）
10.000 M
1.544 M
1,544 M
45,000 M
2,400,000 M

RTT（ms）
360
5006060BWxRTT（B）
3,750
11,58096,500337,500
7,500,000

・ Max. Window Size ； 2^(16) Bytes = 64KB→ Window Scaling ; “wscale”
wscale=n → 64 x 2^(n) windowサイズ
33

TCPのフロー制御• 送信側の ウィンドー制御は、勝手に 作れる。
– 実装は、ある程度 同じものになっている。
– しかし、定義上、いろいろな アルゴリズムを 適用・導入可能にしてある。

• 受信側は、上限のみを 通知する。

34

RFC 1379 ; T/TCP- Transaction TCP [目的]TCPコネクションの確立・開放手続きの速度アップ[方法]
・ CC (Connection Count) Option
・ SYNへのPiggy-back ; “half-synchronization”(1) SYN, Data, FIN, CC(2) SYN, SYN-ACK, Data, FIN, FIN-ACK,
CC, CC-Echo(3) FIN-ACK
35

RFC 1379 ; T/TCP
ServerClientSYN_ACK(a+1,b)

ClientServerSYN,S-ack,Data,F,F-ack

Data_ACK(a+2,b+1)
FIN (m,s)
ACK (m+1)
FIN_ACK (m+1,s)ACK (s+1)

9 セグメント→ 3 セグメント

36

UDPヘッダ

32ビット

送信元ポート番号

宛先ポート番号

UDP長

UDPチェックサム

37

RTP (Real-Time Transport Protocol)

ユーザ空間

マルチメディアアプリケーション

EthernetIP
UDP RTP
ヘッダ ヘッダ ヘッダ ヘッダ

RTP
ソケットインタフェース

OS
カーネル

RTPぺイロード

UDP
UDPペイロードIP
イーサネットIPペイロード
イーサネットぺイロード(a)(b)

38

RTPヘッダ
32ビット

バー
ジョン P XCC

M ぺイロードタイプ

順序番号

タイムスタンプ

同期送信元識別子寄与送信元識別子

39

RTP
・ RTPの仕事;「受信ノードにおいて、送信側から送信されるデータの出力タイミングを再生する。」

受信バッファ

送信ノード

Application

タイミング制御

Generate
Delay-Jitter
40

RTP
d1

d2

d3

d4

・ 送信側タイミング;
t1

t2

t3

t4

t5

t1

t2

t3

t4

t5

T

T+t1

T+t2

T+t3

T+t4

・ 受信側入力タイミング;

・ 受信側出力タイミング;

d1

d2

d3

T+t5

d4

Off-set41

新しい方向性1. マルチパス化– MTCP (Multi-Pah TCP)
➔ 複数のIPアドレスを利用

2. UDP ＋ アプリケーション での実装
– QUIC(Quick UDP Internet Connection)(*) Proposed and implemented by Google
1. 初期設定のための Hand-Shake を高速化
2. 前方誤り訂正機能(FEC：Forward Error Correction)3. 暗号化
4. 自由なフロー制御
42