1 第 8 回 UDP TCP 計算機ネットワーク
2 L4 トランスポート層 PDU: Protocol Data Unit L4 セグメント L4 ヘッダ データ セグメントデータ最大長 =MSS maximum segment size L3 パケット IP ヘッダ TCP ヘッダ IP データ L2 フレーム イーサヘッダ IP ヘッダ TCP ヘッダ イーサネットデータ イーサトレイラ フレームデータ 最大長 =MTU=1500 Byte maximum transfer unit
3 トランスポート層 エンドツーエンドのデータ送受信 送信元端末 宛先端末 アプリケーションプログラム間 通信の多重化 IP では提供されない機能 信頼性, 到達順序, フロー制御
4 トランスポート層 UDP / User Datagram Protocol コネクションレス型 TCP / Transmission Control Protocol コネクション型 データの信頼性
5 配送の多重化 ホスト上のプロセスを識別する情報 ポート プロセス A ポート ポート プロセス A プロセス B ポート IP アドレス IP アドレス ポート プロセス B プロセス C ポート ポート プロセス C IP アドレス + ポート番号 : 通信相手のプロセスを指定 ( ソケット )
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 意味 接続待ち状態 接続中 bind listen accept Firefox connect httpd プロセスA 49160 80 Webサーバ プロセスB プロセスC 49161 49162 200.0.0.1 160.2.4.21 25 メールサーバ sendmail Thunderbird close 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 宛先ポート 16bit UDP データグラム長 16bit チェックサム 16bit Protocol 番号 17 DHCP, TFTP, SNMP, NFS, DNS
10 UDP User Datagram Protocol コネクションレス型 信頼性 エラーチェック オーバーヘッド 少 プロトコル自体の処理時間 リアルタイム性
11 RFC 793 TCP セグメント
12 TCP Transmission Control Protocol コネクション型 エンドツーエンドのコネクション確立 確認応答 再送 データの信頼性 データ順序の保証 フロー制御
13 RFC 793 TCP セグメント 送信元ポート シーケンス番号 (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 ESTABLISHED SYN SYN + ACK ACK 受信側 SYN RCVD ESTABLISHED FIN WAIT 1 FIN WAIT 2 TIME WAIT CLOSED FIN ACK FIN ACK CLOSE WAIT LAST ACK CLOSED
肯定確認応答 ACK 17 seq : シーケンス番号データの順番 ( オクテット ) ack: 次に送信して欲しいシーケンス番号 送信側 seq5000, ack1500 data 1000 seq1500, ack6000 data 100 seq6000, ack1600, data 1000 seq1600, ack7000, data 100 受信側
肯定確認応答 ACK 18 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: 最大セグメントサイズ パケット長 ( フレーム長 ) MTU で決まる RWIN 受信可能ウィンドウサイズ 輻輳制御 フロー制御 スロースタート スライディングウィンドウ
TCP ウインドウ ( 受信バッファ,RWIN) 21 5000 6000 送信側 data 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 受信側 TCP window 3000 data 5000 6000
5000 6000 TCP ウインドウ 送信側 data 累積確認応答による高速化 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 5000 6000 22 S seq1, ack9000, win 3000
5000 6000 スライディングウインドウ 送信側 data フロー制御 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 受信側 TCP window 3000 data 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 <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 番号とサイズ パケット観察 TCP flag tcpdump CUI ソフトウェア 肯定確認応答番号 24 56672 TCP 接続 80 172.21.39.138 173.194.38.120
25 パケットアナライザ (packet analyzer) スニファ (sniffer) Wireshark Pcap ライブラリ ( tcpdump のライブラリ )
26 TCP 状態遷移 受動的 OPEN CLOSED 能動的 OPEN TCB 生成と SYN 送信 TCB 生成 TCB 削除 Established LISTEN SYN 受信 SYN,ACK 送信 CLOSE LISTEN SEND TCB 削除 SYN SENT SYN 送信 CLOSE SYN RCVD SYN RCVD ACK 送信 SYN 受信 SYN SENT FIN_WAIT-1 FIN_WAIT-2 TIME_WAIT CLOSE SYN の ACK 受信 FIN 送信 CLOSE ESTAB FIN 受信 ACK 送信 SYN,ACK 受信 CLOSE_WAIT FIN 送信 ACK 送信 FIN WAIT-1 FIN の ACK 受信 FIN 受信 ACK 送信 CLOSE WAIT CLOSE FIN WAIT-2 FIN 受信 CLOSING FIN の ACK 受信 FIN 送信 LAST-ACK ACK 送信 TIME WAIT FIN の ACK 受信 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 Proto Recv-Q Send-Q Local Address Foreign Address (state) TCP [::]:49159 [::]:0 LISTENING 1828 tcp4 0 48 192.168.1.100.22 222.229.72.5.12545 ESTABLISHED TCP [::]:49160 [::]:0 LISTENING 788 tcp4 0 55 192.168.1.101.3392 192.168.1.35.1038 ESTABLISHED UDP 0.0.0.0:443 *:* 3692 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 フロー制御 確認 & 再送要求, セグメント順序整列