- 参考
- 各操作抜粋
- ブラウザ(アプリケーション)のお仕事
- OSのお仕事 TCP/IP プロトコルスタックとLANアダプタを探検
- LAN機器のお仕事 ハブ、スイッチ、ルーター、ケーブル
- 電話局、プロバイダのお仕事
- サーバー側のLANのお仕事
- Webサーバーのお仕事
- まとめ
参考
とても良い本でした。
各操作抜粋
各操作の意味がわかったのが、この本を読んで一番良かった点。
(操作)リクエスト・メッセージをF12→ネットワークで見てみる
(操作)自PCのネットワーク詳細の確認
右下のネットのとこクリックネットワークとインターネットの設定
→ネットワークと共有センタ→接続名をクリック→詳細
↓こんな感じでIPアドレスやら最寄りのDNSサーバーを設定する。
(操作)netstat -anoでソケットを見る(TCP担当部分)
- ローカルアドレス 自分のIPアドレス : ポート番号
- 外部アドレス 相手のIPアドレス : ポート番号
- 状態 通信状態。listening相手からの接続待ち。established通信中。
- PID 識別番号。タスクマネージャーで調べられる。
(操作)route printでルータの経路表を見る(IP担当部分)
- ネットワーク宛先:宛先IPアドレス
- ネットマスク:宛先のネットマスク
- ゲートウェイ:中継ルーターのIPアドレス
- インターフェース:端末がパケットを送り出すLANポート(ネットワークインターフェイス)のIPアドレス
- メトリック:送信コスト。小さい方が良い。
※ゲートウェイの「リンク上」同じネットワーク内にあるので中継いらず、ということ。
道順は、インターフェース→ゲートウェイ→宛先、となる。
127.0.0.1=localhost。自分自身を表す、ループバックアドレスと言う。
ローカル・ループバック・アドレス(127.0.0.1)とは?:Tech TIPS - @IT
https://wa3.i-3-i.info/word17065.html
(操作)tracert -d で宛先までの道順を見る(IP担当部分)
IPアドレス8.8.8.8に到達するまでの中継ルーターIPアドレスが表示される。
tracertコマンドでネットワークの経路を調査する【Windows 10トラブル対策】:Tech TIPS - @IT
(操作)arp -aでIPとMACアドレスの対応表を見る(イーサネット担当部分)
このIPアドレスを持つ機器は、このMACアドレスを持っていますよ、というIPとMACの対応表。
ブラウザ(アプリケーション)のお仕事
URL入力
http:// ウェブサーバー
ftp:// ファイルサーバー URLに入力するとファイルサーバー用ソフトが起動する
mailto:// メールサーバー URLに入力するとメールソフトが起動する
file:// ファイル読み込み
www ワールワイドWEB。インターネットのこと。
例:HTTPプロトコルでWebサーバーにアクセス
http://user:password@www.google.com:80/dir/file1.htm
user | ユーザー名(省略可) |
password | パスワード(省略可) |
www | ホスト名(ウェブサーバー名) |
google.com | Webサーバーのドメイン名 |
80 | ポート番号(省略可) |
dir/file1.htm | ファイルのパス名 |
例2:クライアント自身のファイルからデータ読み込み
file://localhost/c:/path/file1.zip
localhot | コンピュータ名(省略可 |
c:/path/file1.zip | ファイルパス |
ブラウザに「file:///C:/Users/」と打ったらこんな画面が開いた!!! ほえー初めて知ったわ。ブラウザでこんなことできるんやなあ。
例3:メール
mailto :abc@gmail.com
abc@gmail.com | メールアドレス |
URLの解読
https://www.google.co.jp/
上記のURLを入力するとブラウザは
httpプロトコルで
www.google.co.jpというドメイン名のWEBサーバー
に接続するんだなあと解読する。
ファイル名を省略した場合にどこにアクセスするのか?
デフォルトをindex.htmlとかmain.htmlとかをウェブサーバーに設定しておく。
そうするとルートディレクトリにあるindex.htmlにアクセスする。
↓こんなふうに解読する。
https://www.google.co.jp/root/index.html
HTTPリクエストメッセージの作成
リクエスメッセージに書かれていること
何を | URI https://www.google.co.jp/など |
どうする | HTTPメソッド GET/POST/PUTSなど |
リクエスメッセージの中身
メッセージヘッダー:リクエストの付加的な情報
メッセージボディ:クライアントからサーバーに送るデータ。GETの場合は空。POSTの場合はFormに入力した値など。
リクエスト・メッセージに書くURLは1つだけ
画像がある場合は、画像の枚数分リクエストを送っているらしい。
画像に限らずjsファイル、CSSファイルなんかの読み込みにもリクエストを送っていると思う。
1つのページを開くのに大量のリクエストが送られていることの謎が解けた。
↓html以外にも大量のリクエストがある。
(操作)リクエスト・メッセージをF12→ネットワークで見てみる
上記画像のようなものが見れる。
DNSサーバーに問い合わせ
ブラウザから最寄りのDNSサーバーにwww.google.comというサーバーのIPアドレスを教えて、と問い合わせる。
IPアドレスの基本
10進数表記 | 2進数表記 | |||||
IPアドレス | 10. 1. 2. 3 | 00001010.00000001.00000010.00000011 | ||||
サブネットマスク | 255.255.255.0 | 11111111.11111111.11111111.00000000 |
サブネットマスク2進数表記の「1」の部分がネットワーク部。
「0」の部分がホスト部。
例: 10.11.12.13/255.255.255.0
全32ビット中の上位24ビットがネットワーク、下位8ビットがホストであることを示す。
10.11.12.13/24でも同じ意味。上位24がネットワーク部ですよということ。
ドメイン名とIPアドレスを使い分ける理由
ドメイン名の方が人間にはわかりやすいが、データ量が多くなってしまうため。
IPアドレス:32ビット
ドメイン名:数十~255バイト
(操作)自PCのネットワーク詳細の確認
右下のネットのとこクリックネットワークとインターネットの設定
→ネットワークと共有センタ→接続名をクリック→詳細
↓こんな感じでIPアドレスやら最寄りのDNSサーバーを設定する。
IPアドレスって怖いから隠すけど、DHCPなら毎回変わるし関係なさそう。
最寄りのDNSサーバーがばれる方が危ないのかなあ。
DNSサーバーの基本動作
クライアントからDNSサーバーへの問い合わせ内容
名前 | サーバーやメール配送先 |
クラス | 常に「IN」 INはインターネットを表す。最初はインターネット以外も使う想定だった名残。 |
タイプ | A:IPアドレス MX:メール配送先 |
例
名前 | クラス | タイプ |
www.google.com | IN | A |
↑www.google.comのIPアドレスは?という問い合わせ。
DNSサーバーからクライアントへのレスポンス
名前 | クラス | タイプ | レスポンス |
www.google.com | IN | A | 192.0.2.226 |
↑www.google.comのIPアドレスは192.0.2.226だよというレスポンスが返ってくる。
返ってくるのはレスポンス部分だけ。
ドメインの階層
例:www.lab.glasscom.com
comドメインが最上位で、comの中のglasscomの中のlabドメインという順に探す。
DNSサーバーも同じ構造になっていて最上位のDNSサーバーにcomが登録されていて、その下位にglasscocom→labが登録されている。
なので、DNSサーバーを上から順にたどっていくと目当てのドメインに辿り着ける。
目的のドメインを探す流れ
クライアント→最寄りのDNSサーバー→ルートDNSサーバー→comDNSサーバー→glasscomDNSサーバー→labDNSサーバー→目的のドメイン(IPアドレス)
※最寄りのDNSサーバーはクライアントに設定しておく。
URLからIPアドレスを割り出すことを「名前解決」という。
プロトコルスタックにメッセージ送信を依頼する
プロトコルスタックとは?
通信プロトコルは階層的な構造を持っている。 その各階層で、それぞれ異なる役割のプロトコルが機能しており、各プロトコルが連携して初めて通信が実現されてる。 例えば、インターネットで用いられているTCP/IPでは、TCPやIPに加えて、HTTP、Ethernet(IEEE 802.3)などの通信プロトコルが機能しており、それらが連携して初めて通信機能を実現している。 プロトコルスタックは、一揃い(suite)という意味で、プロトコルスイートと呼ばれることもある。 特にTCP/IPの場合は、「インターネットプロトコルスイート」と呼ばれることも多い。 ちなみに、スタック(stack)とは「積み重なり」といった意味である。
IPアドレスが分かったら、宛先にメッセージを送るようにOS内部にあるプロトコルスタックに依頼します。
具体的にはSocketライブラリのプログラムを決められた順番に呼び出して依頼するらしい。
ちょっとここらへんよくわからなかった。
イメージとしては
ソケットというのは通信用の出入り口。
まず、Webサーバー側が通信用のソケットを用意してリクエストが来るのを待ち受ける。
ウェブサーバーはソケット常時用意して、常に待ち受けている。
クライアント側は、通信するときだけソケットを作り、ウェブサーバーまでパイプを繋いで通信をする。
通信が終了したら、パイプを外してソケットを抹消します。
- ソケットを作る
- サーバー側のソケットにパイプを繋ぐ
- データを送受信する
- パイプを外してソケットを抹消する
これらの動作はブラウザではなく、OS内部のプロトコルスタックの担当。
ブラウザは依頼するだけ。
OSのお仕事 TCP/IP プロトコルスタックとLANアダプタを探検
- ソケット作成
- サーバー接続
- データ送受信
- サーバーから切断してソケット抹消
- IPとイーサネットの送受信動作
ここまでの流れ
URL入力→URL解読→HTTPリクエスト・メッセージの作成
→DNSサーバに問い合わせ→プロトコルスタックにメッセージ送信依頼
ソケットの実体(イメージ)
本来は概念的なもので実体はない。
実体↓
- IPアドレス
- ポート番号
- 通信状態など
(操作)netstat -anoでソケットを見る
- ローカルアドレス 自分のIPアドレス : ポート番号
- 外部アドレス 相手のIPアドレス : ポート番号
- 状態 通信状態。listening相手からの接続待ち。established通信中。
- PID 識別番号。タスクマネージャーで調べられる。
クライアントからサーバーへの接続動作の実際
クライアントがサーバーのソケットに接続→クライアントがTCPヘッダー作成
→IP担当部にわたす→IP担当部がパケット送信
→サーバー側IP担当部が受け取り、TCP担当に渡す→TCPのヘッダーを解析
→該当するソケットを探し出す→TCP担当が返事返す
→TCPヘッダー作成→ここからは同じ→切断動作
TCPのお仕事
通信の接続、送受信、切断をIP担当に依頼すること?
主にヘッダー情報の作成してIP担当に渡すまで、というこになるのかしら。
IPとイーサネットのパケット送受信動作
ここらへんからハードウェアが出てくる。
xxxxというアドレスはxxxx番目のケーブルだ、みたいな。
ルーターとハブ
ルーターはIPのルールでパケット運ぶ
ハブはイーサネットのルールでパケットを運ぶ
どちらもヘッダー情報を参照しているが
という違いがある。
ちなみにIPアドレスはLANアダプタに付与する。
1つのPCにLANアダプタが複数あれば、その数だけIPアドレスがある。
プロトコルの流れ:TCP→IP→イーサネット
という順番で依頼していく。
という認識でいいじゃろか。
(操作)route printでルータの経路表を見る
- ネットワーク宛先:宛先IPアドレス
- ネットマスク:宛先のネットマスク
- ゲートウェイ:中継ルーターのIPアドレス
- インターフェース:端末がパケットを送り出すLANポート(ネットワークインターフェイス)のIPアドレス
- メトリック:送信コスト。小さい方が良い。
※ゲートウェイの「リンク上」同じネットワーク内にあるので中継いらず、ということ。
道順は、インターフェース→ゲートウェイ→宛先、となる。
ARPはIPを元にMACを調べる
ARPはサブネット内のPC全部に「XXXというIPはいますか?いたらMACアドレス教えて」と伝える。
全員に聞く仕組みをブロードキャストという。
(操作)arp -aでIPとMACアドレスの対応表を見る
このIPアドレスを持つ機器は、このMACアドレスを持っていますよ、というIPとMACの対応表。
IPのお仕事
- IPヘッダーの作成:TCPヘッダーを元に最終目的を知り、それを元に経路表から、次のルータの宛先をヘッダー情報に組み込む
- MACヘッダーの作成:ARPでMACアドレスを割り出し、その情報をMACヘッダーに組み込む。
此処から先はイーサネットのお仕事。
LAN機器のお仕事 ハブ、スイッチ、ルーター、ケーブル
※ここから先は雑まとめになります。疲れた。
LAN機器の重要な役割は、信号を劣化させないこと。
- リピーターハブ:ブロードキャスト。LAN全体に信号をばらまく。
- スイッチングハブ:宛先のMACアドレスにだけ信号を送る。
- ルーター:ポートごとにIPとMACアドレスが存在する。
- NAT:これもルーターの仕事。グローバルIPとプライベートIPの変換。グローバルとプライベートの対応表を持ってて、それを元に宛先を割り出す。
電話局、プロバイダのお仕事
サーバー側のLANのお仕事
- Webサーバー
- ファイアーウォール
- 負荷分散
- キャッシュサーバー
のお話。
Webサーバーは社内にあるとは限らない。
データーセンターにあったり、クラウド上にあったりするよ。
ファイアーウォールの仕組み
パケットフィルタリングはパケットのヘッダー情報を元にフィルターする。
例:Webサーバーは送信元ポート番号80以外は遮断する。
Webサーバーのお仕事
サーバーアプリケーションの構造
アパッチやらNginxのこと。
サーバーは複数のクライアントと同時に通信を実行する。
でも、これを1つのプログラムで実現するのは大変。
なので、クライアントが接続してくる都度、新たにプログラムを起動する。
複数のプログラムを同時起動するということ。
だから、プログラマーが作るプログラムは1つのクライアント処理だけを意識して作れば良い!
プログラムとクライアントは常に1対1ということになる。
ちなみに、接続のたびに新しいプログラムを起動するのはOSのお仕事。
OSがマルチスレッドで頑張ってるんやね。
まとめ
大雑把にMVCでのリクエスト→レスポンスの流れをまとめてみた。
- ユーザーがリクエスト送信
- ブラウザがHTTPリクエストを作成
- DNSサーバーに問い合わせて、URLから宛先IPアドレスを解析
- ルーターが経路表を元に宛先IPまでの順路を割り出す
- arpでネットワーク内の機器に「このIPアドレスをもつ人いますか?」と聞く
- 「私が持っています。MACアドレスはXXXXです。」と返答が来る
- 5と6を繰り返してWebサーバーにたどり着く
- Webサーバーがリクエストごとにプログラムを起動する
- apサーバーがリクエストをControllerで受け取る
- ControllerがModelに値をセット
- ModelがDBに値をセット
- DBが結果を返す
- Controllerがレスポンスを返す
- クライアントがレスポンスを受け取る
- ブラウザが画面をレンダリングして表示!