...

講義資料

by user

on
Category: Documents
881

views

Report

Comments

Transcript

講義資料
1
第8回 UDP・TCP
計算機ネットワーク
2
L4 トランスポート層
PDU: Protocol Data Unit
L4
ヘッダ
L4 セグメント
データ
セグメントデータ 最大長=MSS
maximum segment size
L3 パケット
L2 フレーム
イーサ
ヘッダ
IP
ヘッダ
TCP
ヘッダ
IP
ヘッダ
TCP
ヘッダ
IPデータ
イーサネットデータ
フレームデータ
イーサ
トレイラ
最大長=MTU=1500 Byte
maximum transfer unit
3
トランスポート層

エンドツーエンドのデータ送受信


アプリケーションプログラム間


送信元端末 ⇔ 宛先端末
通信の多重化
IPでは提供されない機能

信頼性,到達順序,フロー制御
4
トランスポート層

UDP / User Datagram Protocol


コネクションレス型
TCP / Transmission Control Protocol


コネクション型
データの信頼性
5
配送の多重化

ホスト上のプロセスを識別する情報

ポート
プロセスA ポート
プロセスB ポート IPアドレス
ポート プロセスA
IPアドレス ポート プロセスB
プロセスC ポート
IPアドレス + ポート番号
:通信相手のプロセスを指定(ソケット)
ポート プロセスC
6
ポート番号 (port)

16ビット
→ 0 ~ 65535
Well Known Port
0 ~ 1023
Privileged(特権ポ
ート)
Registered Port
1024 ~ 49151
登録済み
(1011111111111111)
Dynamic and/or
Private Port
(Ephemeral)
49152 ~ 65535
自由に使用可能
IANA(http://www.iana.org/assignments/port-numbers)
/etc/services
古いBSD => 0~255 特権,256~1023 登録,1024~4999 短命 5001~65535
Windows => 0~1023 特権 1025~4999 短命
7
ソケット通信

バークレイソケット


BSD UNIX
IP アドレス+ポートのペア
ソケットの管理・割り当て
OS
Bind
ソケット状態
LISTEN
ESTABLISHED
意味
接続待ち状態
接続中
Firefox
connect
プロセスA
49160
プロセスB
49161
200.0.0.1
プロセスC 49162
Thunderbird
close
bind→listen→accept
httpd
80 Webサーバ
160.2.4.21
25 メールサーバ
sendmail
close
8
代表的なポート番号
ポート
トランスポート層プ
ロトコル
アプリケーション
20,21
TCP
FTP
22
TCP
SSH
23
TCP
TELNET
25
TCP
SMTP
53
UDP, TCP
DNS
67,68
UDP
DHCP
80
TCP
HTTP
110
TCP
POP
123
UDP
NTP
443
TCP
HTTPS
/etc/services
(¥Windows¥system32¥drivers¥etc)
9
UDP データグラム
RFC 768
送信元ポート
16bit
UDPデータグラム長
16bit
Protocol 番号17
DHCP, TFTP, SNMP, NFS, DNS
宛先ポート
16bit
チェックサム
16bit
10
UDP



User Datagram Protocol
コネクションレス型
信頼性


エラーチェック
オーバーヘッド ⇒ 少


プロトコル自体の処理時間
リアルタイム性
11
TCPセグメント
RFC 793
12
TCP


Transmission Control Protocol
コネクション型


確認応答、再送



エンドツーエンドのコネクション確立
データの信頼性
データ順序の保証
フロー制御
13
TCPセグメント
RFC 793
送信元ポート
宛先ポート
シーケンス
番号(32)
確認応答番号(32)
ヘッダ長(4)
4オクテット単位
フラグ(6)
チェック
オプション
4オクテット毎
ウィンドウ
サイズ
14
コードビット






URG:
ACK:
PSH: Push
RST: Reset
Syn:
FIN:
緊急
応答確認
データプッシュ要求
接続強制切断
接続開始要求
接続終了要求
15
3 Way Handshake
コネクション開始



Syn, Syn+Ack, Ack
Seq はそれぞれ独立でインクリメント
Ack は次に要求するSeqの値
送信・受信側のソケットのペア ⇒ コネクションを特定
16
スリーウェイハンドシェイク
送信側
SYN SENT
SYN
SYN + ACK
ESTABLISHED
受信側
SYN RCVD
ACK
ESTABLISHED
FIN WAIT 1
FIN
ACK
CLOSE WAIT
FIN WAIT 2
FIN
LAST ACK
TIME WAIT
ACK
CLOSED
CLOSED
17
肯定確認応答ACK
seq : シーケンス番号 データの順番(オクテット)
ack:次に送信して欲しいシーケンス番号
送信側
受信側
seq5000, ack1500
data 1000
seq1500, ack6000
data 100
seq6000, ack1600, data 1000
seq1600, ack7000, data 100
18
肯定確認応答ACK
seq : シーケンス番号 データの順番(オクテット)
ack:次に送信して欲しいシーケンス番号
送信側
seq5000, data 1000
ack6000
seq6000, data 1000
ack7000
seq7000, data 1000
×
seq7000, data 1000
受信側
19
ウィンドウ制御

ウィンドウサイズ

受信側


送信側





受信可能オクテット数を送信側へ
ウィンドウサイズ分だけ送信
そのあと、ACKを待つ
MSS, MTU, RWIN
スロースタート(輻輳制御)
スライディングウィンドウ(受信側フロ
ー制御)
20
ウィンドウ制御

MSS, MTU, RWIN

MSS: 最大セグメントサイズ


RWIN


パケット長(フレーム長) MTU で決まる
受信可能ウィンドウサイズ
輻輳制御・フロー制御


スロースタート
スライディングウィンドウ
21
TCPウインドウ (受信バッファ,RWIN)
送信側
5000
6000
S seq5000, ack1, size 1000
S seq1, ack6000, win 3000
S seq6000, ack2, size1000
S seq7000, ack2, size1000
S seq8000, ack2, size1000
data
S seq1, ack7000, win 3000
S seq1, ack8000, win 3000
S seq1, ack9000, win 3000
受信側
TCP
window
3000
data
5000
6000
TCPウインドウ
送信側
5000
6000
22
累積確認応答による高速化
S seq5000, ack1, size 1000
S seq1, ack6000, win 3000
S seq6000, ack2, size1000
S seq7000, ack2, size1000
S seq8000, ack2, size1000
受信側
TCP
window
3000
data
data
S seq1, ack9000, win 3000
5000
6000
スライディングウインドウ
送信側
5000
6000
23
フロー制御
S seq5000, ack1, size 1000
S seq1, ack6000, win 3000
S seq6000, ack2, size1000
S seq7000, ack2, size1000
S seq8000, ack2, size1000
data
S seq1, ack9000, win 1000
S seq9000, ack2, size1000
S seq1, ack10000, win 2000
受信側
TCP
window
3000
data
5000
6000
パケット観察
tcpdump
24
CUI ソフトウェア
# tcpdump -nS tcp port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on em0, link-type EN10MB (Ethernet), capture size 96 bytes
12:17:08.835868 IP 172.21.39.138.56672 > 173.194.38.120.80: S 2339783770:2339783770(0) win 65535 <mss 1460,nop,wscale 3,sackOK,timestamp
12:17:08.852417 IP 173.194.38.120.80 > 172.21.39.138.56672: S 3477156539:3477156539(0) ack 2339783771 win 14180 <mss 1430,sackOK,timesta
12:17:08.852424 IP 172.21.39.138.56672 > 173.194.38.120.80: . ack 3477156540 win 8330 <nop,nop,timestamp 288038953 1598516590>
12:17:08.852468 IP 172.21.39.138.56672 > 173.194.38.120.80: P 2339783771:2339783960(189) ack 3477156540 win 8330 <nop,nop,timestamp 2880
12:17:08.868783 IP 173.194.38.120.80 > 172.21.39.138.56672: . ack 2339783960 win 239 <nop,nop,timestamp 1598516606 288038953>
12:17:08.912884 IP 173.194.38.120.80 > 172.21.39.138.56672: . 3477156540:3477157958(1418) ack 2339783960 win 239 <nop,nop,timestamp 1598
12:17:08.912889 IP 173.194.38.120.80 > 172.21.39.138.56672: . 3477157958:3477159376(1418) ack 2339783960 win 239 <nop,nop,timestamp 1598
12:17:08.912893 IP 172.21.39.138.56672 > 173.194.38.120.80: . ack 3477159376 win 7976 <nop,nop,timestamp 288039014 1598516650>
12:17:08.912895 IP 173.194.38.120.80 > 172.21.39.138.56672: . 3477159376:3477160794(1418) ack 2339783960 win 239 <nop,nop,timestamp 1598
12:17:08.912899 IP 173.194.38.120.80 > 172.21.39.138.56672: P 3477160794:3477161375(581) ack 2339783960 win 239 <nop,nop,timestamp 15985
12:17:08.912902 IP 172.21.39.138.56672 > 173.194.38.120.80: . ack 3477161375 win 8080 <nop,nop,timestamp 288039014 1598516650>
12:17:08.913015 IP 173.194.38.120.80 > 172.21.39.138.56672: . 3477161375:3477162793(1418) ack 2339783960 win 239 <nop,nop,timestamp 1598
12:17:08.913018 IP 173.194.38.120.80 > 172.21.39.138.56672: . 3477162793:3477164211(1418) ack 2339783960 win 239 <nop,nop,timestamp 1598
12:17:08.913022 IP 172.21.39.138.56672 > 173.194.38.120.80: . ack 3477164211 win 7976 <nop,nop,timestamp 288039014 1598516650>
12:17:08.913024 IP 173.194.38.120.80 > 172.21.39.138.56672: P 3477164211:3477165471(1260) ack 2339783960 win 239 <nop,nop,timestamp 1598
12:17:08.913026 IP 173.194.38.120.80 > 172.21.39.138.56672: . 3477165471:3477166889(1418) ack 2339783960 win 239 <nop,nop,timestamp 1598
12:17:08.913030 IP 172.21.39.138.56672 > 173.194.38.120.80: . ack 3477166889 win 7641 <nop,nop,timestamp 288039014 1598516650>
12:17:08.913032 IP 173.194.38.120.80 > 172.21.39.138.56672: . 3477166889:3477168307(1418) ack 2339783960 win 239 <nop,nop,timestamp 1598
12:17:08.913034 IP 173.194.38.120.80 > 172.21.39.138.56672: FP 3477168307:3477169261(954) ack 2339783960 win 239 <nop,nop,timestamp 1598
12:17:08.913038 IP 172.21.39.138.56672 > 173.194.38.120.80: . ack 3477169262 win 7345 <nop,nop,timestamp 288039014 1598516650>
12:17:08.913127 IP 172.21.39.138.56672 > 173.194.38.120.80: . ack 3477169262 win 8330 <nop,nop,timestamp 288039014 1598516650>
12:17:08.914129 IP 172.21.39.138.56672 > 173.194.38.120.80: F 2339783960:2339783960(0) ack 3477169262 win 8330 <nop,nop,timestamp 288039
12:17:08.930248 IP 173.194.38.120.80 > 172.21.39.138.56672: . ack 2339783961 win 239 <nop,nop,timestamp 1598516668 288039015>
Sequence 番号
とサイズ
56672
172.21.39.138
肯定確認応答番号
TCP flag
TCP 接続
80
173.194.38.120
25
パケットアナライザ
Wireshark
(packet analyzer)
スニファ(sniffer)
Pcap ライブラリ (← tcpdump のライブラリ)
。
26
TCP状態遷移
能動的OPEN
受動的OPEN
CLOSED
TCB生成とSYN送信
TCB生成








Established
LISTEN
SYN SENT
SYN RCVD
FIN_WAIT-1
FIN_WAIT-2
TIME_WAIT
CLOSE_WAIT
TCB削除
CLOSE
SYN受信
LISTEN
TCB削除
SEND
SYN,ACK送信
SYN送信
SYN RCVD
CLOSE
CLOSE
SYN SENT
SYN受信
ACK送信
SYNのACK受信
SYN,ACK受信
ACK送信
ESTAB
FIN送信
CLOSE
FIN受信
FIN送信
ACK送信
FIN WAIT-1
CLOSE WAIT
FIN受信
FINのACK受信
CLOSE
ACK送信
FIN送信
CLOSING
FIN WAIT-2
FINのACK受信
LAST-ACK
FIN受信
ACK送信
FINのACK受信
TIME WAIT
Timeout=2MSL
TCB削除
CLOSED
27
ソケットの状態確認
netstat –an
ポートの状態 (Listen, Established, etc.)
コネクションのソケットペア
sockstat (BSD系UNIX)
netstat –ano (Windows)
netstat –anp (Linux)
ソケットを使うプロセス
C:¥Users¥sshin>netstat -an
アクティブな接続
プロトコル ローカル アドレス
外部アドレス
状態
TCP 0.0.0.0:135
0.0.0.0:0
LISTENING
TCP 0.0.0.0:445
0.0.0.0:0
LISTENING
TCP 192.168.1.44:139
0.0.0.0:0
LISTENING
TCP 192.168.1.44:3389
192.168.1.35:3305
ESTABLISHED
TCP 192.168.1.44:8969
192.168.1.11:51431 TIME_WAIT
TCP 192.168.1.44:51167 192.168.1.101:445
CLOSE_WAIT
TCP 192.168.1.44:52439 192.168.1.101:445
ESTABLISHED
TCP 192.168.1.44:53578 192.168.1.100:22
ESTABLISHED
TCP 192.168.1.44:53735 192.168.1.100:55550 ESTABLISHED
TCP 192.168.1.44:60081 125.56.208.10:80
CLOSE_WAIT
TCP 192.168.1.44:60124 69.192.227.51:443
CLOSE_WAIT
28
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:¥Users¥admin>netstat -ano
アクティブな接続
プロトコル ローカル アドレス
外部アドレス
状態
PID
TCP 0.0.0.0:80
0.0.0.0:0
LISTENING
3692
TCP 0.0.0.0:135
0.0.0.0:0
LISTENING
132
TCP 172.21.39.146:55472 199.47.217.172:443 CLOSE_WAIT
4240
TCP 172.21.39.146:55473 50.16.218.122:443
CLOSE_WAIT
4240
TCP 172.21.39.146:56113 199.47.217.177:443 CLOSE_WAIT
4240
TCP 172.21.39.146:56145 222.229.64.201:3128 ESTABLISHED 5728
TCP 172.21.39.146:56155 74.125.235.97:80
ESTABLISHED 5364
TCP 172.21.39.146:56156 74.125.235.99:80
ESTABLISHED 5364
TCP 172.21.39.146:56157 72.14.203.103:443
ESTABLISHED 5364
TCP [::]:49159
[::]:0
LISTENING
1828
Proto Recv-Q Send-Q Local Address
Foreign Address
(state)
TCP [::]:49160
[::]:0
LISTENING
788
tcp4
0 48 192.168.1.100.22
222.229.72.5.12545 ESTABLISHED
UDP 0.0.0.0:443
*:*
3692
tcp4
0 55 192.168.1.101.3392 192.168.1.35.1038
ESTABLISHED
tcp4
0
0 192.168.1.100.139
192.168.1.35.1026
ESTABLISHED
tcp4
0
0 192.168.1.101.445
192.168.1.44.58489 ESTABLISHED
tcp4
0
0 192.168.1.102.445
*.*
LISTEN
tcp4
0
0 192.168.1.101.3391 *.*
LISTEN
tcp4
0
0 192.168.1.101.445
*.*
LISTEN
tcp4
0 96 192.168.1.100.55550 192.168.1.100.18224 ESTABLISHED
tcp4
0
0 192.168.1.100.18224 192.168.1.100.55550 ESTABLISHED
tcp4
0
0 127.0.0.1.30022
*.*
LISTEN
tcp6
0
0 ::1.30022
*.*
LISTEN
tcp4
0
0 192.168.1.100.22
222.229.72.5.12543 ESTABLISHED
tcp4
0
0 192.168.1.100.55550 *.*
LISTEN
tcp4
0
0 192.168.1.100.22
222.229.72.5.13521 ESTABLISHED
tcp4
0
0 *.25
*.*
LISTEN
tcp4
0
0 *.22
*.*
LISTEN
tcp4
0
0 *.*
*.*
CLOSED
tcp46
0
0 *.80
*.*
LISTEN
udp4
0
0 *.518
*.*
udp4
0
0 *.512
*.*
29
まとめ




トランスポート層
ソケット・ポート番号
UDP
TCP



3Way Handshake コネクション型
Sequence & Acknowledge Number
確認&再送要求,
Sliding Window フロー制御
セグメント順序整列
Fly UP