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

KLab

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for yangniao23 yangniao23
August 30, 2023
28

 KLab

Avatar for yangniao23

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コネクション解放