第
8回 UDP・TCP
イーサネットデータ
L4
トランスポート層
データ
L4
ヘッダ
IPデータ
TCP
ヘッダ
IP
ヘッダ
イーサ
ヘッダ
ヘッダ
IP
ヘッダ
TCP
フレームデータ
最大長=MTU=1500 Byte
maximum transfer unit
L4 セグメント
L3 パケット
L2 フレーム
トレイラ
イーサ
セグメントデータ
最大長=MSS
maximum segment size
トランスポート層
エンドツーエンドのデータ送受信
送信元端末
⇔ 宛先端末
アプリケーションプログラム間
通信の多重化
IPでは提供されない機能
信頼性,到達順序,フロー制御
トランスポート層
UDP / User Datagram Protocol
コネクションレス型
TCP / Transmission Control Protocol
コネクション型
配送の多重化
ホスト上のプロセスを識別する情報
ポート
IPアドレス
ポート
ポート
ポート
プロセス
A
プロセス
B
プロセス
C
IPアドレス
ポート
ポート
ポート
プロセス
A
プロセス
B
プロセス
C
IP
アドレス
+
ポート番号
:通信相手のプロセスを指定(
ソケット
)
ポート番号
(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 短命
ソケット通信
バークレイソケット
BSD UNIX
IP アドレス+ポートのペア
プロセス
A
プロセス
B
プロセス
C
49160
49161
49162
Webサーバ
80
メールサーバ
25
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
(¥Windows¥system32¥drivers¥etc)
UDP データグラム
RFC 768
チェックサム
UDPデータグラム長
宛先ポート
送信元ポート
16bit
16bit
16bit
16bit
Protocol 番号17
DHCP, TFTP, SNMP, NFS, DNS
UDP
User Datagram Protocol
コネクションレス型
信頼性
エラーチェック
オーバーヘッド
⇒
少
プロトコル自体の処理時間
リアルタイム
性
TCPセグメント
RFC 793
TCP
Transmission Control Protocol
コネクション型
エンドツーエンドのコネクション確立
確認応答、再送
データの信頼性
データ順序の保証
フロー制御
TCPセグメント
RFC 793
送信元ポート
宛先ポート
シーケンス
番号
(32)
確認応答番号
(32)
ウィンドウ
サイズ
チェック
オプション
4オクテット毎
フラグ
(6)
ヘッダ長
(4)
4オクテット単位
コードビット
URG:
緊急
ACK:
応答確認
PSH: Push データプッシュ要求
RST: Reset 接続強制切断
Syn:
接続開始要求
FIN:
接続終了要求
3 Way Handshake
コネクション開始
Syn, Syn+Ack, Ack
Seq はそれぞれ独立でインクリメント
Ack は次に要求するSeqの値
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
送信側
受信側
seq5000, ack1500
data 1000
seq1500, ack6000
data 100
seq6000, ack1600, data 1000
seq1600, ack7000, data 100
seq : シーケンス番号 データの順番(オクテット)
ack:次に送信して欲しいシーケンス番号
seq5000, data 1000
ack6000
seq6000, data 1000
ack7000
seq : シーケンス番号 データの順番(オクテット)
ack:次に送信して欲しいシーケンス番号
seq7000, data 1000
seq7000, data 1000
×
送信側
受信側
ウィンドウ制御
ウィンドウサイズ
受信側
受信可能オクテット数を送信側へ
送信側
ウィンドウサイズ分だけ送信
そのあと、
ACKを待つ
MSS, MTU, RWIN
スロースタート(輻輳制御)
スライディングウィンドウ(受信側フロ
ー制御)
ウィンドウ制御
MSS, MTU, RWIN
MSS: 最大セグメントサイズ
パケット長
(フレーム長) MTU で決まる
RWIN
受信可能ウィンドウサイズ
輻輳制御・フロー制御
スロースタート
スライディングウィンドウ
S seq5000, ack1, size 1000
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
送信側
受信側
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 3000
data
5000
6000
data
TCP
window
3000
5000
6000
送信側
受信側
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
S seq9000, ack2, size1000
S seq1, ack10000, win 2000
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 288038936 0>
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,timestamp 1598516590 288038936,nop,wscale 6> 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 288038953 1598516590> 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 1598516650 288038953> 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 1598516650 288038953> 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 1598516650 288038953> 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 1598516650 288038953> 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 1598516650 288038953> 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 1598516650 288038953> 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 1598516650 288038953> 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 1598516650 288038953> 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 1598516650 288038953> 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 1598516650 288038953> 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 288039015 1598516650> 12:17:08.930248 IP 173.194.38.120.80 > 172.21.39.138.56672: . ack 2339783961 win 239 <nop,nop,timestamp 1598516668 288039015>
172.21.39.138
173.194.38.120
56672
TCP 接続
80
TCP flag
Sequence 番号
とサイズ
肯定確認応答番号
パケットアナライザ
スニファ
(sniffer)
TCP状態遷移
CLOSED LISTEN ESTAB SYN SENT SYN RCVD TCB削除 TCB削除 TCB生成とSYN送信 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 SENT SYN RCVD TCB削除 TCB削除 TCB生成とSYN送信 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
ソケットの状態確認
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_WAITProto 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 *.* 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