2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

「ネットワークはなぜつながるのか」を読んで

Last updated at Posted at 2024-04-07

はじめに

本記事では、ネットワーク基礎知識を学ぶための技術書としてまず名前があがる名著の一つ、「ネットワークはなぜつながるのか」の要点と読了後の感想をまとめていきます。
約600ページにもわたるボリューミーな本なので、とりあえず要点だけ把握したい方や、どのくらいのレベル感なのか知りたい方はぜひご一読ください。

どんな本なのか?

普段私たちが私生活や業務のなかで、何気なく使用しているインターネット等を含む 「ネットワーク」 の仕組みやそれを支える技術について体系的に学べる本です。

「ネットワーク」 はなんとなく想像のつく通り巨大で複雑なシステムですが、この本ではブラウザにURLを入力してからwebページが表示されるまでの道のりを、探検ツアー形式で初心者にもわかりやすく解説してくれます。

HTTPIPLANルーターインターネットなどについて、各々については多少の知識はあるけれど、それぞれがどのように関わりあっているのかは知らないんだよなぁ、という方におすすめです。

要約

第1章 - webブラウザ

  • HTTPリクエスト・メッセージを作成する
    • ブラウザの最初の仕事はURLを解読すること
    • ブラウザはHTTPリクエストをつくり、HTTPレスポンスを受信する
  • WebサーバーのIPアドレスをDNSサーバーに問い合わせる
    • ブラウザはURL上のドメイン名からIPアドレスDNSサーバーに問い合わせる
  • 世界中のDNSサーバーが連携する
    • DNSサーバーはサーバー内に登録されたドメイン名とIPアドレスの対応表を調べて、IPアドレスを回答する
  • プロトコルスタックにメッセージ送信を依頼する
    • プロトコル・スタックソケット(クライアントとサーバーの通信窓口のようなもの)を使用して、以下の順番でwebサーバーとやり取りする
      1. ソケット作成
      2. サーバー側のソケットとパイプを接続
      3. データを送受信
      4. パイプを外し、ソケットを抹消

第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(ルーターの一種)に届く
    • BASATMセルパケットに戻し、インターネット内部に中継する
  • 光ファイバを用いたアクセス回線(FTTH)
    • FTTHとは、光ファイバ(光信号)を用いたアクセス回線
    • ADSLの代わりに光ファイバを使ってインターネット接続用ルーターBASを接続する
  • アクセス回線で用いるPPPとトンネリング
    • BASPPPoEの仕組みを使って、本人確認設定値通知の機能を実現している
    • PPPoEPPPメッセージ(本人確認用のパスワードなど)をイーサネットのパケットに入れてやり取りする
    • トンネリングとはインターネット接続用ルーターから送られてきたパケットをプロバイダのルーターに向けて送信する仕組み
  • プロバイダの内部
    • プロバイダのルーターがインターネットの入口
    • ADSLなどのアクセス回線がBASを介してつながっているプロバイダ設備をPOPと呼ぶ
    • POPから入ってきたパケットはNOC(POPの大規模版)に集まっていく
  • プロバイダをまたがって流れるパケット
    • インターネット内部では、BGPという仕組みを使って、プロバイダ間経路情報を交換しているため、サーバー側のプロバイダがクライアント側と違う場合、パケットは他プロバイダに中継される
    • プロバイダ間の接続のインターフェースとなるIXという設備がある
      • IXの中心には高速で巨大なスイッチングハブであるレイヤ2スイッチがある

第5章 - ファイアウォール、キャッシュサーバー

  • Webサーバーの設置場所
    • 以下の3ケースがある
      • 社内LANに設置し、ルーターで直結する
      • 社内LANとは分離した公開サーバー用LANに設置し、ファイアフォールで中継する
      • 接続事業者データセンターに設置する
  • ファイアウォールの仕組みと動き
    • 主流な方式はパケットフィルタリング型
      • パケットを中継する際に、MACヘッダーIPヘッダーTCPヘッダーを調べて事前に設定した条件と合致しない場合はパケットを捨てる仕組み
    • 外から社内LANにはアクセスできないようにしたり、公開用サーバー用LANからはレスポンスのときのみ、外部のネットワークへアクセスできるようにできる
    • ファイアウォールではヘッダーしかチェックしていないため、パケットの中身に危険なデータが含まれている場合はそれを防ぐことはできない
  • 複数サーバーにリクエストを振り分けてサーバーの負荷を分散
    • サーバーの処理能力がリクエストに追いつかなくなったときの対応策の一つとして分散処理がある
      • サーバーを複数台用意して処理を分担する方法
    • 以下の2通りの方式がある
      • ラウンドロビン方式:DNSサーバーに用意したサーバーのIPアドレスを同じドメイン名で複数登録しておくことで複数サーバーに順番でリクエストを送る
      • 負荷分散装置負荷分散装置(ロードバランサー) のIPアドレスをDNSサーバーに登録しておき、負荷分散装置が各サーバーの負荷状況(CPUやメモリの使用率)を見て、リクエストを振り分ける
  • キャッシュサーバーを利用したサーバーの負荷分散
    • キャッシュサーバープロキシという仕組みを使ってデータキャッシュ(保持)するサーバー
    • キャッシュサーバークライアントwebサーバーの間に置き、一度レスポンスしたことのあるリクエストがクライアントから来た場合はwebサービスを介さずにレスポンスを返却する
    • webサーバー側ではなく、クライアント側にプロキシを置く方法をフォワードプロキシと呼ぶ
  • コンテンツ配信サービス
    • 複数の主要なプロバイダに設置したキャッシュサーバーwebサーバー運営者に貸し出すサービスのこと
    • これを利用することで、アクセス時のインターネットのトラフィックを押さえることができ、かつwebサーバー運営者はキャッシュサーバーをコントロールすることができる

第6章 - webサーバー

  • サーバーの概要
    • 基本的な機能はクライアントと同じ。若干違う点もあるので一応記載する
      1. ソケット作成
      2. ソケットを接続待ち状態にする
      3. クライアントからの接続を受け付ける
      4. データを送受信
      5. パイプを外し、ソケットを抹消
  • サーバーの受信動作
    • LANアダプタで受信した信号をデジタルデータに変換する
    • その後、LANドライバMACヘッダーからプロトコルを判断し、プロトコルスタックパケットを渡す
  • Webサーバーソフトがリクエストメッセージの意味を解釈して要求に応える
    • リクエストメッセージURIに記載されたパス名を実際のディレクトリのパス名に変換してから読み込みを行う
    • パスで指定されたファイルがHTMLドキュメント画像ファイルの場合はそのまま送り返すだけだが、プログラムファイルだった場合は、そのプログラムを起動して、それが出力するデータをクライアントに送り返す
  • ブラウザがレスポンスメッセージを受け取り画面に表示
    • webサーバーがレスポンスしたメッセージを受け取ったブラウザContent-Typeの値でデータの種類を判断する
      • text/html
      • image/jpeg
      • application/json
      • など
    • データの種類に応じて画面表示のプログラムを呼び出して、OSに指示を出しながらデータを表示させる
    • ブラウザが自分で表示機能を持っていないデータ種類の場合は専用のアプリケーションを呼び出す

感想

結論からいうと、読んで良かったなと思いました。

私は普段仕事としてエンジニアをやっていますし、基本情報技術者の資格くらいはもっていたのですが、思いのほか初めて知る情報がとても多かったです。
IT系のお仕事をされている方であれば、業務上こういったインフラ寄りの知識が必要になることも少なくないですし、間違いなく読んで損しない内容になっていると思います。

ITパスポートレベルを持っている、あるいは半年~1年以上エンジニアとしての業務経験がある方なら、難しくない程度の難易度なので、ぜひご一読することをおすすめします!(ただ量はかなり多いです。私は1か月くらいかけました。)

最後に、本記事の内容についてご指摘、ご質問などありましたら、どしどしコメントいただけると嬉しいです。
以上、ご覧戴きありがとうございましたmm

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?