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要求)
No.1ベストアンサー
- 回答日時:
アプリケーションレベルでの手順で良いかな。
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 …
No.2
- 回答日時:
どのレベルの詳細さの回答を望んでいるのか不明。
ともかく「1・DNSによる名前解決」の記述から間違っています。名前解決ではHTTPパケットは流れないし,DNSが使うプロトコルはTCPではなくUDPです。
Google検索などして,もっとも代表的な無料のパケットキャプチャソフト Wireshark の使い方を知り,Yahoo!にWebアクセスしたときの一連のパケットをご自身の目で見てみる方が話が早いのではないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- VPN DNS「8.8.8.8」とは何なのでしょうか? 固定 IP アドレスで光回線の代わりに使えますか? 4 2022/10/17 16:30
- Windows 10 インストールしたてのVirtualBoxの仮想マシンにDHCPで割り振られるIPアドレスにつきまして 1 2023/05/03 14:46
- UNIX・Linux iptablesを設定するとメール送信処理が遅くなる!? 6 2022/06/07 01:11
- PHP 「ログイン機能を持たせる」説明が気難しいです。 2 2022/10/11 02:59
- UNIX・Linux Ubuntuサーバーでメールを受信できない 7 2022/08/23 20:55
- デスクトップパソコン 古ーいパソコン/Atheros AR2181 PCIe Gigabit LAN コントローラー 7 2022/09/07 12:58
- その他(コンピューター・テクノロジー) 「プロトコル」の定義について 5 2023/04/16 13:13
- VPN 無料のwifiはなぜ危険性高い? VPN プライベートDNSモードにすれば安全? 2 2022/06/04 18:23
- ネットワーク OSI参照モデルの各層の役割がわかりません。 3 2023/04/21 21:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javascriptでのログアウトボタン
-
グローバルIPアドレスの変更タ...
-
ブラウザバック禁止
-
セッションの情報の消去について
-
エクリプスを使ってのセッショ...
-
XMLHTTPを使って、セッションID...
-
HttpSessionListenerクラスに関...
-
javascriptでセッションを取得
-
フォーム上で押されたボタンに...
-
腕時計の時報をならないように...
-
C言語で今まで表示していた画面...
-
リクエストに応じたselectedの...
-
jspでbeanを使いたいのです...
-
ボタンが活性化の場合とは、ボ...
-
strutsで、JSP→アクションクラ...
-
VC++にて、コンソールを二画面表示
-
VB6 開発環境のエディタに行...
-
ActiveReportのDataSourceについて
-
三菱GOTの画面切り替えについて
-
Javascriptのhistory.back()が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javascriptでセッションを取得
-
グローバルIPアドレスの変更タ...
-
javascriptでセッションの削除...
-
エラーページ遷移後に入力値を残す
-
JSPでsession変数が勝手に書き...
-
ASP Session変数名の取得
-
sessionスコープとapplication...
-
画面遷移でセッション切れにな...
-
ASP.NETのGlobal.asaxについて
-
セッションタイムアウト時にエ...
-
Tomcatでの同一セッション同時...
-
javascriptでのログアウトボタン
-
jsessionidの有効期限を延長す...
-
セッションタイムアウトの設定...
-
setAttribute getAttribute 配...
-
セッションIDの桁数
-
JSPでブラウザ終了時にPostgreS...
-
JSP + ラジオボタン
-
HttpSessionListenerクラスに関...
-
複数Webサーバーでのセッション...
おすすめ情報