- Published on
ネットワーク用語
- Authors
- Name
- Kikusan
- Refs
- HTTPレスポンスが返ってくるまで
- Webブラウザ
- HTTPリクエスト
- HTTPレスポンス
- IPアドレスとDNS
- IPアドレス
- DNS
- プロトコル・スタック
- ハブとルータ
- アクセス回線とプロバイダ
- Webサーバ
- 分散処理
- サーバー・アプリケーション
Refs
HTTPレスポンスが返ってくるまで
- ブラウザはURLを指定し、OSに組み込まれたネットワーク制御用ソフトウェア(プロトコル・スタック)に依頼する。
- プロトコル・スタックはパケットに制御情報を付加し、LANアダプタに渡す。通信エラーが起こった時にパケットを送り直したりしている。
- LANアダプタは電気信号にデータを変換し、LANケーブルに送り出す。
- スイッチングハブやルーターを介して、パケットをプロバイダに渡す。
- プロバイダが同様にパケットを宛先まで運ぶ。
- 宛先内でプロトコル・スタックがwebサーバにデータを渡す。リクエストに対してレスポンスを生成し、同様にパケットを返信する。
Webブラウザ
ブラウザはwebサーバにアクセスするクライアントの機能だけでなく、FTPクライアントやメールクライアント機能も持っている。
URLを指定して使う機能を決めている。
# httpプロトコルの場合
http://user:password@domain.com:80/pass/to/file.html
# FTPプロトコルの場合
ftp://user:password@domain.com:80/pass/to/file.html
# 自身のファイルを読む場合
file://localhost/c:/path/to/file.html
# メールを送信する場合
mailto:address@mail.com
ブラウザはプロトコルに従ってメッセージを作成し、やり取りを行う。
HTTPリクエスト
POST /index.html HTTP/1.1 # リクエスト行
Host: www.example.com # ヘッダフィールド
Content-Type: application/x-www-form-urlencoded
# 空行
foo=hoge&bar=fuga # リクエストボディ
HTTPレスポンス
HTTP/1.1 200 OK # ステータス行
Content-Type: text/html # ヘッダフィールド
Connection: close
# 空行
<html> # レスポンスボディ
<body>Hello World!!</body>
</html>
IPアドレスとDNS
ブラウザは宛先としてIPアドレスをOSに知らせなくてはならないので、
DNSサーバにIPアドレスを問い合わせる。
IPアドレス
グローバルIPアドレスと、ハブやルータで区切られたサブネット内IPアドレスがある。 ネットワーク部(どのネットワークの)とホスト部(どのコンピュータ)で区切られ、区切り位置はサブネットマスクで伝える。
100.101.102.103 # IPアドレス
100.101.102.103/255.255.255.0 # IPアドレス/ネットマスク
100.101.102.103/24 # ビット数でネットマスクを表すCIDR表記
100.101.102.0/24 # ホスト部ビットが全て0の場合はサブネットそのものを指す
100.101.102.255/24 # ホスト部ビットが全て1の場合はブロードキャスト(サブネット全体へのパケット送信)
DNS
ドメインからIPアドレスを探すシステム。DNSサーバはそれを担当するサーバ。
DNSに問い合わせるクライアントを名前解決することからリゾルバといい、
プログラミング言語によく組み込まれているSocketライブラリ(プロトコル・スタックを使うライブラリ)がリゾルバに当たる。
DNSサーバのIPアドレスはコンピュータにあらかじめ設定されているが、システム設定でDNSサーバを設定することもできる。
通信にはUDPを使っている。
DNSサーバ
DNSサーバへの問い合わせメッセージは以下からなる。問い合わせ情報から検索を行う。
- 名前 : ドメインのこと
- クラス : 歴史があって、今はインターネットを表す「IN」固定
- タイプ : 名前はなにを表しているか。「A」ならドメイン名そのもの、「MX」ならメール配送先
DNSサーバにはリソース・レコードという形で情報を登録しておいて、その中で検索を行う。
名前 | クラス | タイプ | 返答 |
---|---|---|---|
www.example.com | IN | A | 101.102.103.104 |
ドメイン名はwww.abcde.co.jp といった階層を取る。
ドットが区切りを示しており、jp国co会社abcde部www課といった具合になっている。
大きなくくりのDNSサーバに下位のDNSサーバIPを登録することで、上から下に検索できるようになっている。(jpから探していく)
ルートドメインという世界に数個のjpよりも上位のドメインがあって、co.jp. のようにピリオドでルートドメインを表せる。
DNSサーバソフトには最初からルートドメインは設定されているものなので、どのDNSサーバでも実際はルートドメインを経由してIPを探している。
一度問い合わせられたドメインはキャッシュされて検索は高速化される。
プロトコル・スタック
HTTP通信ではIPを調べたらデータ送信をプロトコル・スタックに依頼する。
TCP通信をプロトコル・スタックが行う手順は、socketライブラリを使用して以下のようになる。
- ソケットを作る。(サーバ側、クライアント側両方の受信口、送信口)
- クライアント側からパイプをつなぐ。(connection)
- データを送受信する。
- どちらかからパイプを外し、ソケットを削除する。
受信口のソケットは domain:port によって一つの場所に定まる。(1つのソケットしかないわけではない)
HTTPリクエストを投げた後、ブラウザはレスポンス受信口をのこしておいて、パケットが届いたらそこから処理を再開する。
プロトコルスタックの中には、TCP・UDP・IPプロトコルを守りネットワーク通信するプログラムが入っている。
TCP担当部分は接続・送受信・切断の各フェーズで通信相手とやり取りするとき、IP担当部分に依頼し、やり取りするデータをパケットの姿にして相手に届けてもらう。
- TCP : コネクションを使う確実性重視のプロトコル
- UDP : コネクションを使わないパフォーマンス重視のプロトコル
- ICMP : パケット送信エラー検知プロトコル
- ARP : IPアドレスに対応するイーサネットのMACアドレスを調べるプロトコル
ブロードキャストアドレスを使用して該当デバイスにMACアドレスを聞く。
プロトコルに従ってデータを送信するときは、制御情報をデータにヘッダとして付与して送信する。
複数のプロトコルを通すとヘッダデータは長くなっていく。(先のプロトコルヘッダが次のプロトコルデータの一部になる)
プロトコル・スタックは一定の大きさまで送信するデータがたまるか、一定の時間経過したらパケットを送信する。
(アプリケーションから操作することもできる)
データが大きい場合は分割する。
TCP通信は「シーケンス番号」「ACK番号」という仕組みでエラー検出と回復を行う。
TCPに任せておけば多少エラーが起きても問題なく回復できる。
そもそもサーバダウンをしていた場合やハードウェアの問題が起きるとTCPはエラーをアプリケーションに投げるので、
その時初めて対応が必要となる。
- IP : パケットを相手に向けて送り出すプロトコル
IPプロトコルのヘッダには「IPヘッダー」「MACヘッダー」の2つがある。
- IPヘッダー: IPアドレスで示された目的地までパケットを届けるのに使う制御情報
- MACヘッダー: イーサネットなどのLANを使って、最寄りのルーターまでパケットを運ぶのに使う制御情報
ハブとルータ
イーサネット: 多数のコンピュータが色々な相手と自由に安価に通信するために考案された通信技術 実体としてはハブで複数のデバイスが繋がっているだけと考えればいい。
ケーブルが繋がったデバイスは全員信号を受信できるが、宛先として指定されていないデバイスはパケットを棄てる。LANアダプタ: PCのネットワーク接続部品。形式は様々だが、接続しているLANアダプタの数だけIPアドレスがある。経路表から次の宛先MACアドレスを決める。
ハブ : イーサネットのプロトコルに従ってパケットを運ぶデバイス
スイッチング・ハブ: 宛先MACアドレスにだけ信号を流すハブ
スイッチング・ハブのMACアドレス・テーブルには接続されているデバイスからパケットが来た段階で登録され、数分間ごとにリセットされる。ルーター : IPのルールに従ってパケットを運ぶデバイス
ルーターはルーティング・テーブルにより次の中継先を判断する。ルーティング・テーブル
宛先 | ネットマスク | ゲートウェイ | インタフェース | メトリック |
---|---|---|---|---|
10.10.1.0 | 255.255.255.0 | - | e2 | 1 |
10.10.1.101 | 255.255.255.255 | - | e2 | 1 |
0.0.0.0 | 0.0.0.0 | 192.0.2.1 | e1 | 1 |
宛先とネットマスクから、宛先IPアドレスの中継地点はどこかを判断する。
ゲートウェイ欄とインタフェース欄は次の中継先を指す。インタフェースにはルーターのLANアダプタが入る。
ルータの経路情報を更新するには、手動か、ルーティング・プロトコルという仕組みでルーター同士で自動で経路表を作成する。
ネットマスクが0.0.0.0の行がデフォルト経路になる。そこに登録したルーターをデフォルト・ゲートウェイという。
通信相手までパケットを届ける全体の動作はIP(ルーター)が担当し、その動作の際に次のルーターまでパケットを運ぶ部分をイーサネット(スイッチング・ハブ)が担当する
- アドレス変換 : ルーターがグローバルアドレスをプライベートアドレスに変換すること
ip:port の組み合わせをグローバルとプライベートそれぞれ対応表として保持する。基本的にグローバルのportとプライベートのIPで対になる。 - パケット・フィルタリング: MACヘッダー、IPヘッダー、TCPヘッダーに記載してある内容を調べて、事前に設定した条件に合致したら破棄すること
ファイアウォールはこれをしている。
アクセス回線とプロバイダ
ルーターはMACヘッダー、PPPoEヘッダー、PPPヘッダーをパケットにつけてアクセス回線に送付する。
PPP: ダイヤルアップ接続
プロバイダのアクセスポイントに電話をかけ、電話が繋がったらユーザ名、パスワードを通知してログインする。
照合はRAS(RemoteAccessServer)から認証サーバに問い合わせて行われる。
ログインできて初めて、通信が行えるようになる。PPPoE: アクセス回線は本人確認の必要がないが、プロバイダを切り替えるのに便利なのでPPPのログインの仕組みを残したもの。
PPPヘッダーにログイン情報を付加して認証する。
PPPoEヘッダーにはイーサネットの仕様に適合するための情報が入っている。ADSL: 電話回線を使用したアクセス回線
ルーターとADSLモデムがイーサネットで繋がっている場合、
ADSLモデムはパケットをさらに細かく分割してセルにして、電気信号に変えてスプリッタに送信する。
スプリッタは電話音声信号とADSL信号を分離して流す。
- FTTH: 光ファイバを用いたアクセス回線
イーサネットからの電気信号をメディア・コンバータ、もしくはONUという装置で光信号に変換し送信する。
- BAS: 回線運営事業者のルータ
アクセス回線から事業者に流れたパケットは、BASに届く。
BASは本人確認と設定値通知機能を持ち、この情報はPPPoEの仕組みを使って実現される。
BASにはトンネリング機能もある。
ユーザーのルーターは初回接続時にBASとやり取りして設定を完了する。
DHCP: PPPの代わりにTCP/IPの設定情報をBASからユーザに通知する方法。
自動でIPアドレスを振る。社内LANでよく使われる。認証もないが、余分なヘッダもない。POP: BASの先のプロバイダの設備
NOC: POPの先の他のプロバイダやルーターに繋がる設備
POPとNOCのルーターも経路表をもっている。様々なルーターを介して、インターネットが実現されている。
プロバイダ間ではBGPという仕組みで経路情報を交換しあっている。
- IX: プロバイダ間を結ぶ巨大なスイッチング・ハブ
Webサーバ
ブラウザからプロバイダまでの通信の逆をすれば、全ての通信が成り立つ。
分散処理
サーバーを増やして一台当たりの処理を減らす方法。
一番簡単なのは、単純にWebサーバを多数並べる方法で、DNSサーバに同じ名前でIPアドレスを複数登録すれば実現できる。(DNSサーバは順番にIPを返す)
これをラウンドロピンという。
故障対応やセッションが途切れるのを防ぐには、ロードバランサーを使う。
ロードバランサーをWebサーバの代わりにDNSサーバーに登録し、そこからロードバランサーが割り振りを判断する。 判断基準には負荷状態や、HTTPのヘッダーフィールドがある。
- キャッシュ・サーバー: プロキシという仕組みをつかってデータをキャッシュするサーバー
HttpリクエストにViaヘッダーフィールドをつけて、Webサーバーとクライアントの間に入って仲介する。
Webサーバーから受け取ったデータを保持し、データがあればWebサーバの代わりにクライアントに送り返す。
このときWebサーバーにはIf-Modified-Sinceヘッダーフィールドをつけて情報の変更があるかを問い合わせる。
データがなければWebサーバーにリクエストを転送する。
転送先の判断には、よくURLが使われる。
最寄りのキャッシュ・サーバーをDNSが解答するには? キャッシュ・サーバーが使っているルーターの経路表をつかって経路の長さを調べる
- フォワード・プロキシ: 社内LANなどクライアント側のプロキシのこと。
ブラウザにプロキシを設定すると、Httpリクエストの一行目がちょっと変わる。
# プロキシあり
GET http://domain.com/file.html HTTP/1.1
Host: domain.com
# プロキシなし
GET /file.html HTTP/1.1
Host: domain.com
- リバース・プロキシ: サーバー側のプロキシ。ブラウザへの設定が要らない。
サーバー・アプリケーション
webアプリケーションはsocket接続を待っておいて、
接続を受け付けると新たなタスク/スレッド・socketを生成する。
そのためそのタスクはクライアントと1対1で通信できる。
接続時に生成されるsocketは接続待ちをしているsocketのコピーであり、
接続待ちをしているsocketはアプリケーション終了まで存在し続ける。
サーバ側では同じportに複数socketがあることになるが、クライアントのip:port情報も合わせることによって一意に判断している。
webアプリケーションはURIによって動作させるプログラムや返すファイルを判断する。