• ベストアンサー
  • すぐに回答を!

HTTPアクセスの処理

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要求)

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数94
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
  • rinkun
  • ベストアンサー率44% (706/1571)

アプリケーションレベルでの手順で良いかな。 DNSを使うかどうかは設定次第だと思うけど、名前解決は今だとgetaddrinfoで行うかな。 # http://www.linux.or.jp/JM/html/LDP_man-pages/man3/getaddrinfo.3.html これでソケットを作成するのに必要なIPアドレスやポート情報が得られるから、これを使ってsocketでクライアントソケットを作り、connectでTCPセッションを開始する。 HTTPはセッションが繋がったソケットにリクエストをwriteで書き込んで、レスポンスをreadで読み込むだけ。 アプリケーションとしては上記のライブラリ関数やシステムコールを順に呼ぶだけです。名前解決が終わらないとgetaddrinfoは返らないし、TCPセッションが確立しないとconnectは返らないので、返ったら(エラーチェックは必要ですが)次へ進めば良いです。参考URLにHTTPではないですがアクセス手順のサンプルがあるので参考にしてください。

参考URL:
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/getaddrinfo.3.html

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • TCPの接続処理と終了処理について

    TCPでコネクションを確立するとき、制御フラグでSYN、SYN+ACK、ACKで3パケットをやりとしますが、終了手順のときは、FIN、ACK、FIN、ACKと4パケットをやりとりします。 これは何故でしょうか? コネクション確立時と同じく、FIN、FIN+ACK、ACKにしないのは何故でしょうか?教えてください。

  • C言語でTCPの3way handshake

    (C言語)Linuxのpacket socket(socket(AF?PACKET, SOCK_DGRAM, htons(ETH_P_IP))) を使ってTCPの3way handshakeをOSのプロトコルスタックに頼らず自力で挑戦しています。 RFCやほかの技術本をよんでIPヘッダやTCPヘッダの実装は一応できたのですが、肝心のsynパケットを送った後のackパケットが返ってきません。 wiresharkでは問題なくsynパケットと認識できているのですが、きっとどこかに不備があるはずです。 そこでC, C++ Javaでもいいのでこのプログラムの実装例が載っているサイトなどを教えてください。(英語でもかまいません)

  • 3ウェイハンドシェイクについて

    TCP通信を行う場合、3ウェイハンドシェイクでパイプをつくるようですが、その始め(通信の始め)にSYNを送り、その返信にACKを返す仕組みになっていると思います。そのSYNを送るときに、MAC、IP、TCPヘッダーをつけたパケットを送ると思うのですが、アプリが作ったデータもまた送るのでしょうか?通信できるかどうかを確かめるだけなら最初の通信はデータが必要ないと思うのですが・・・。また、データをつけないパケットなども送ることができるのか(フォーマットに合わないような気が・・・)どうかもあわせてお願いします。

その他の回答 (1)

  • 回答No.2
  • jjon-com
  • ベストアンサー率61% (1597/2589)

どのレベルの詳細さの回答を望んでいるのか不明。 ともかく「1・DNSによる名前解決」の記述から間違っています。名前解決ではHTTPパケットは流れないし,DNSが使うプロトコルはTCPではなくUDPです。 Google検索などして,もっとも代表的な無料のパケットキャプチャソフト Wireshark の使い方を知り,Yahoo!にWebアクセスしたときの一連のパケットをご自身の目で見てみる方が話が早いのではないでしょうか。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • TCP/IP ACKについて

    初めて質問させて頂きます。 現在WinpCapを使ってTCPの通信プログラムを作成しています。 単純にパケットの受信や送信は出来たので、ローカルサーバーに接続出来るか試しているのですが、通信が確立しません。 状況としては、こちらからSYN = 1でサーバーに信号を送ると、サーバーから返事が来ます。 サーバーの返事を待ってACK = 1でサーバーに返事をするのですが、そのときの状態をWiresharkで確認すると、ACKの番号が2067011292等と表示されて通信が確立しません。 ACKの値が異常なのは判りますが、この数値はどこから来るのか、又対処方法などが有りましたら教えてください。 環境はVC2003、WInXP/Win7です。

  • wiresharkの見方がよく分からない(3ウェイハンドシェイク)。

    wiresharkを使って(遊んで?)、ネットワークの勉強をしているのですが(『実践 パケット解析』という本を読んでいます)、いまいち見方がよく分かりません。ネットワークの知識が乏しいせいかもしれませんが。 例えば、TCPの接続で、3ウェイハンドシェイクというものがあると思うのですが、その時のinfoで、 2580>http [syn] seq=0 Len=0 MSS=1460 という、表示があります。多分、一番最初のSYNパケットを送っているところだと思うのですが、なぜ最初にhttpという表示があるのでしょうか?まず、TCPで3ウェイハンドシェイクで行って、セッションを確立してからhttp…だと思っているのですが…。また、2580>の意味もよく分かりません。本には、この部分は触れられていませんでした。 よろしくお願いします。

  • windowsでSYN/ACKを返すプログラム

    以下の現象が発生して、大変困っております。 <現象> クライアントからhttpsアクセスをしようとして、 ブラウザに「ページが表示できません」エラーとなることがある。 <調査状況> クライアント、OS上でWireSharkを仕掛けて、TCPの通信をキャッチしたところ、 問題が発生した通信は「SYN」がOSまでは来ているが、 「SYN/ACK」が返ってきていない。 <環境> サーバ:windows2003server,Apache クライアントOS:WindowsXP <質問内容> クライアントからの「SYN」要求に対して、「SYN/ACK」を返すのは、具体的に何が返しているのでしょうか。 (windowsのソケットプログラム?) また、その調査方法があれば教えて頂けないでしょうか。 よろしくお願い致します。

  • HTTP GET直後のFIN,ACKについて

    ある特定のサイトをWebアクセスした際のWiresharkトレースを解析しています。 そのWebサイトにはTwitterのAPIが埋め込まれていて、Twitterのアイコンを取得するためにJPGファイルを取得しているTCPセッションがあります。 3WAYハンドシェイクの後、クライアントはHTTP GETでJPGファイルを要求しているのですが、直後にFIN,ACKフラグを伴うパケットを送出しています。 クライアントは自らHTTP GETしておきながら、JPGファイルを受け取る前にTCPセッションを終了しようとするのは理解しがたいと思っています。 このようにHTTP GET直後にFIN,ACKフラグをつけるような挙動をみせるのはどのような状況が予想されるでしょうか?

  • セッションとコネクション

    TCP・IPについて勉強をしているのですが、コネクションでやっていることについてはわかるのですが、セッションとは何が異なるのかが分かりません。 コネクション、セッションの双方に切断・確立する等の記述があり、混乱してしまっています。 現在の私のイメージとしては ・コネクションは仮想的なデータ通信路。 ・セッションはやり取りの管理をおこなう。 となっています。 例えば、Bフレッツハイパーファミリーはセッションが2つしか貼れないというのは、どのようなことなのでしょうか。 どなたかよろしくお願いします。

  • ネットワーク接続タイムアウトについて

    ある製品で、ネットワーク接続が遅くなる現象が発生しています。 【環境】  ・本社サーバ windows server 2008/sql server 2005  ・拠点クライアント windows xp 【現象】  発生頻度は、1日に50%くらいです。(1回の接続要求で、成功することもあります)  (a)拠点クライント→本社サーバへ接続要求(syn)を送信  (b)本社サーバ→拠点クライントより、1秒以内で接続要求応答(ack/syn)を送信  (c)拠点クライントにて、(a)より3秒経過しても(b)が受信されない為、本社サーバへ接続要求(syn)を再送信  (d)本社サーバ→拠点クライントより、1秒以内で接続要求応答(ack/syn)を送信  (e)拠点クライントにて、(c)より6秒経過しても(d)が受信されない為、本社サーバへ接続要求(syn)を再々送信  (f)本社サーバ→拠点クライントより、1秒以内で接続要求応答(ack/syn)を送信  (g)拠点クライントにて、(f)を受信  (h)拠点クライント→本社サーバへ接続確立(ack)を送信  (a)~(h)まで9秒も時間がかかっています。 【対応してみたこと】  パッケットロスの根本原因が判らない(調べ方も判らない)為、再送信までの待機時間を短くすることで接続確率までの時間短縮で回避することにしました。    ・接続要求応答待ちの待機時間(c)を3秒→6秒に変更。(レジストリで対応)  ・再々送信(e)の待機時間は、6秒→4秒になりました。    しかし、再(々)送信までの時間短縮はできたのですが、接続要求応答の受信(g)にかかる時間は変わりませんでした。(トータル9秒) ここで、行き詰ってしまいました。 パケットロスの根本原因の調査方法、もしくは少しでも接続確率までの時間を短縮する方法をご教授頂けると助かります。 ※OKWaveより補足:「EPSON社製品」についての質問です。

  • 名前解決とは?

    DNSに関する問題で、分からない問題があります。 「192.168.10.10」というIPをもつwwwサーバ(A)のホスト名が「www.eeww.com」であったとします。この逆引きの名前解決を要求された参照用DNS(B)は、キャッシュにない場合、いくつかのクエリーを経て、「eeww.com」ドメインの名前登録を管理しているDNS(C)のレコードを読みに行くことによって名前解決します。この場合、「権威のあるサーバ」とはどれを指しますか?以下選択肢より1つ選んでくださいとあり、 1、(A) 2、(B) 3、(C) 4、どれでもない とあります。さっぱりわからず、困っています。わかる方、正解はどれでしょうか?教えて下さい。

  • DNSの流れについて

    DNSの名前解決のパケットのながれについて教えてください。 PCからabcxxx.co.jpのブラウジングした場合どのようなパケット の流れになるのでしょうか? PCのブラウザで入力(abcxxx.co.jp) ↓ DNS(名前解決) ↓ IP(xx.xx.xx.xx) ↓ 自分のPCにIPが戻る?(xx.xx.xx.xx)このIPだよ ↓ 再度IPでブラウジングする ↓ abcxxx.co.jp(xx.xx.xx.xx)が表示される というように一旦DNSから自分PCへIPに変換したものが 帰ってきて、再度、またインターネットへ直IPで変換して行くのでしょうか?

  • 特定のURLに接続できない

    ある特定のURLにアクセスすると、「接続中」の表示に止まります。そのURLは、例えば「http://www.microsoft.com」とか「http://www.lemonde.fr」(フランス語の新聞)です。そのことはPCとNTTルータの間にLANケーブルで直結しても、WiFiルータを使っても、同じことです。WiFiの場合は他の機械(Androidスマホン、iPhone,プレイステイション、…)を使っても、その特定なURLにアクセスできない。 その問題を調べて、次の結論をしました。 1. DNSの問題ではない。その特定なURLはpingできます。 2. IPの問題ではない。Wiresharkを使って、TCP接続を調べました。初めてSYNとかACKとか成功で問題がないと思うんですけど、その後… 3. TCP接続の間にパケットが無くなるそうです。Wiresharkの説明は「TCP Previous segment not captured」(前のTCPセグメントが届かなかった)です。 色々なURLにアクセス時に、そのエラーメッセージがたくさんあります。 どなたか、このような接続障害について解説などをお願いします。 <当方の環境> 試したOS: Windows 7, Ubuntu Linux, Android, Playstation 3, iOS 5 プロバイダ:BIGLOBE・NTT東日本 回線:フレッツ光

  • httpsのページがIE 7で表示できません

    httpsのページがIE 7で表示できません。 表示できないページは、apache version 2.2系で自分で建てたサーバーです。 オレオレ証明書に使ったopensslのversionは0.9.8e, private keyの鍵長は、 1024でも2048でもだめでした。 また、mozilla firefox 3.0では同様に証明書の警告が出ますが、 例外設定をすることで表示されることを確認しています。 IE 7の現象としては、 "この Web サイトのセキュリティ証明書には問題があります。" - (A) と警告が出て、閲覧を続行すると "Internet Explorer ではこのページは表示できません" - (B) といわれます。 このとき、wiresharkでパケットのダンプを見てみると、 (A), (B)の通信が両方とも以下のようなシーケンスになっていました。 1, client -> server : tcp syn 2, server -> client : syn, ack 3, client -> server : syn 4, client -> server : client hello 5, server -> client : server hello, change cipher spec, Encrypted Handshake message 6, client -> server : change cipher spec, encrypted handshake message 7, client -> server : FIN ACK 8, server -> client : ACK 9, server -> client : encrypted alert 10, server -> client : FIN ACK 11, client -> server : RST ACK [ client: IE 7 ], [ server: apache22 ] 7の段階でIEからFIN ACKを送っているためページを表示できないのだと思うのですが、 なぜFIN ACKをおくっているのかが分かりません。 問題を解決したいのですが、はまってしまって困っています。 プロトコル・原因の調査方法等々、何か知っていることがありましたらご教授ください。 よろしくお願いいたします。