プロが教えるわが家の防犯対策術!

HTTPで「http://www.yahoo.co.jp」にアクセスしようとした場合、どのような内部処理が行われるのでしょうか?

大まか流れとして
1・DNSによる名前解決
2・TCPセッションの確立
3・HTTP要求
と考えてます。(ARP解決は省略します)

1・DNSによる名前解決
プロトコルスタックの流れだとHTTP→DNS→TCP→IP→Ethernetでネットワークに送信され、応答がEthernet→IP→TCP→DNSになると思います。

2・TCPセッションの確立(省略)
SYN→SYN ACK→ACK

3・HTTP要求(省略)
HTTP GET→HTTP 200 OK

わからない部分は1・DNSによる名前解決が終わったあとどうやって2・TCPセッションの確立に移行するのかということです。
(同様に2・TCPセッションの確立が終わったあとに3・HTTP要求)

A 回答 (2件)

アプリケーションレベルでの手順で良いかな。


DNSを使うかどうかは設定次第だと思うけど、名前解決は今だとgetaddrinfoで行うかな。
# http://www.linux.or.jp/JM/html/LDP_man-pages/man …

これでソケットを作成するのに必要なIPアドレスやポート情報が得られるから、これを使ってsocketでクライアントソケットを作り、connectでTCPセッションを開始する。

HTTPはセッションが繋がったソケットにリクエストをwriteで書き込んで、レスポンスをreadで読み込むだけ。

アプリケーションとしては上記のライブラリ関数やシステムコールを順に呼ぶだけです。名前解決が終わらないとgetaddrinfoは返らないし、TCPセッションが確立しないとconnectは返らないので、返ったら(エラーチェックは必要ですが)次へ進めば良いです。参考URLにHTTPではないですがアクセス手順のサンプルがあるので参考にしてください。

参考URL:http://www.linux.or.jp/JM/html/LDP_man-pages/man …
    • good
    • 0

どのレベルの詳細さの回答を望んでいるのか不明。


ともかく「1・DNSによる名前解決」の記述から間違っています。名前解決ではHTTPパケットは流れないし,DNSが使うプロトコルはTCPではなくUDPです。

Google検索などして,もっとも代表的な無料のパケットキャプチャソフト Wireshark の使い方を知り,Yahoo!にWebアクセスしたときの一連のパケットをご自身の目で見てみる方が話が早いのではないでしょうか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!