【インフラ】TCP/IP 再入門【暇人の勉強ログ vol. 2】

レイヤとは

通信機能を階層に分割し、独立に開発可能とする。 「開放型システム間相互接続(Open System Interconnect)」、通称 OSI の設計方針に基づく。


L1: 物理層

伝送路 に関する問題を扱う。 どのようなケーブルを使うか、どのようなコネクタが必要か、それに合うインターフェースは?など。


L2: データリンク層

レイヤ 1 で疎通可能となった電気信号を「フレーム」という通信単位で扱う。

L2 スイッチとは

MAC アドレステーブルをもとに、物理ポートとその先に存在するネットワーク機器の MAC アドレスを変換する。 この L2 スイッチから直接接続できるネットワーク機器群を LAN と呼ぶ(多分)。

なお、MAC アドレステーブルを持っていない場合は「スイッチ」ではなく「ハブ」と呼ばれる。

L2 スイッチ の動作例

PC A から、IP アドレス 192.168.1.6 にある PC B にトラフィックを送信するとする。 レイヤ 2 スイッチ環境内のブロードキャストドメインを元に、ブロードキャストパケットを受信したポート以外の全てのポートにブロードキャストトラフィックが転送される。ここで、ブロードキャストはレイヤ 3 境界を越えることは出来ないため、同じセグメント内に含まれる。

しかし、PC B の固有 MAC アドレスは、ARP によって検出されるまでわかりません。ARP はレイヤ 2 セグメント全体にブロードキャストされる。 適切な宛先 MAC アドレスにパケットが送信された後、スイッチにより、MAC アドレス テーブルに基づいて正しいポートに転送される。

L2-example


L3: ネットワーク層

レイヤ 2 で構築された LAN 同士の接続を実現する。 レイヤ 3 では、データ列を「パケット」という単位で扱い、各端末にはレイヤ 3 用のアドレス (=IP アドレス) が割り当てられる。

L3 スイッチとは

ほぼルータと同じ。パケットの宛先を判断して転送を行う。

が、レイヤ 3 スイッチが「多くのポートを備えたルータ」ではない。

VLAN

Virtual LAN のこと。 物理的議論では、LAN =「同じスイッチに接続された端末群」としていたが、VLAN は物理的な接続に関係なく互いに接続できるグループを構成する。

VLAN のメリット

VLAN 機能を使えば、同じスイッチに接続されていても別の VLAN 内に構成されている端末との通信が出来なくなる。

レイヤ 3 スイッチの必要性

メリットの裏返しとして、1 つのスイッチに接続している端末同士でも、VLAN 機能を利用していると VLAN 間の通信にはルータが必要になる。これにより開発された LAN スイッチにルータの機能を組み込んだ装置が、レイヤ 3 スイッチである。

L3 スイッチの動作例

VLAN 間で(2 つの VLAN インターフェイスを通じて)ルーティングを実行するレイヤ 3 スイッチングの例は以下の通り。VLAN 20 にブロードキャストされた ARP 要求による PC B の MAC アドレス解決をもとに、適切な宛先 MAC アドレスに書き換えられ、レイヤ 2 セグメントからパケットが返送される。

L3-example

ネットワーク分割

ネットワーク分割の方法 3 種

  1. 物理的に分割
  2. 論理的に分割
    1. IP アドレスでの分割
    2. VLAN での分割

目的

セキュリティ上の理由 がメジャー。 セグメント内での通信は許可するが、セグメントを跨ぐ L2 通信はさせたくないのが目的となる。 特に L2 通信で代表的な ARP は基本的にブロードキャストで LAN 内にパケットが送られるため、ネットワーク内部でキャプチャされていた場合、他セグメントの情報も確認できてしまう。

物理的に分割

解:レイヤ 2 スイッチを分ける

ここで注意しなければならないのは、分割しているのは イーサネットのネットワーク である。

IP アドレスでの分割

IP アドレス(サブネット分割)により論理的に分割することもできる。

ここで注意しなければならないのは、物理的に同じイーサネットネットワークで構成されていた場合、ブロードキャスト / マルチキャストなどがフラッディングしてしまう。

VLAN で分割

VLAN の章で述べた通り、論理的にスイッチを分割し、イーサネットネットワークを分割する。

IPv4

  • IP アドレスの管理団体
  • 2011 年に枯渇

割り当てできない IP アドレス

  • ネットワークアドレス
    • ホスト部のビットが全て 0 のもの
    • 10.0.0.0192.168.1.0 など
    • 0.0.0.0/0 は全ての IP アドレス範囲を示す。
  • ブロードキャストアドレス
    • ホスト部のビットが全て 1 のもの
    • 10.255.255.255192.168.1.255 など

IP アドレスの範囲と表記

  • CIDR (Classless Inter-Domain Routing) 表記
    • 「サイダー」と読む
    • アドレスの後ろに、 /n (n: プレフィックス。ネットワーク部のビット長) と書く
    • ex) 192.168.0.0 ~ 192.168.255.255 = 192.168.0.0/16
  • サブネットマスク表記
    • アドレスの後ろに、 /xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx: サブネットマスク。ネットワーク部を1、ホスト部を0で記述し、8 ビットずつ 10 進数で表す)
    • ex) 192.168.1.0 ~ 192.168.1.255 = 192.168.0.0/255.255.255.0

ルーティングプロトコル

新たなネットワークを追加するとき、その情報をルーティングテーブルに反映させる。

EGP

Exterior Gateway Protocol の略。 AS (Autonomous System) 間の境界上に位置するルータ同士が経路情報を交換し合うためのプロトコルのこと。現在は BGP (Border Gateway Protocol) が主流。

ISP(Internet Service Provider) や AWS などの AS は、固有の AS 番号が割り振られている。BGP では、BGP ネイバー(ルート情報を交換する BGP ルータ)に BGP テーブル上のベストパスのルート情報を AS 番号とともにアドパタイズする。

IGP

Interior Gateway Protocol の略。 AS 内部で完結する経路制御プロトコルを呼ぶ。RIP (Routing Information Protocol) や OSPF (Open Shortest Path First) が主流である。

RIP はディスタンスベクタ型と呼ばれ、宛先ネットワークまでの距離を表すメトリック(RIP はホップ数)であるディスタンスと、ネクストホップとインターフェースに相当するベクタを用いてルート情報を表現する。また 30 秒ごとにルート情報を送信し合うことで、送信しているルート情報のネットワークが正常に稼働していることを他の RIP ルータに通知している。一方ルータ数が多くなると、コンバージェンス(収束)時間が長くなるため、障害発生時に削除すべきルート情報が残り続けルーティングループが発生する可能性が高い。小規模ネットワーク向き。

OSPF は リンクステート型と呼ばれ、ルータ同士は単純なネットワークアドレス/サブネットマスクではなく、LSA(Link State Advertisement) を交換する。ネットワークを「エリア」と呼ばれる小さな単位に分割して経路情報を管理しており、同一エリア内のルータは全て同じトポロジデータベースを保持する。他のエリアからは内部の詳細なトポロジは見えないようになっており、経路情報の削減に貢献している。中規模ネットワーク向き。

ICMP

Internet Control Message Protocol の略。 ping コマンドを実現しているプロトコルである。IP プロトコルの「エラー通知」や「制御メッセージ」を転送するために利用される。

NAT

知っていることが多いので略


Linux コマンド

lsof

実行中のプロセスを調べる。

$ sudo lsof -i -n -P

COMMAND    PID    USER  ...  NAME
dhclient   1017   root  ...  *:68
sshd       1147   root  ...  *:22 (LISTEN)
...

LISTEN が「待ち受け状態」、 ESTABLISHED が「通信中のポート」を示す。


AWS 予備知識

AL2 と RHEL

Apache と Nginx

Web サーバ用のミドルウェア。OS とアプリケーションを仲介する。

Apache

  • マルチプロセスのプロセス駆動アーキテクチャ を採用
    • 各リクエストをプロセスに割り当てて処理を行う
    • メリット
      • メモリ空間がプロセスごとに独立している
      • スクリプト言語などを組み込み易い
      • 資源の競合を考慮しなくてよい
    • デメリット
      • プロセス生成時のオーバヘッド
      • 親プロセスのアドレス空間を子プロセスにコピーして fork する
      • リクエストが大量に来た際に、子プロセスの数とメモリ消費量が増大する

Nginx

  • シングルスレッドのイベント駆動アーキテクチャ を採用
    • Node.js と同じ、イベントループ方式 = シングルスレッドでループ処理を回し、キューに溜まったイベントを処理していく
    • メリット
      • 少量のプロセスだけで大量のリクエストを処理することが可能
      • 処理が軽く大量のリクエストを処理するのに向いている
    • デメリット
      • CPU リソースがたくさん必要な処理には向いてない
      • 処理時間が長くなる処理を実行した際、そこでプロセスがブロックされてしまう
  • リバースプロキシやロードバランサの機能も有する
  • C10K 問題をはじめ、大容量のデータ配信や大量同時接続に耐えることを目的に設計された

C10K 問題

  • Apache の(?)マルチプロセスに付随する問題を指す
  • クライアント数が 1 万 (=10k)を越えると、「ハードウェア性能に余裕があっても」「プロセス数の上限に達し」「リクエストの応答性能が極端に低下する
  • これを解決するのがシングルスレッド & 非同期・ノンブロッキング I/O

追々更新していく。


その他参考


布教コーナー

ここからが本編だぞ!

以前紹介した 葉加瀬冬雪 さんにどっぷりハマり中。 「指示厨殺し」と言われるほど自由気ままでマイペースなゲーム実況で有名ですが、それ以上に、いや誰よりも何よりも「配信がしたい!」という気持ちが伝わってくる姿がとても素敵なVTuberです。 最近は諸々で忙しそうですが、彼女のやりたい事や夢に向かって全力で楽しんでほしいなぁと、一介の モルモット リスナーとして応援しています。

「死んだら即終了SEKIROシリーズ」はオススメ。短いし 面白いし、毎日0時スタートなのでとても見やすい。配信したいけど長時間は取れない…、そんな中、逆転の発想でこういう企画で楽しませてくれる はかちぇには頭が上がりません。

今日こそ大手門が開くのだろうか… www.youtube.com

今週金曜日(10月23日)は!!!はかちぇの!!!3Dお披露目!!!見ろ!!!

www.youtube.com