計算機ネットワークポート番号 (port) 16ビット → 0 ~ 65535 Well Known Port 0 ~...

29
8UDPTCP 計算機ネットワーク 1

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

    確認&再送要求, セグメント順序整列

    コネクション型

    フロー制御