Comments
Description
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 フロー制御 セグメント順序整列