WireSharkで見るWeb通信講座(通信フロー編)

前回までは、本体のパケットの内容
前回
前々回

今回は、通信を成立させるまでの、
通信フローを見ていく。

〇TCP 3Wayハンドシェーク

キャプチャデータをTCPの送信元ポート番号でフィルタ
(IPアドレスや宛先ポートで絞ると、
 その相手との別の通信も表示される。
 特定の通信の一連の流れを見たいときは、
  送信元ポート番号で絞るのがいい。)

フィルタバーに”tcp.port==*****”と入力してEnter

・Syn
 クライアント→サーバー
 コネクションを張ろうというリクエスト

・Syn, Ack
 サーバー→クライアント
 コネクションを張ろうというリクエスト
 &↑のリクエストに対する了解

・Ack
 ↑のリクエストに対する了解

この、3Wayハンドシェークによって、
サーバーのポート80番と、
クライアントのポート51901番で、
データをやり取りすることが決まった。

それから、GETリクエストが送られた後、
サーバーからデータを送っては、
クライアントから「Ack」を返すやり取りを何度かしていて、
最後に、”HTTP 200 OK”レスポンスが送られて、
通信が完了しています。

本当は通信が完了したら、 ハンドシェークを閉じる
fin-ackのやり取りがあるけど、
今回はそこまで取れなかったので割愛。

〇DNS

いわゆる名前解決。
URL(ホスト名)からIPアドレスを問い合わせるプロトコル。

フィルタバーに”dns”と入力してEnter
(dnsのパケットが多くてわかりにくいときは、
  “dns.qry.name==(対象のホスト名)”と入力すると、
 対象のホスト名の名前解決の通信だけに絞れる。)

●リクエスト

ひとまず押さえておきたいところはここだけ。
・query
DNSレコードの、ホスト名・タイプ・クラス。
今回は、Aレコードなので、
ホスト名に対するIPアドレスを要求。

DNSレコードについては↓を参照
https://qiita.com/naoki_mochizuki/items/d90c1fdd5b25c0136a69

●リプライ

問い合わせたホスト名の
IPアドレスが返答される。

※ちなみに、DNSは一度解決すると、一定時間キャッシュするので、
 キャッシュが残っている場合は通信前に改めて実施する必要なし。

〇ARP

宛先/NextHopのIPアドレスを持つホスト(インターフェイス)の
MACアドレスを問い合わせるプロトコル。

●リクエスト

(重要なとこ、黒塗りですいません。念のため。)

対象IPアドレスに対応するMACアドレスを、
ブロードキャストで問い合わせる。

・Terget IP address
 対象のIPアドレス

 セグメント内の通信の場合は、
 これからしたい通信の宛先IPアドレス。
 外部セグメントに対する通信の場合は、
 NextHopのIPアドレス。

●リプライ

・Sender MAC address
 リクエストの対象IPアドレスを持つホストは、
 自分のMACアドレスを入れて返す。

※ちなみに、ARPもキャッシュするので、
 キャッシュが残っている場合は省略される。

コメントを残す

メールアドレスが公開されることはありません。