計算機ネットワークポート番号 (port) 16ビット → 0 ~ 65535 Well Known Port 0 ~...
Transcript of 計算機ネットワークポート番号 (port) 16ビット → 0 ~ 65535 Well Known Port 0 ~...
-
第8回 UDP・TCP
計算機ネットワーク
1
-
イーサネットデータ
L4 トランスポート層
2
データ L4
ヘッダ
IPデータ TCP ヘッダ
IP
ヘッダ
イーサ ヘッダ
IP
ヘッダ TCP
ヘッダ
フレームデータ 最大長=MTU=1500 Byte maximum transfer unit
L4 セグメント
L3 パケット
L2 フレーム イーサ トレイラ
セグメントデータ 最大長=MSS maximum segment size
PDU: Protocol Data Unit
-
トランスポート層
エンドツーエンドのデータ送受信
送信元端末 ⇔ 宛先端末
アプリケーションプログラム間
通信の多重化
IPでは提供されない機能
信頼性,到達順序,フロー制御
3
-
トランスポート層
UDP / User Datagram Protocol
コネクションレス型
TCP / Transmission Control Protocol
コネクション型
データの信頼性
4
-
配送の多重化
ホスト上のプロセスを識別する情報
ポート
IPアドレス
ポート
ポート
ポート
プロセスA
プロセスB
プロセスC
IPアドレス
ポート
ポート
ポート
プロセスA
プロセスB
プロセスC
IPアドレス + ポート番号 :通信相手のプロセスを指定(ソケット)
5
-
ポート番号 (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 短命
6
-
ソケット通信
バークレイソケット BSD UNIX
IP アドレス+ポートのペア
プロセスA
プロセスB
プロセスC
49160
49161
49162
Webサーバ 80
メールサーバ 25
7
200.0.0.1 160.2.4.21
Firefox
Thunderbird
sendmail
httpd
ソケットの管理・割り当て OS
ソケット状態 LISTEN ESTABLISHED
意味 接続待ち状態 接続中
Bind
bind→listen→accept connect
close close
-
代表的なポート番号
ポート トランスポート層プロトコル
アプリケーション
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
8
(¥Windows¥system32¥drivers¥etc)
-
UDP データグラム
RFC 768
9
チェックサム UDPデータグラム長
宛先ポート 送信元ポート
16bit 16bit
16bit 16bit
Protocol 番号17 DHCP, TFTP, SNMP, NFS, DNS
-
UDP
User Datagram Protocol
コネクションレス型
信頼性
エラーチェック
オーバーヘッド ⇒ 少
プロトコル自体の処理時間
リアルタイム性
10
-
TCPセグメント
RFC 793
11
-
TCP
Transmission Control Protocol
コネクション型
エンドツーエンドのコネクション確立
確認応答、再送
データの信頼性
データ順序の保証
フロー制御
12
-
TCPセグメント
RFC 793
13
送信元ポート 宛先ポート
シーケンス 番号(32)
確認応答番号(32)
ウィンドウ サイズ
チェック
オプション 4オクテット毎
フラグ(6)
ヘッダ長(4) 4オクテット単位
-
コードビット
URG: 緊急
ACK: 応答確認
PSH: Push データプッシュ要求
RST: Reset 接続強制切断
Syn: 接続開始要求
FIN: 接続終了要求
14
-
3 Way Handshake
コネクション開始
Syn, Syn+Ack, Ack
Seq はそれぞれ独立でインクリメント
Ack は次に要求するSeqの値
送信・受信側のソケットのペア ⇒ コネクションを特定
15
-
SYN
SYN + ACK
ACK
SYN SENT
SYN RCVD
ESTABLISHED
ESTABLISHED
FIN
ACK
FIN
ACK
CLOSE WAIT
LAST ACK
FIN WAIT 1
FIN WAIT 2
TIME WAIT
CLOSED CLOSED
16
スリーウェイハンドシェイク
送信側 受信側
-
seq5000, ack1500
data 1000
seq1500, ack6000
data 100
seq6000, ack1600, data 1000
seq1600, ack7000, data 100
肯定確認応答ACK
seq : シーケンス番号 データの順番(オクテット) ack:次に送信して欲しいシーケンス番号
17
送信側 受信側
-
seq5000, data 1000
ack6000
seq6000, data 1000
ack7000
肯定確認応答ACK
seq : シーケンス番号 データの順番(オクテット) ack:次に送信して欲しいシーケンス番号
18
seq7000, data 1000
seq7000, data 1000
×
送信側 受信側
-
ウィンドウ制御
ウィンドウサイズ
受信側
受信可能オクテット数を送信側へ
送信側
ウィンドウサイズ分だけ送信
そのあと、ACKを待つ
MSS, MTU, RWIN
スロースタート(輻輳制御)
スライディングウィンドウ(受信側フロー制御)
19
-
ウィンドウ制御
MSS, MTU, RWIN
MSS: 最大セグメントサイズ
パケット長(フレーム長) MTU で決まる
RWIN
受信可能ウィンドウサイズ
輻輳制御・フロー制御
スロースタート
スライディングウィンドウ
20
-
S seq5000, ack1, size 1000
TCPウインドウ (受信バッファ,RWIN)
S seq1, ack6000, win 3000
S seq6000, ack2, size1000
S seq7000, ack2, size1000
S seq8000, ack2, size1000
S seq1, ack7000, win 3000 S seq1, ack8000, win 3000
S seq1, ack9000, win 3000
data
5000
6000
data
TCP
window
3000
5000
6000
21
送信側 受信側
-
S seq5000, ack1, size 1000
TCPウインドウ
S seq1, ack6000, win 3000
S seq6000, ack2, size1000
S seq7000, ack2, size1000
S seq8000, ack2, size1000
S seq1, ack9000, win 3000
data
5000
6000
data
TCP
window
3000
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
S seq1, ack9000, win 1000 data
5000
6000
data
TCP
window
3000
5000
6000
23
S seq9000, ack2, size1000
S seq1, ack10000, win 2000
フロー制御 送信側 受信側
-
# 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 12:17:08.852417 IP 173.194.38.120.80 > 172.21.39.138.56672: S 3477156539:3477156539(0) ack 2339783771 win 14180 12:17:08.852424 IP 172.21.39.138.56672 > 173.194.38.120.80: . ack 3477156540 win 8330 12:17:08.852468 IP 172.21.39.138.56672 > 173.194.38.120.80: P 2339783771:2339783960(189) ack 3477156540 win 8330 12:17:08.868783 IP 173.194.38.120.80 > 172.21.39.138.56672: . ack 2339783960 win 239 12:17:08.912884 IP 173.194.38.120.80 > 172.21.39.138.56672: . 3477156540:3477157958(1418) ack 2339783960 win 239 12:17:08.912889 IP 173.194.38.120.80 > 172.21.39.138.56672: . 3477157958:3477159376(1418) ack 2339783960 win 239 12:17:08.912893 IP 172.21.39.138.56672 > 173.194.38.120.80: . ack 3477159376 win 7976 12:17:08.912895 IP 173.194.38.120.80 > 172.21.39.138.56672: . 3477159376:3477160794(1418) ack 2339783960 win 239 12:17:08.912899 IP 173.194.38.120.80 > 172.21.39.138.56672: P 3477160794:3477161375(581) ack 2339783960 win 239 12:17:08.912902 IP 172.21.39.138.56672 > 173.194.38.120.80: . ack 3477161375 win 8080 12:17:08.913015 IP 173.194.38.120.80 > 172.21.39.138.56672: . 3477161375:3477162793(1418) ack 2339783960 win 239 12:17:08.913018 IP 173.194.38.120.80 > 172.21.39.138.56672: . 3477162793:3477164211(1418) ack 2339783960 win 239 12:17:08.913022 IP 172.21.39.138.56672 > 173.194.38.120.80: . ack 3477164211 win 7976 12:17:08.913024 IP 173.194.38.120.80 > 172.21.39.138.56672: P 3477164211:3477165471(1260) ack 2339783960 win 239 12:17:08.913026 IP 173.194.38.120.80 > 172.21.39.138.56672: . 3477165471:3477166889(1418) ack 2339783960 win 239 12:17:08.913030 IP 172.21.39.138.56672 > 173.194.38.120.80: . ack 3477166889 win 7641 12:17:08.913032 IP 173.194.38.120.80 > 172.21.39.138.56672: . 3477166889:3477168307(1418) ack 2339783960 win 239 12:17:08.913034 IP 173.194.38.120.80 > 172.21.39.138.56672: FP 3477168307:3477169261(954) ack 2339783960 win 239 12:17:08.913038 IP 172.21.39.138.56672 > 173.194.38.120.80: . ack 3477169262 win 7345 12:17:08.913127 IP 172.21.39.138.56672 > 173.194.38.120.80: . ack 3477169262 win 8330 12:17:08.914129 IP 172.21.39.138.56672 > 173.194.38.120.80: F 2339783960:2339783960(0) ack 3477169262 win 8330 12:17:08.930248 IP 173.194.38.120.80 > 172.21.39.138.56672: . ack 2339783961 win 239
24
172.21.39.138 173.194.38.120
56672 80 TCP 接続
パケット観察 tcpdump CUI ソフトウェア
TCP flag Sequence 番号 とサイズ
肯定確認応答番号
-
パケットアナライザ
25
スニファ(sniffer)
(packet analyzer)
Wireshark Pcap ライブラリ (← tcpdump のライブラリ)
-
TCP状態遷移
。
CLOSED
LISTEN
ESTAB
SYN SENTSYN RCVD
TCB削除
TCB削除
TCB生成とSYN送信
能動的OPEN
CLOSE
CLOSE
TCB生成
受動的OPEN
ACK送信 SYN受信
SYN,ACK送信
SYN送信
SYN受信
SEND
ACK送信
SYN,ACK受信SYNのACK受信
FIN WAIT-1 CLOSE WAIT
FIN送信
FIN送信 ACK送信
CLOSE
CLOSE FIN受信
CLOSING
LAST-ACK
FIN WAIT-2
TIME WAIT
CLOSED
FINのACK受信
FIN受信CLOSE
FIN送信
ACK送信
TCB削除
FIN受信
FINのACK受信
Timeout=2MSL
FINのACK受信
ACK送信
CLOSED
LISTEN
ESTAB
SYN SENTSYN RCVD
TCB削除
TCB削除
TCB生成とSYN送信
能動的OPEN
CLOSE
CLOSE
TCB生成
受動的OPEN
ACK送信 SYN受信
SYN,ACK送信
SYN送信
SYN受信
SEND
ACK送信
SYN,ACK受信SYNのACK受信
FIN WAIT-1 CLOSE WAIT
FIN送信
FIN送信 ACK送信
CLOSE
CLOSE FIN受信
CLOSING
LAST-ACK
FIN WAIT-2
TIME WAIT
CLOSED
FINのACK受信
FIN受信CLOSE
FIN送信
ACK送信
TCB削除
FIN受信
FINのACK受信
Timeout=2MSL
FINのACK受信
ACK送信
Established
LISTEN
SYN SENT
SYN RCVD
FIN_WAIT-1
FIN_WAIT-2
TIME_WAIT
CLOSE_WAIT
26
-
ソケットの状態確認
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
27
-
28
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 48 192.168.1.100.22 222.229.72.5.12545 ESTABLISHED
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 *.*
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
TCP [::]:49160 [::]:0 LISTENING 788
UDP 0.0.0.0:443 *:* 3692
-
まとめ
トランスポート層
ソケット・ポート番号
UDP
TCP
3Way Handshake
Sequence & Acknowledge Number
Sliding Window
29
確認&再送要求, セグメント順序整列
コネクション型
フロー制御