【備忘録】ネットワークはなぜつながるのか

はじめに

この記事は「ネットワークはなぜつながるのか」を読んで
忘れそうなことや重要だったことのメモです

自分用のメモなのでかなり読みにくいかもしれませんが
ご了承ください

詳しく学びたい方はぜひご購入ください

Amazon.co.jp - ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識 | 戸根 勤, 日経NETWORK |本 | 通販



本の全体像

探検ツアーの流れ

上記の画像のように、ネットワークの流れを順番に学ぶことができます。

IPやイーサネット、ハブやルーターについても詳しく書いてありとても勉強になりました。

またネットだと曖昧な情報も、細かく明確に書いてあり良かったです。

第1章 Webブラウザがメッセージを作る

ブラウザにURLを入力してから通信の流れ

第2章 TCP/IPのデータを電気信号にして送る

データを送受信する際のOS内部にあるプロトコル・スタックの動きについて
LANアダプタの内部実装について

  • プロトコルについて

    • 通常のアプリの送受信の際は「TCP
    • DNSへの問い合わせなどは「UDP
  • netstatコマンドで実際にソケットを確認できる

  • 第2章でもsocketライブラリが大活躍

    • ソケットのメモリを確保し、ディスクリプタ(識別番号のようなもの)をアプリに知らせる
    • SYNで接続開始、FINで切断
    • 通信中はACK(アック)番号やシーケンス番号を用いてデータがちゃんと届いたことを確認
    • ウィンドウズ制御方式はACK番号を待つ前に送信するので無駄がない
      • バッファを超える量を受信した場合データが消える...
      • が、しかしTCPヘッダーのウィンドウ・フィールドで受信可能量を超えないように調整する

https://atmarkit.itmedia.co.jp/ait/articles/0402/13/news096_2.html

  • イーサネット
    • イーサネットのパケットの先頭にはMACアドレスがあり、あて先は次のルーターを指している(到着したら次の目的地に更新)
      • IPヘッダーで目的のサーバーを見分けている
    • 実はIPアドレスはコンピュータではなくLANアダプタに対して割り当てられている
      • LANアダプタを複数持つサーバーには複数のIPアドレスが割り振られる
    • ARPという仕組みで、IPアドレスからMACアドレスを調べる
      • (詳しく) ブロードキャストという仕組みを使って特定のIPアドレスを持っている機器のMACアドレスを取得する
      • 調べた結果は一時的にARPキャッシュに保存される
    • イーサネットは以下の3つの性質を持つ
      • MACヘッダーの宛先の相手にパケットを届ける
      • 送信元MACアドレスで送信元を表す
      • イーサ・タイプでパケットの内容物を表す
    • LANアダプタのROM(Read Only Memory)には全世界で重複しないよう管理されたMACアドレスが書き込まれている
    • 電気信号はデータ信号とクロック信号を合成した信号
      • クロック信号を利用することで「データ信号において1や0が続き信号の変化がなくなり、ビットの区切りを判別できなくなる」という問題を解決
      • クロック信号のタイミングを計るために、プリアンブルと呼ばれる特別な信号をパケットの前に付加する
        • エスカレーターに乗る前にしばらく眺めてタイミングを見計らうのと同じ
        • 最後のビットパターンが少し違うので、それを目印に信号からデータの抽出を開始 (SFD(スタートフレームデリミタ))
      • 末尾に付加するFCSでデータの異常を検知
    • LANアダプタのMAC回路が共通形式の信号を作り、PHY(MAU)回路がケーブルに送り出す時に変換して送信する
      • PHY は100メガビット/秒以上の高速なイーサネット
        • 100メガビット/秒 = 1秒間に100メガビット分のデジタル・データを信号に変換して送る
    • 受信動作では、パケットを受信したときに割り込みという仕組みを使う
      • CPUがOS内部の割り込み処理用のプログラムに切り替える
      • その後LANドライバが動き、LANアダプタのバッファ・メモリーから受信したパケットを取り出す

第3章 ケーブルの先はLAN機器だった

私たちの送信するパケットが家庭や会社のLANにあるハブやルーターを経由して目的地に進んでいく様子を探検する

  • 信号について

  • ルーターについて

    • ルーターは簡略化すると、中継部分とポート部分の2つで構成される
      • 中継部分はパケットの中継先を判断
      • ポート部分はパケットを送受信する
    • ルーターはホスト番号を無視してネットワーク番号のみ調べる
    • ネットマスク欄が0.0.0.0の場合、どんなアドレスでも一致することになる
  • パケットについて

    • パケットには有効期限TTL(Time to live : 生存期間)というIPヘッダーのフィールドがある
      • ルーターを経由するたび1減らし0になったら期限切れとする
      • これにより同じ場所をループすることを防ぐ
    • パケットのサイズが出力側のパケット最大長を超える場合はフラグメンテーションを使ってパケットを分割する
  • 現在のルーターの付加的な機能

    • アドレス変換
      • パケットの送信元IPアドレスをプライベートアドレスからグローバルアドレスに書き換える
      • ポート番号も同時に書き換える
      • アドレス変換装置の対応表に手動でプライベートアドレスを登録することで、インターネットから社内のサーバーにアクセスできる
    • パケットフィルタリング機能
      • パケットのヘッダーを調べて条件に一致したら中継、または棄てるなどの動作をする

第4章 アクセス回線を通ってインターネットの内部へ

パケットがインターネット接続用ルーターを経由してインターネットの中に入って進んでいく様子を探検する

  • 光ファイバの通信高速度が電気より高速なのはなぜ??

    • 信号の速度に大差はない
    • が、減衰率 (信号が途中で弱くなる率)が光信号は低い
    • さらに光信号は電気的な雑音の影響も受けない
  • インターネットと会社や家庭のLANは以下の2点が違う

    • 距離の違い (ツイストペアケーブルは100メートルが限界だが、光ファイバなら数キロメートル)
    • 経路情報の登録の違い (インターネット内のルーターには10万件以上の経路情報が登録されている)
  • インターネットに接続

    • インターネット接続用ルーターはアクセス回線のルールに従う
    • アクセス回線にはADSL, FTTH, CATV, 電話回線などがある
  • ADSLについて

    • ADSLモデムはパケットを細かく分割しセルに格納する
    • 次に変調方式でセルをなだらかな波形に信号化
    • そしてスプリッタという装置に渡す
      • 電話回線に流れてきた信号をスプリッタで、電話とADSLの信号を判別する
  • その後...

    • 電柱を経由し電話局(DSLAM)にたどり着く
    • 次にBASと呼ぶパケット中継装置に届く
    • そしてトンネリング用のヘッダーを付け、トンネリングの出口に向けて中継する
  • ルーターの進化

    • アクセス回線がADSLFTTH (光ファイバ)に進化したためそれに合わせてルーターも進化した
    • その進化したルーターがBAS
      • BASには本人確認と設定値通知の機能がある
      • さらにトンネリングを使ってパケットを運ぶ機能もある
  • インターネットの実態

    • 多数のプロバイダのネットワークを相互に接続したもの
      • プロバイダにはPOPとNOC (中核、POPの規模の大きいもの)などの設備がある
      • NOCにはデータ転送能力がテラビット/秒の高性能ルーターがある (個人ユーザー向けの1万倍以上)
    • プロバイダも会社にあるマシンルームと似ていて、どこかのビルに用意されている
  • イーサネット内部ではBGPという仕組みを使って、ルーターが自動的に経路情報を交換する

    • 社内で使うシステムでは周囲にあるすべてのルーターと無差別に経路情報を交換する
    • プロバイダ間では特定のルーターと1対1で経路情報を交換する
  • IXの必要性

    • プロバイダの中心となる設備を設けて通信回線の数を抑える
    • 高速で巨大なスイッチング・ハブがIXの中核となっている

https://xtech.nikkei.com/it/article/COLUMN/20071009/284013/

第5章 サーバー側のLANには何がある

サーバー側のPOPにパケットが到着してから、パケットはサーバーを目指して進んでいく

この章ではサーバーの手前にある、ファイアーウォールやキャッシュ、サーバー、負荷分散装置について探検する

  • ファイアーウォールについて

    • 特定のサーバーの特定のアプリケーションのパケットだけを通し、それ以外は遮断する
    • 今はパケットフィルタリング型が最も普及している
    • TCPだとSYN=1, ACK=0を用いて片方の通信を防ぐことができる
    • DNSサーバーに用いられるUDPでは片方の通信を防ぐことができない
    • 遮断されたパケットは、不正アクセスの痕跡を示すものがあるため記録せれる
  • 負荷分散について

https://itmanabi.com/dns-record/

ただしこの方法だと、サーバーが故障しても検知してくれない

  • 上記の問題を解決するために考案されたのが負荷分散装置あるいはロードバランサー
    • どのサーバーにリクエストを送るか判断する
  • ほかにもキャッシュ・サーバーを利用する方法もある

    • プロキシ (サーバーへのアクセス動作を仲介) という仕組みを使ってデータをキャッシュする
    • プロキシは仲介の際にデータをディスクに保存し、サーバーに代わってデータをクライアントに返す機能を持つ
  • キャッシュ・サーバーの位置について

    • サーバーのLAN
      • webサーバーの負荷を抑えられるが、インターネットのトラフィックは抑えられない
    • クライアントのLAN
  • 最寄りのキャッシュ・サーバーの見つけ方

    • DNSの問い合わせの際に、クライアント側のDNSと最も近いキャッシュ・サーバーを探す
      • ただしクライアントのDNSとクライアントが同じ場所にあるとは限らない
    • リダイレクト用サーバーアクセス先を振り分ける
      • リダイレクト用のHTTPメッセージのやり取りが増えるためその分オーバーヘッドが多い
      • が、送信元IPアドレスをもとに距離を計算するので精度が高い
  • CDS(CDN)について

    • コンテンツ配信サービス(CDS)を提供する事業者がプロバイダと契約し、多数のキャッシュ・サーバーを設置する
  • キャッシュについて

    • 1度アクセスしたデータを保存し、2回目以降のアクセス動作に利用する
      • 上記の方法だと、サーバーに更新があったかを確認する必要があるためそれにより応答時間が悪化する場合も
    • CDSではサーバーでデータが更新されたら、それを直ちにキャッシュ・サーバーに反映する
    • 動的にページを作る場合は、静的な部分を分けてキャッシュに保存する方法もある

第6章 Webサーバーに到着し、応答データがWebブラウザに戻る

Webサーバーの中身の探検

  • ソケットライブラリの呼び出し方

    • サーバー側はソケットを接続待ち状態にし、受付を行う
    • 接続が開始したら接続待ちソケットをコピーして新しいソケットを作成する
  • CGI(Common Gateway Interface)

    • クライアント側の要求に応じてサーバーが 外部プログラムを呼び出し、その実行結果がHTTPを介してクライアントに送信される仕組み

感想

すごく細かいところまで丁寧に解説してあり良かった

なんとなくネットワークの知識はあるけど
詳しく説明できる自信がない人はぜひ読むべき