はじめに
本記事では、ネットワーク基礎知識を学ぶための技術書としてまず名前があがる名著の一つ、「ネットワークはなぜつながるのか」の要点と読了後の感想をまとめていきます。
約600ページにもわたるボリューミーな本なので、とりあえず要点だけ把握したい方や、どのくらいのレベル感なのか知りたい方はぜひご一読ください。
どんな本なのか?
普段私たちが私生活や業務のなかで、何気なく使用しているインターネット等を含む 「ネットワーク」 の仕組みやそれを支える技術について体系的に学べる本です。
「ネットワーク」 はなんとなく想像のつく通り巨大で複雑なシステムですが、この本ではブラウザにURLを入力してからwebページが表示されるまでの道のりを、探検ツアー形式で初心者にもわかりやすく解説してくれます。
HTTP、IP、LAN、ルーター、インターネットなどについて、各々については多少の知識はあるけれど、それぞれがどのように関わりあっているのかは知らないんだよなぁ、という方におすすめです。
要約
第1章 - webブラウザ
-
HTTPリクエスト・メッセージを作成する
- ブラウザの最初の仕事はURLを解読すること
- ブラウザはHTTPリクエストをつくり、HTTPレスポンスを受信する
-
WebサーバーのIPアドレスをDNSサーバーに問い合わせる
- ブラウザはURL上のドメイン名からIPアドレスをDNSサーバーに問い合わせる
-
世界中のDNSサーバーが連携する
- DNSサーバーはサーバー内に登録されたドメイン名とIPアドレスの対応表を調べて、IPアドレスを回答する
-
プロトコルスタックにメッセージ送信を依頼する
-
プロトコル・スタックがソケット(クライアントとサーバーの通信窓口のようなもの)を使用して、以下の順番でwebサーバーとやり取りする
- ソケット作成
- サーバー側のソケットとパイプを接続
- データを送受信
- パイプを外し、ソケットを抹消
-
プロトコル・スタックがソケット(クライアントとサーバーの通信窓口のようなもの)を使用して、以下の順番でwebサーバーとやり取りする
第2章 - プロトコル・スタック、LANアダプタ
-
ソケットを作成する
-
ソケットの実態は通信制御用の情報
- 通信相手のIPアドレス、ポート番号、通信状態など
- プロトコルスタックはソケットに記録された情報を参照しながら動く
- アプリケーション(webブラウザ)はディスクリプタという番号札のようなものでソケットを識別する
- クライアントとサーバー間ではお互いのIPアドレスとポート番号でソケットを識別しあっている
-
ソケットの実態は通信制御用の情報
-
サーバーに接続する
- 接続するとは、クライアント側のIPアドレスやポート番号などの制御情報をサーバー側に伝え、データを送受信するためのメモリー領域(バッファメモリー)を確保すること
- TCPヘッダーには送信元、宛先のポート番号や、開始、終了、エラーの判断等を管理するための情報が格納される
- TCPヘッダーを用いて接続先(サーバー)のソケットを特定する
-
データを送受信する
- シーケンス番号とACK番号でパケットが受信側に届いたことを確認する
- ウィンドウ制御方式:パケット送信後、ACK番号の返却を待たずに次々とパケットを送る方法
-
サーバーから切断してソケットを抹消
- データを送り終わったサーバーはTCPヘッダーのコントロールビットにFINをセットし、クライアントに送信することで、切断動作に入ることを伝える
- 上記が完了したのち、数分待ってからソケットを抹消する
-
IPとイーサネットのパケット送受信動作
- MACヘッダーはイーサネット用のヘッダーでMACアドレスが格納される
- IPヘッダーにはIPアドレスが格納される
- TCP担当部分が作成したデータの中身には関知しない
- ルーターの経路表を用いてパケットを渡す次のルーターを判断する
- MACアドレスを調べるときはARPを使う
- LANアダプタは送信パケットにプリアンプル、スタート・フレーム・デリミタ、FCSという3つのデータを付与する
- LANアダプタはパケットを電気や光の信号に変換する
-
UDPプロトコルを用いた送受信動作
- UDPではコネクションを作成しないため、高速だがデータを送りなおす仕組みがない
- 通常のデータの送受信ではTCP、DNSサーバーへの問い合わせなど、短い制御用のデータを送受信する場合はUDPを使用する
- 音声や動画データを送る場合もUDPを使用する
- → 完全性よりリアルタイム性が大事だから
第3章 - ハブ、スイッチ、ルーター
-
ケーブルとリピータハブの中を信号が流れていく
- LANアダプタで信号に変換されたパケットはツイストペア・ケーブルを通ってリピータハブに向かっていく
- リピータハブはつながったケーブル全部に信号を送信する
-
スイッチングハブの中継動作
- スイッチングハブは宛先MACアドレスでどのポートから信号を送信するか判断する(リピータハブと違い必要なケーブルにだけ送信する)
-
ルーターのパケット中継動作
- ルーターは中継部分とポート部分で構成される
- 各ポート部分にはMACアドレスとIPアドレスが割り当てられている
- 中継部分はIPヘッダーの宛先IPアドレスで中継先を判断する
-
ルーターの付加機能
-
アドレス変換
- グローバルIPアドレスとプライベートIPアドレスを変換する
-
パケット・フィルタリング
- パケットを中継する際に、MACヘッダー、IPヘッダー、TCPヘッダーを調べて事前に設定した条件と合致しない場合はパケットを捨てる仕組み
-
アドレス変換
第4章 - アクセス回線、プロバイダ
-
ADSL技術を用いたアクセス回線の構造と動作
- アクセス回線とは、インターネットと家庭や会社のLANを結ぶ通信回線のこと
- インターネット接続用ルーターはMACヘッダー、PPPoEヘッダー、PPPヘッダーの3つをつけて、ADSLモデムにパケットを送る
- ADSLモデムはパケットをATMセルに分割し、電気信号に変えてスプリッタに送信する
- その後信号はDSLAM(電話局)を通過して、ATMセルに戻り、BAS(ルーターの一種)に届く
- BASはATMセルをパケットに戻し、インターネット内部に中継する
-
光ファイバを用いたアクセス回線(FTTH)
- FTTHとは、光ファイバ(光信号)を用いたアクセス回線
- ADSLの代わりに光ファイバを使ってインターネット接続用ルーターとBASを接続する
-
アクセス回線で用いるPPPとトンネリング
- BASはPPPoEの仕組みを使って、本人確認と設定値通知の機能を実現している
- PPPoEはPPPメッセージ(本人確認用のパスワードなど)をイーサネットのパケットに入れてやり取りする
- トンネリングとはインターネット接続用ルーターから送られてきたパケットをプロバイダのルーターに向けて送信する仕組み
-
プロバイダの内部
- プロバイダのルーターがインターネットの入口
- ADSLなどのアクセス回線がBASを介してつながっているプロバイダ設備をPOPと呼ぶ
- POPから入ってきたパケットはNOC(POPの大規模版)に集まっていく
-
プロバイダをまたがって流れるパケット
- インターネット内部では、BGPという仕組みを使って、プロバイダ間で経路情報を交換しているため、サーバー側のプロバイダがクライアント側と違う場合、パケットは他プロバイダに中継される
- プロバイダ間の接続のインターフェースとなるIXという設備がある
- IXの中心には高速で巨大なスイッチングハブであるレイヤ2スイッチがある
第5章 - ファイアウォール、キャッシュサーバー
-
Webサーバーの設置場所
- 以下の3ケースがある
- 社内LANに設置し、ルーターで直結する
- 社内LANとは分離した公開サーバー用LANに設置し、ファイアフォールで中継する
- 接続事業者のデータセンターに設置する
- 以下の3ケースがある
-
ファイアウォールの仕組みと動き
- 主流な方式はパケットフィルタリング型
- パケットを中継する際に、MACヘッダー、IPヘッダー、TCPヘッダーを調べて事前に設定した条件と合致しない場合はパケットを捨てる仕組み
- 外から社内LANにはアクセスできないようにしたり、公開用サーバー用LANからはレスポンスのときのみ、外部のネットワークへアクセスできるようにできる
- ファイアウォールではヘッダーしかチェックしていないため、パケットの中身に危険なデータが含まれている場合はそれを防ぐことはできない
- 主流な方式はパケットフィルタリング型
-
複数サーバーにリクエストを振り分けてサーバーの負荷を分散
- サーバーの処理能力がリクエストに追いつかなくなったときの対応策の一つとして分散処理がある
- サーバーを複数台用意して処理を分担する方法
- 以下の2通りの方式がある
- ラウンドロビン方式:DNSサーバーに用意したサーバーのIPアドレスを同じドメイン名で複数登録しておくことで複数サーバーに順番でリクエストを送る
- 負荷分散装置:負荷分散装置(ロードバランサー) のIPアドレスをDNSサーバーに登録しておき、負荷分散装置が各サーバーの負荷状況(CPUやメモリの使用率)を見て、リクエストを振り分ける
- サーバーの処理能力がリクエストに追いつかなくなったときの対応策の一つとして分散処理がある
-
キャッシュサーバーを利用したサーバーの負荷分散
- キャッシュサーバー:プロキシという仕組みを使ってデータをキャッシュ(保持)するサーバー
- キャッシュサーバーをクライアントとwebサーバーの間に置き、一度レスポンスしたことのあるリクエストがクライアントから来た場合はwebサービスを介さずにレスポンスを返却する
- webサーバー側ではなく、クライアント側にプロキシを置く方法をフォワードプロキシと呼ぶ
-
コンテンツ配信サービス
- 複数の主要なプロバイダに設置したキャッシュサーバーをwebサーバー運営者に貸し出すサービスのこと
- これを利用することで、アクセス時のインターネットのトラフィックを押さえることができ、かつwebサーバー運営者はキャッシュサーバーをコントロールすることができる
第6章 - webサーバー
-
サーバーの概要
- 基本的な機能はクライアントと同じ。若干違う点もあるので一応記載する
- ソケット作成
- ソケットを接続待ち状態にする
- クライアントからの接続を受け付ける
- データを送受信
- パイプを外し、ソケットを抹消
- 基本的な機能はクライアントと同じ。若干違う点もあるので一応記載する
-
サーバーの受信動作
- LANアダプタで受信した信号をデジタルデータに変換する
- その後、LANドライバがMACヘッダーからプロトコルを判断し、プロトコルスタックにパケットを渡す
-
Webサーバーソフトがリクエストメッセージの意味を解釈して要求に応える
- リクエストメッセージのURIに記載されたパス名を実際のディレクトリのパス名に変換してから読み込みを行う
- パスで指定されたファイルがHTMLドキュメントや画像ファイルの場合はそのまま送り返すだけだが、プログラムファイルだった場合は、そのプログラムを起動して、それが出力するデータをクライアントに送り返す
-
ブラウザがレスポンスメッセージを受け取り画面に表示
-
webサーバーがレスポンスしたメッセージを受け取ったブラウザはContent-Typeの値でデータの種類を判断する
- text/html
- image/jpeg
- application/json
- など
- データの種類に応じて画面表示のプログラムを呼び出して、OSに指示を出しながらデータを表示させる
- ブラウザが自分で表示機能を持っていないデータ種類の場合は専用のアプリケーションを呼び出す
-
webサーバーがレスポンスしたメッセージを受け取ったブラウザはContent-Typeの値でデータの種類を判断する
感想
結論からいうと、読んで良かったなと思いました。
私は普段仕事としてエンジニアをやっていますし、基本情報技術者の資格くらいはもっていたのですが、思いのほか初めて知る情報がとても多かったです。
IT系のお仕事をされている方であれば、業務上こういったインフラ寄りの知識が必要になることも少なくないですし、間違いなく読んで損しない内容になっていると思います。
ITパスポートレベルを持っている、あるいは半年~1年以上エンジニアとしての業務経験がある方なら、難しくない程度の難易度なので、ぜひご一読することをおすすめします!(ただ量はかなり多いです。私は1か月くらいかけました。)
最後に、本記事の内容についてご指摘、ご質問などありましたら、どしどしコメントいただけると嬉しいです。
以上、ご覧戴きありがとうございましたmm