ネットワーク技術の基礎知識
こんにちは、はむたまです。
本日はネットワーク技術の基礎知識について勉強したのでまとめます。
これまで仕事や勉強時に単語は出てきてもなんとなく理解した気になって概要だけ調べてました。
実体験をもとに詳細を書いていきます。
構成内容は以下です。
読者の中にITエンジニア、SEだけど意外と抑えてない知識の保管になればと思います。
是非これだけ読んで理解しましょう。
L2スイッチ
概要
L2スイッチは、データリンク層で動作するネットワーク機器です。MACアドレスを基にしてフレームを転送します。
ネットワーク機器というとルータもスイッチも含まれるのでややこしいですね。ネットワーク機器というより津サーバ間の通信を実現する機器と言い換えれば合点がいくかもしれません。
データリンク層ってなんだっけ?と思います。
基本情報で学ぶOSI参照モデルの第2層を指します。
本日の内容と密接にかかわるためおさらいしておきます。
※データリンク層は同一ネットワーク上のサーバ間を固有のMACアドレスで認識して通信します。プロトコルとしてイーサネットを使います。第1層の物理層とは異なり、ケーブル接続やbit列を読み変えることはしません。
詳細説明
- MACアドレステーブル: スイッチが参照するMACアドレスとポートの情報をまとめたテーブルです。主にMACアドレス、動的か静的かのType、VLANやportの値が記載されます。
- ブロードキャストドメイン: 一斉に同報通信ができる範囲をブロードキャストといいます。サービスごとにドメインを分割して使用され、L2スイッチは一つのブロードキャストドメインを使います。
- vlan: 仮想的なLAN(Local Area Network)を指し、小規模な通信環境で使います。社内LANなどプライベートネットワークを構成するとき使います。
一般に小規模なシステム構成にはL2で十分です。
例えば3つのサーバを同じネットワーク帯(同一セグメント)で構成する場合、固有のMACアドレスを判別できればサーバ間の通信は成立します。これを可能にするのがL2スイッチです。
スイッチハブ
概要
スイッチハブ(スイッチングハブ)は、複数のデバイスを接続し、データを適切な宛先に送信するハブです。L2スイッチと同じものと理解されることがあります。サーバには青い線(有線LAN)をつなぐ挿し口があります。青い線をつないだサーバ同士は同一セグメントで繋がることを意味します。この挿し口を複数用意して、同一セグメントに複数のサーバを接続させる役割があります。
詳細説明
- 動作方式: スイッチハブはL2スイッチ同様にMACアドレステーブルを参照し、データを特定のポートに送信します。
同一セグメントにつながれたサーバはMACテーブルを参照して、サーバ間の通信を行うことができます。
L3スイッチ
概要
L3スイッチは、ネットワーク層で動作し、ルーティング機能を持つスイッチです。先ほどまでのL2スイッチの一階層上で解釈されます。L2スイッチ機能とルータの機能を統合して製品化されています。
同じネットワーク帯にないサーバ間をつなぐ機能があります。
それぞれL2スイッチでつながれた同一セグメントのネットワークA,Bがあるとします。
A,B内のはサーバは通信できますが、AとBを跨いだ通信はLANがないので通信できません。これを可能にするのがL3スイッチです。
詳細説明
- IPルーティング: サーバ固有のMACアドレスとは異なり、ネットワーク内で一意に特定できるIPをIPテーブルで管理します。IPテーブルを参照して、どのサーバに通信させるか判断します。
- VLAN間ルーティング: 異なるVLAN間の通信を可能にします。
- ARPテーブル: サーバやルータ等のルーティングする機器がMACアドレスとIPを照合するのに使います。MACアドレスとIPアドレスが対応して構成され、通信タイプが動的か静的か記載されます。
L3スイッチはLANに使うインターフェース(ethernet port)しか持たないため、LAN同士の通信制御に特化しています。
似たものでルータがあります。
ルータはL3スイッチのもつインターフェース以外にWAN接続できたり、NAT(ネットワークアドレス変換)機能を持ちます。
製品によってはFW
FW機能やアクセスコントロール機能をもちセキュリティ向上に役立ちます。
L3スイッチはL2のようにサーバ間をつなぐ機能だけに特化しており、高速なデータ通信を実現します。
一方でルータはL3スイッチの機能を持つがほかの機能を標準搭載していることでカスタマイズしやすいが、通信性能の観点で見ればL3スイッチに劣ります。
ルータと仮想ルータ
概要
ルータは、ネットワーク間でデータパケットを転送するデバイスです。仮想ルータは、物理的なハードウェアを使用せずにソフトウェアでルーティング機能を実現します。
家庭用に無線でスマホや家電やPCをインターネットにつなぐものとしてWi-Fiがありますが、Wi-fiにはこのルータ機能が備わっています。
詳細説明
- ルーティングプロトコル: OSPF、BGPなどのプロトコルを使用して最適な経路を決定します。ルータはスイッチのようにLANで繋がれていないサーバの通信を実現するため、サーバから認識できるリモートネットワークのルート情報をルーティングテーブルで管理します。
- static routeとルーティングプロトコル: static routeはルータにCLIを使って手動でルーティングテーブルにルーティングを追加します。一方でルーティングプロトコルではルータ同士が情報交換することで自動でルーティングテーブルにルーティングを追加します。
ルーティングプロトコルには以下のような種類があります。 - RIP(Routing Information Protocol)
- OSPF(Open Shortest Path First)
- EIGRP(Enhanced Interior Gateway Routing Protocol)
- BGP(Border Gateway Protocol)
- 仮想ルータ: 仮想環境で実行され、柔軟性とスケーラビリティを提供します。ルータはスイッチと異なり主にソフトウェアで設定を変更します。物理的な線を用いないソフトウェアを仮想ルータと呼びます。
ファイアウォールやルーティングといったネットワーク上の設定をconfigと呼ばれる設定ファイルに記載することで動作します。
ルーティングに必要な情報は以下です。
- 通信先のネットワークアドレス
- ネットワーク上の次のアドレス(ネクストホップ)
そのほかにFWを設定するならポート番号やインターフェースの情報が必要です。
どのLAN同士をつなげるインターフェース(ethernet)かを定義し、通信規格を設定します。(TCP, UDP, IPなど)
通信するポート番号を設定することで特定の通信を許可したり、アクセス元のサーバIPで通信制限を設けることもできます。
FQDNでの制御はできませんが、IPレベルでのルーティングを実現できます。
L4スイッチ
概要
L4スイッチは、トランスポート層で動作し、ポート番号を基にパケットを転送します。
TCPやUDPのポート番号で通信制御します。通信制御だけならL3スイッチやルータで十分ですが、サーバに振り分ける通信の負荷を均等にさせる(負荷分散)や特定の通信を通さないようにするセキュリティ強化の意図で使われます。
詳細説明
- ロードバランシング: トラフィックを複数のサーバーに分散します。
- QoS: サービス品質を向上させるための機能を提供します。
トランスポート層ではサーバ間の通信をどのアプリケーションに渡すかを識別します。
一つのサーバに一つのアプリケーションしかなければ選択の余地はないのですが、一般的に一つのサーバに複数のアプリケーションが動作しています。
例えばメール機能は500番、WEBブラウザは443番、DNS
DNSのルーティングは53番といった特定の番号で振り分けしています。
HTTPやHTTPS通信に用いられるポート番号(443, 80)もこのトランスポート層で振り分けされます。
UDP(User Datagram Protocol)は通信の信頼性が低い代わりに高速での転送ができるプロトコルです。名前解決に必要なDNSとの通信や信頼性を必要としないHTTP通信に使う通信規格です。通信のエラーチェックやロスした情報の補完機能はありません。サーバ間の接続開始や接続の維持及び接続修了のオーバヘッドがないため、最初に通信した情報が誰に届いていようが継続的に送信するものです。
TCPはサーバ間でお互いを認識して接続を保持した状態で通信するプロトコルです。UDPでできなかった通信の維持やロスしたパケットを補完することができます。
ただ最初にサーバ間の接続を行う前に、通信を始める合意を取って、合意の結果を保持します。通信をやめる場合にやめる信号の合意を取って切断するため、通信の速度は低下します。安全である一方通信の終わるまでにやることがUDPより多いのです。
DNSによる名前解決
概要
サーバから来た通信をFQDNとIPで対応させることでネットワーク層の通信とアプリケーション層の通信をスムーズにするものです。一般的な使われ方はホスト名を検索したらIPアドレスが返ってくる名前解決です。
詳細説明
-
レジストリ: 世界的に有名なドメイン(FQDN)とIPアドレスは管理されています。ドメイン情報を保持するデータベースを管理する機関がレジストリです。ドメインごとにレジストリがあり、.comや.netといったドメインの末尾によって別のDBが世界で分散されています。これらのDBはツリー上に構成され、上位のサーバが下位のサーバにアクセスしていきます。
-
リゾルバ: DNSサーバが名前解決を求められたとき、まず動き出すプログラムはスタンブリリゾルバです。ただしスタンブリリゾルバで解決しない場合に、他のDNSサーバのレジストリを参照するのがフルサービスリゾルバです。
一度名前解決したことがあるFQDNとIPであればDNSサーバに残ったキャッシュ情報を参照します。
キャッシュになかった場合はキャッシュDNS
DNSがルートDNSに名前解決の依頼を投げます。ルートDNSはすべてのアドレスを知っているのではなく、子階層のDNSの情報を知っているため関連するDNSに名前解決の依頼をします。このDNSサーバ間の委任フローを経て最終的に必要なFQDNとIPの対応をクライアントに返します。
ここで疑問に思う人がいるかもしれません。DNSサーバに一度名前解決した結果はキャッシュとして保存されるならば、世界のどこかでFQDNとIPの変更を行った情報はいつ更新されるのか?
DNSのキャッシュには生存期間があり、いつまでも同じ答えを出すとは限りません。DNSのFQDNとIPの対応表(レコード)には生存期間を設定する必要があります。
秒単位で設定でき、172,800であれば48時間キャッシュに保存されます。
一度参照してから誰かがレコードを変えた場合、このキャッシュがリフレッシュされるまでの最長48時間は間違った名前解決の答えをクライアントに返します。
なので生存期間は短い値にしておくとサーバの名前解決失敗の時間を短縮できます。
DNSキャッシュは複数の場所に残ります。
- ブラウザ
- クライアントOS
- DNSキャッシュサーバ
このキャッシュに残った情報をもとにサーバ攻撃する手法もあるので対策が必要です。
一般的なDNSのツールはBINDですが、高頻度なアプデがあり、たまに大きな脆弱性を含んだアップデートがされてしまいます。
ヨーロッパではやりつつあるDNSのツールがPowerDNSです。PowerDNSはキャッシュ機能を持たない権威DNSとして構築することが可能のため、高速で名前解決ができます。またキャッシュを採用しないことで攻撃対象から外すことができます。
PowerDNSに登録するレコードはゾーンと呼ばれ、バックエンドのDBに追加することでゾーンの情報を管理できます。
キャッシュ情報をもつDNSキャッシュサーバの構築が必要であればunboundがいいでしょう。
unboundはDNSキャッシュに特化したソフトウェアのため、キャッシュ汚染されない工夫がされており、キャッシュを高速に行うことができます。
他にもPowerDNSに名前解決のアクセスが集中した場合の負荷を低減させるdnsdistもあると安全です。
VLAN
概要
VLAN(仮想LAN)は、物理的なネットワークを論理的に分割する技術です。
詳細説明
- セグメンテーション: ネットワークトラフィックを分離し、セキュリティと効率を向上させます。
- タグ付け: 802.1Qタグを使用してVLAN情報をフレームに追加します。
VXLAN
概要
VXLAN(仮想拡張LAN)は、VLANの制限を超えて大規模なネットワークを構築するための技術です。
詳細説明
- オーバーレイネットワーク: L3ネットワーク上に仮想的なL2ネットワークを作成します。
- スケーラビリティ: 16M以上の論理ネットワークをサポートします。
- ユースケース: データセンターやクラウド環境での大規模なネットワーク分離に使用されます。
ロードバランサー
概要
ロードバランサーは、トラフィックを複数のサーバーに分散し、システム全体のパフォーマンスと可用性を向上させます。
L4スイッチに出てきた負荷分散の機能を担います。ロードバランシング自体はL4以上で行われるため、L7で実行することも可能です。
一般にL4ロードバランサ―はネットワークロードバランサ―と呼ばれ、トランスポート層のポート番号によって振り分けることができます。
L7ロードバランサ―はアプリケーションロードバランサ―と呼ばれ、HTTPプロトコルが用いられます。
クライアントのアクセスしたURLやブラウザのCookieやヘッダーで振り分けられます。
詳細説明
- ラウンドロビン: 特別な機会を用いずにDNSで名前解決した際に順番に振り分けるサーバを決めておきます。特別なルールがないため、非効率的な負荷分散です。クライアントから名前解決するサーバのIPが都度変わるため、トラブルシュートが困難になります。また振り分け先サーバグループの故障を検知しないため、一台のサーバが落ちるとほかのサーバに負荷が集中し、大規模なシステム障害につながります。
- ヘルスチェック: ロードバランサ―は登録されたサーバーの状態を監視し、正常なサーバーにのみトラフィックを送信します。
- 拡張性: ロードバランサ―を用いることでシステムの可用性を柔軟に上げることができます。ラウンドロビンではできなかったサーバの増設後、ロードバランサ―に登録するだけで負荷分散の対象に含まれます。
ロードバランサ―はサーバのヘルスチェックができるため、サーバの冗長化に寄与します。
また一度接続したサーバに再度接続したときも同じ結果を返すことができる点もロードバランサ―の強みです。(パーシステンス)
ロードバランサ―で有名なアプリケーションはNginXです。NginXはウェブブラウザを表示させるアプリケーションでありながら、リバースプロキシとして機能させる用途もあり、使い勝手が豊富です。リバースプロキシの機能を使えば、クライアントのアクセス元IPを変換して次のサーバに認証を通すSNATもできます。
冗長化
概要
冗長化は、システムの可用性と信頼性を向上させるために、複数の機器や経路を用意する技術です。
詳細説明
- デュアルホーミング: 一つのデバイスを複数のネットワークに接続します。
- フェイルオーバー: 1号機が障害発生して機能しなくなった場合に、あらかじめ用意してたバックアップ系統に切り替える機能。
サーバの安定稼働には必須な考えです。
まとめ
ここまでサーバレベルの基本的な内容を記載してきました。
サーバ間の通信にはL2,L3やルータといった機器が用いられ、システムの信頼性を担保する目的で負荷分散したり、サーバの静止が監視されています。クライアントからのアクセスでは物理層から順に連携され、TCPヘッダやHTTPヘッダが読み込まれることで、ブラウザの情報がレスポンスとして返ります。そのサーバのレスポンスが正しく変えるには名前解決が必要だし、WEBサーバが正常であるために冗長化することで負荷を低減させます。
これらの知識を踏まえて次はk8sのコンポーネントでシステム設計がどのように実現されるかを記載していきます。
ではでは。
参照:
https://milestone-of-se.nesuke.com/nw-basic/switching/mac-and-arp-table/
https://www.ruijie.co.jp/blog/advantagesa-of-l3-switches_440308054916595712.html
https://fiberroad.com/ja/resources/tech-notes/understanding-the-differences-between-layer-3-switches-and-routers/
https://www.designet.co.jp/system/oss.php?category=dns&id=2&oss=powerdns
https://www.kagoya.jp/howto/it-glossary/network/loadvalancer/
https://qiita.com/110hideki/items/4abaa4b15aa3ba4d9163
https://qiita.com/toshihirock/items/1de2613bb7c95d486dc1
コメント