Upgrade to Pro — share decks privately, control downloads, hide ads and more …

KLab

yangniao23
August 30, 2023
25

 KLab

yangniao23

August 30, 2023
Tweet

Transcript

  1. DNS Server Client UDP 53 ? www.example.com WWW Server Enter

    Response A 192.51.100.43 AAAA 2001:db8::3b TCP SYN TCP SYN/ACK TCP ACK TCP 3-Way Handshake TCP Connection GET / HTTP/1.1 HTTP/1.1 200 OK + Body Close Connection 1. DNS サーバへ問い合わせ 2. TCP コネクションの確立 3. HTTP GET メソッド 4. データの受信 5. TCP コネクションの解放 概要図
  2. バージョン 4 全⻑ 576オクテットまでは受信可能にする必要あり 識別番号 TTL ルータ通過時に1減 0で破棄 フラグ 送信元

    IPv4 アドレス 宛先 IPv4 アドレス オプション 32 bit 単位で可変⻑ データ フラグ (各1bit) 0 MF フラグメント 途中 DF フラグメント 禁⽌ 0 8 16 24 32 [Bit] (RFC791) IHL ヘッダ⻑ ToS QoS 制御に使⽤ フラグメント・オフセット フラグメントが占める位置 最初は0 プロトコル番号 TCP は 6,UDP は 17 ヘッダチェックサム 16bitずつ 1の補数で クライアント IP アドレス: 172.16.0.1 サーバ IP アドレス: 203.0.113.1 とする.(ルータで NAPTされる) IPv4 ヘッダの構造
  3. バージョン 6 ペイロード⻑ フローラベル QoS 制御に使⽤ ホップ制限 IPv4 の TTL

    と同様 送信元 IPv6 アドレス (128 bit) 宛先 IPv6 アドレス (128 bit) ペイロード 0 8 16 24 32 [Bit] (RFC8200) トラヒッククラス QoS 制御に使⽤ ネクストヘッダ 拡張ヘッダのタイプ 拡張ヘッダ 32bit 単位で可変⻑ クライアント IP アドレス: 2001:db8::1 サーバ IP アドレス: 2001:db8:1::1 とする. IPv6 ヘッダの構造
  4. 送信元ポート番号 宛先ポート番号 データ⻑ チェックサム 16bit単位で1の補数を⽤いて計算される データ 0 8 16 24

    32 [Bit] (RFC768) 1. ARP テーブルからルータの MAC アドレスを検索 2. ルータの UDP 53 番へ DNS クエ リパケットを送信 Name: www.example.com Type: A (Host Address) // IPv6は AAAA (IPv6 Address) Class: IN 3. レスポンスを受け取る Answers: www.example.com: type A, class IN, addr 203.0.113.1 Answers: www.example.com: type AAAA, class IN, addr 2001:db8:1::1 1. DNS サーバへ問い合わせ
  5. 送信元ポート番号 Dynamicポートから動的に決定 宛先ポート番号 80 シーケンス番号 最初はランダムにセット 以降は先頭データの位置を返す ACK 番号 受信が完了したデータ位置のシーケンス番号+1

    を返す データ・ オフセット 予約済 フラグ (後述) Window サイズ ACK を待たず⼀度に受信可能なデータ⻑ チェックサム 16bit単位で1の補数を⽤いて計算される 緊急ポインタ URG フラグが1のとき有効 緊急データの場所を⽰す オプション 可変⻑ データ 可変⻑で ACK 応答の場合0バイト フラグ (各1bit) CWR 輻輳制御 ウィンドウ 縮⼩ ECE 輻輳発⽣を 通知 URG 緊急データの 有無 ACK 有効なACK 番号の有無 FIN 終了要求 SYN 確⽴要求 RST 強制切断 PSH バッファリン グの禁⽌ 0 8 16 24 32 [Bit] (RFC9293) TCP 3-way handshake で TCP コネクションを確立する 1. CL:64026→SV:80 : [SYN] Seq=0 2. SV:80→CL:64026 : [SYN,ACK] Seq=0, Ack=1 3. CL:64026→SV:80 : [ACK] Seq=1, Ack=1 2.TCPコネクション確立
  6. HTTP はテキストベースのプロトコル 以下の内容が ASCII コードでエンコードされて TCP Payload に乗る CL:64026→SV:80 (TCP

    ペイロード長 77 bytes) GET / HTTP/1.1 (メソッド, URI, プロトコルバージョン) Host: www.example.com これを受け取ったサーバはまず ACK を返し,HTTP 応答の準備を行う SV:80→CL:64026 : [ACK] Seq=1, Ack=78 3. HTTP GET
  7. サーバは HTTP 応答を行う SV:80→CL:64026 (ペイロード長 979 bytes) HTTP/1.1 200 OK

    Date: Sun, 07 May 2023 05:52:49 GMT Server: Apache Last-Modified: Fri, 09 Dec 2022 08:36:16 GMT ETag: "34aa387-d-1568eb00" Accept-Ranges: bytes Content-Length: 752 Content-Type: text/html <!DOCTYPE html> <html> (中略) </html> (RFC7230 を参考に記述) 4. データの受信
  8. 送信元ポート番号 Dynamicポートから動的に決定 宛先ポート番号 80 シーケンス番号 最初はランダムにセット 以降は先頭データの位置を返す ACK 番号 受信が完了したデータ位置のシーケンス番号+1

    を返す データ・ オフセット 予約済 フラグ (後述) Window サイズ ACK を待たず⼀度に受信可能なデータ⻑ チェックサム 16bit単位で1の補数を⽤いて計算される 緊急ポインタ URG フラグが1のとき有効 緊急データの場所を⽰す オプション 可変⻑ データ 可変⻑で ACK 応答の場合0バイト フラグ (各1bit) CWR 輻輳制御 ウィンドウ 縮⼩ ECE 輻輳発⽣を 通知 URG 緊急データの 有無 ACK 有効なACK 番号の有無 FIN 終了要求 SYN 確⽴要求 RST 強制切断 PSH バッファリン グの禁⽌ 0 8 16 24 32 [Bit] (RFC9293) 1. CL:64026→SV:80 : [FIN, ACK] Seq=78 Ack=980 2. SV:80→CL:64026 : [FIN, ACK] Seq=980, Ack=79 3. CL:64026→SV:80 : [ACK] Seq=79, Ack=981 5.TCPコネクション解放