今回は、エンジニアが最低限知っておきたいネットワークの知識について超入門者向けに説明します。
CCNAと呼ばれるシスコが検定として出している分野を参考としています。
CCNAはレベル別の資格となっていますが、今回説明する内容はそれを勉強する前座として、経験ゼロからネットワークに触れる人を想定しています。
本記事ではOSI参照モデル(後で解説します)の物理層からトランスポート層までについて説明します。
ネットワーク
世界のコンピュータをつなげるのが、ネットワークでありサーバやPCをつなげてくれます。
ネットワークでは、ユーザーが使うPCのことをクライアント、常時サービスを提供するのはサーバ、それぞれの通信の間を取り持つ機器をルータ・スイッチ・ハブと呼びます。
そしてこれらをまとめてノードと呼びます。
- クライアント:サーバに対してリクエストを送るコンピュータ
- サーバ:リクエストに対して返答するコンピュータ
- ルータ:異なるネットワークをつなぐ機器
- スイッチ:送りたいノードにデータを送る(フィルタリング機能あり)
- ハブ:宛先以外にもデータが送られる(スイッチの劣化版みたいな感じ)
- ノード:上記全ての機器をまとめた言い方。ネットワークの節点のこと。
LANとWAN
ネットワークは大別してLANとWANに分けられます。
- LAN(Local Area Network):建物内のネットワークであり、自前で作る
- WAN(Wide Area Network):遠いネットワーク同士(LAN同士)をつなげるネットワークであり、NTTなどのキャリアが提供する
無線LANや有線LANなどというように、建物内はLANと呼ばれ、その外側はWANと呼ばれます。WANは下記の二つに分けられます。
- インターネット:ISP(インターネットサービスプロバイダ)が提供する世界ネットワークのこと。TCP/IPという規格が用いられる
- イントラネット:インターネットの技術(TCP/IP)で作った社内ネットワーク
ここで出てくるTCP/IPとは通信の取り決めのようなもので、みんなで統一したルールを作って通信しましょうというものです。
データの通信
データは電気信号によって送られますが、1秒間に送れる情報量のことを帯域幅(bandwidth)といいます。
帯域幅(bandwidth)[bps = bits / seconds] は、1秒間に何bit送れるかを示しています。
帯域幅はメモリ性能の評価などでよく利用される指標であり、現在トレンドのGPU計算などでは帯域幅の高いメモリであるHBM(High Bandwidth Memory)などの技術があります。
通信トラブル
大量のデータで通信に障害が出ることを輻輳(ふくそう)と呼び、データが劣化して伝わることをjitter(ジッタ)と呼びます。
- 輻輳(ふくそう):大量データによりネットが混雑して、問題が起きること
- ジッタ(jitter):予定よりずれて届くことでデータが劣化する。その結果、音や画面の乱れが起こる。
音声やテレビ電話では、遅延をなくすために簡易的な通信が用いられます。その場合にジッタがよく発生します。
OSI参照モデル
様々な業者が関わるため、上手く通信させるための規定が定められています。それがプロトコルです。プロトコルとは一連の手続きを指す単語です。
また、そのプロトコルを通信ケーブルやデータ形状など大まかに分野分けしたのがOSI参照モデルです。
- プロトコル:通信ルール、信号・ケーブルなどの規定を定めたもの
- OSI参照モデル(Open Systems Interconnection):ISOにより定められた、異なる機器間でも通信ができるためのプロトコル
OSI参照モデルは7つの層(レイヤー)で構成されます。
最も低レイヤー1は物理層と呼ばれる電気信号を扱うもので、高レイヤーはアプリケーションを扱います。
レイヤーが上がると抽象度も上がります。
- レイヤー1(物理層):電気信号(ケーブル、電圧、符号化)
- レイヤー2(データリンク):ノード間通信(ノード識別、データ衝突の回避、送るデータの加工)
- レイヤー3(ネットワーク):エンドToエンド(アドレス識別、経路選択)
- レイヤー4(トランスポート):通信の信頼性(TCP/UDP、異常対応)
- レイヤー5(セッション):アプリ間の接続(2者間の接続開始ー終了のルール)
- レイヤー6(プレゼンテーション):ユーザーの触れる情報(文字コード、データ圧縮、暗号化)
- レイヤー7(アプリケーション):アプリ独自の情報(メールサーバ、添付ファイル)
これらをざっくり分けると、レイヤー1が電気信号に関する内容であり、レイヤー2~3がノード間の通信、レイヤー5がコンピュータ間の通信で、レイヤー5~7が送るデータの加工に関する内容です。
コンピュータがルータを介して繋がる流れは下記の様になります。
レイヤー3まではルータでも使用しますが、レイヤー4以上はコンピュータ間の接続に使われます。
ここからはOSI参照モデルで低レイヤーとなる通信に関して説明していきます。
ハブ・スイッチ・ルータ
コンピュータとコンピュータを繋げるために、1対1で光ケーブルをつなげても良いのですが、それでは効率が悪いです。
自分がアクセスしたいサーバ全てにケーブルを繋ぐというのは現実的ではありません。
そこで、コンピュータ同士を効率よく繋げるために、ハブやスイッチ、ルータが用いられます。これらはコンピュータ同士を効率よく繋ぐための機能を備えた機器になります。
全てLANケーブルを差し込み口があり、コンピュータから繋げられるようになっています。違いは下記のとおりです。
- ハブ(リピータハブ):ノード同士を繋げる。宛先以外にもデータが届いてしまうのでセキュリティが低い。
- スイッチ(スイッチングハブ):ノード同士を繋げる。送りたいノードにデータを送れる(フィルタリング機能)
- ルータ(+L3スイッチ):異なるネットワークを繋ぐ。ルータはWANやインターネット向けであり、L3スイッチは企業内のLAN同士を繋げるために使う。
ノードとは、ネットワーク内の節点のことでした。コンピュータを含むネットワークを上手く構成するために、これら全ての機器を使い分ける必要があります。
これらの機器をOSI参照モデルで見てみましょう。
- ハブ(物理層):配線の分岐代わりとなる。接続した全てのノードにデータを送る。弱まった信号を増幅する機能(リピータ機能)がある。
- スイッチ(データリンク層):MACアドレスと呼ばれるコンピュータ固有の番号を認識して、指定のコンピュータにデータを送る(フィルタリング)。MACアドレステーブルを持っており、未登録のアドレスの場合は全部に送って返答を探す(フラッディング)。
- ルータ(ネットワーク層):最短経路を探してデータを送る(ルーティング)。
このように、それぞれ接続する機能を持った機器ですが、大きく異なることがわかります。
ハブが最もPCに身近な存在で、社内の席の下とかにあるでしょう。スイッチはさらに色々な機能がついているのでサーバ構成時によく使われますが、まあ似たようなものです。
ルータは他2つと大きく異なり、LANとWANの境目にあるため、ルータによって世界とつながっていることになります。
外部と繋がるということは便利な半面として危険も潜んでいるため、ルータは社内のLANを外部から守るためにファイアウォールというセキュリティのための機能も備えています。
ケーブル(物理層)
ここからは最も低レイヤーのケーブルに付いて説明します。
主に通信で使われるケーブルは大きく電線と光ファイバの2つに分けられ、電線は安いUTPと高いけど外乱ノイズに強いSTPの2つに分けられます。これらは環境に応じて適したものを選択します。
- UTP(UnShielded Twisted-Pair):普通のケーブル。ねじることでノイズが抑えられる。
- STP(Shielded Twisted-Pair):外乱よけのシールドがあるケーブル。高価。
- 光ケーブル:電気信号を光にして送る。数百メートル以上で使われる。
電線は電気であるため減衰により、長すぎると使えません。一方で光ケーブルは減衰が少ないため、比較的長距離な通信でも問題なく使用できます。
ただし、速度としては電線が速い場合が多いため、一長一短となっています。
これらのケーブルをコンピュータに接続するためには、コンピュータにNICと呼ばれる部品が必要です。
- NIC(Network Interface Card):コンピュータをネットに繋げる部品
イーサネット(データリンク層)
OSI参照モデルでの物理層とデータリンク層の規格として現在使われているのが、イーサネットです。
イーサネットでは、MACアドレスを参考にデータの送り先を指定して送付します。
- MACアドレス:コンピュータのNICやネットワーク機器のポートにつけられた固有番号
イーサネットは、ひとまとまりにしたフレームと呼ばれる単位でデータを送ります。フレームは下記のような情報が含まれます。
- 送り先のMACアドレス
- 送り元のMACアドレス
- 上位レイヤーのプロトコル情報
- データ
- エラーチェック
フレームは最大サイズが決められており、それ以下になるように元のデータを分割します。この最大サイズのことをMTU(Maximum Transmission Unit)と呼びます。
全二重・半二重通信
通信には全二重通信と半二重通信があります。
- 全二重通信:送信・受信を同時に行える。一般的だが、ハブに対応していない。
- 半二重通信:送信と受信を同時に行えない。衝突検知が必要。
全二重はハブに対応していないため、ハブを使う際には注意が必要です。
また、半二重通信の衝突検知では、ランダムに時間を待って再送することで通信にチャレンジします。10回連続でミスったら諦めて通信エラーを返します。
ハブでPCを繋げると衝突による影響範囲が大きくなりますが、衝突で通信が泊まる範囲をコリジョンドメインと呼びます。
IP(ネットワーク層)
IPはOSI参照でいうネットワーク層の通信プロトコルです。IPで使用されるのが、IPアドレスと呼ばれるネットワーク内のノード識別番号です。
- IP:エンドToエンドの通信プロトコル。ベストエフォート型(データを保証しない方式)で、別のレイヤーで信頼性が補われる。
- IPアドレス:ネットワークのアドレス。個々のノードに対して重複しないように与えられる。IPv4とIPv6という採番がある。
IPアドレスは「255.255.255.255」などの4つの1~255までの数値で表されるアドレスです。
IPv4だと足りないので、これよりも長いIPv6が出来ました。しかし、現行のIPv4を使い続けたいという理由からか、IPv4を使い続けるための工夫もなされています。それがグローバルIPアドレスとプライベートIPアドレスです。
グローバルIPアドレスはルータより外側、つまりWANで使用します。一方でプライベートIPアドレスはルータより内側、つまりLANで使用します。
ルータがグローバルIPアドレスとプライベートアドレスを変換してくれる様になっており、LANでどれくらい多数の機器を接続しても、グローバルIPアドレスは一つで済みます。
そのため、プライベートIPアドレスはLAN内で被っていなければ基本的に好きな番号を使用できます。
これにより、世界のコンピュータ全てに対して別々のIPアドレスを割り振っていたのが、各ネットワークで一つしか使わないことになったため、IPv6への移行は遅れています。
デフォルトゲートウェイ
各コンピュータには、NICによりプライベートネットワーク内で固有のIPアドレスが与えられます。
一方で、ルータはネットワークを繋げるため、全てのポートに対してIPアドレスが必要となります。ネットワーク絡みたときの、ルータのポートのアドレスをデフォルトゲートウェイと呼びます。
- デフォルトゲートウェイ:ネットワークをまたぐルータの出入り口なるポートのアドレス。ルータは複数のポートを持つので、ゲートウェイも複数ある。
サーバの初期設定でデフォルトゲートウェイを設定したりしますが、これはサーバが含まれるネットワークの出入り口となるルータを指定することになります。
デフォルトゲートウェイの設定がうまく行ってないと、社内のネットワークは繋がるのにVPNやインターネットなどには繋がらないという問題が発生したりします。
IPアドレスとMACアドレス
IPアドレスはネットワーク固有のアドレスに対して、MACアドレスはマシン固有のアドレスです。
インターネット経由ではIPアドレスで経路を決定してたのに、ネットワーク内ではMACアドレスでマシンを探すため、これらを変換する機能が必要です。
それを行うプロトコルがARPです。
- ARP(Address Resolution Protocol):IPアドレスに紐づくMACアドレスアドレスを調べる。MACアドレスを得て初めてイーサネット通信が可能となる。
ARPでは、MACアドレスとIPアドレスの対応を調べるために、はじめに全ノードに通信を送ります。見つかれば良いですが、見つからない場合はルータをまたいだ他のネットワークまで探しに行くことになります。
IPアドレスの上位ビット(前部分)はネットワーク内で共通の番号が設定されます。そのため、今のネットワークに調べているIPアドレスのマシンがあるかどうかがすぐわかります。その場合はすぐルータのデフォルトゲートウェイに通信が送られることになります。
ベストエフォートの保証
IPという通信はベストエフォートと呼ばれ、「最大限努力はするけど、欠損したら許してね」という通信方法です。しかし、大事な情報が気づかない間に欠損してしまっては困ります。
その場合にエラーや通信状況を確認できるのが、ICMPと呼ばれるプロトコルです。
- ICMP(Internet Control Message Protocol):ベストエフォートなIPを補うための、エラーや監視を行うプロトコル。
例えば、ICMPでは通信状況を確認するためによく使われるpingやtracertが含まれます。
- ping:通信できるかを確認するコマンド。呼びかけてエコーが帰ってくるかを確認する。
- tracert:特定のノードまでの経路を得るコマンド。通過したノードがわかるので、pingよりも詳細な情報が得られる。
TCP/UDP(トランスポート層)
OSI参照モデルのトランスポート層は、コンピュータのポート間の通信を行うレイヤーです。
ポート
ポートとは、コンピュータの通信接続のための端子みたいなものです。
ポートには番号が振られており、アプリケーション毎に被らないようにポート番号を指定して接続する必要があります。
- ポート番号:アプリケーションを特定する番号。1つのコンピュータに複数のポートがあり、それぞれのアプリに固有のポートを有している。
ポート番号は0~65535まであり、大きく3つに分けられます。
- 0~1023:インターネットで予約済み
- 1024~49151:色々なアプリケーションが予約している
- 49512~:誰でも使用可能
TCPとUDP
トランスポート層のメインはTCPとUDPという通信方法です。
IPという通信方法がベストエフォート型(データの品質を保証しない方式)であることは前述しました。それに対して、品質の保証を加えるのがTCPで、そのまま手軽に使うのがUDPです。
- TCP(Transmission Control Protocol):コネクション型(双方が確認しながら進める方式)であり、3wayハンドシェイク(相手から返答が返ってきたのを確認してから通信を始める方式)で通信する。データはセグメントに分けて送られる。
- UDP(User Datagram Protocol):コネクションレス型(全く管理しない方式)であり、ベストエフォート型ともいえる。データグラムと呼ばれるデータ単位に分けて通信する。オーバーヘッド(データ転送の余計な処理時間)がないので高速。
TCPは一般的な通信で、Webを見たりYoutubeを見たりする際に使用されます。きちんと管理されているので、必要な情報を全て渡してくれます。
データをダウンロードする際に欠損していないのも、TCP通信によって実現しています。
TCP通信では、うまく受け取れていないと思ったデータは廃棄して再度要求します。正確なデータが得られる反面、通信コストがかかるという問題があります。
UDPはその逆で、スピード重視のために管理せずにとにかくデータを送りまくる方式です。
UDP通信だと遅延が非常に少なくなるため、ビデオ通話やYoutubeの生配信などで活躍します。
ただし、UDPではデータが破損しても気にしないので、音質や画質が荒れることがあります。そのため、ユーザーが通信負荷を見ながら調整する必要があります。
おわりに
今回はCCNAに基づきながら通信の基本知識について紹介しました。
OSI参照モデルを見ながら各レイヤーについて学ぶことで、通信の理解が深まったと思います。
基本的な知識があれば、これから仕事で何か扱う際にもどのレイヤーの話かを想像できるので、話を聞きながら頭で整理できると思います。
今回は基本的な内容だったので、またいずれもっと難しい内容も書いていきたいと思います。
youtubeもやってます
youtubeでも発信してるのでどうぞ。今回の内容よりもさらに初心者向けの情報を出しているので、少しわかりにくかった場合はこちらから見ていただくとよいでしょう。