ネットワークエンジニアの基礎知識

# はじめに
新卒1年目でネットワーク寄りのSREエンジニアの部署に配属されました。
しかし、ネットワークの知識に乏しかったので０から勉強しています。
そこで学んだことを随時まとめ、時々見返す&これから学習する人の参考になればと思っています。

# 更新履歴
2021年8月19日：投稿

# 1. OSI参照モデル
OSI参照モデルは通信モデルの1つである。通信モデルとは一連の通信の動作や処理の流れを表したものでこの動作や処理を複数に分割することが複数のプロトコルを組み合わせたものになっている。このように処理を複数に分割することで一部分の変更が全体に影響を与えない仕組みになっている。

・プロトコル（Protocol）: 通信規約と訳される、通信のルールブックみたいなもの

OSI参照モデルは国際標準化機構（ISO）によって定義された。上からアプリケーション層、プレゼンテーション層、セッション層、トランスポート層、ネットワーク層、データリンク層、物理層の７段階構成で構成される。

![osi.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1520017/e673fe6f-6d08-f922-eeeb-e9d7d9a59182.gif)
参照元：https://www.infraexpert.com/study/networking3.html


送信側は上位のレイヤーから下位のレイヤーにデータを受け渡し、渡す際にその層毎のプロトコルが使うデータを付け足す。逆に受信側は下位のレイヤーから上位のレイヤーにデータを受け渡し、その層毎のプロトコルが使うデータを取り除く。
送信側でデータを付け加えていくことを**カプセル化**と言い、カプセル化されてデータを**PDU**と言う。
逆に受信側で付け加えられたデータを取り除くことを**非カプセル化**と言う。

## 1-1. 物理層
物理層の役割は、上位層から受け取ったデータをビット列（0と1）に変換し、伝送する。

## 1-2. データリンク層
データリンク層の役割は、直接接続されているネットワークまでの正確なデータ伝送を行う。
後述するL2スイッチはここに相当する。

## 1-3. ネットワーク層
ネットワーク層の役割は、最終的な目的地を識別し、そこまでの最適な経路を選択する。ネットワーク層より下部の層では途中のネットワーク機器も動作している。
後述するIPはここに相当する。

## 1-4. トランスポート層
トランスポート層の役割は、送信するデータの品質管理を行う。データが壊れていた際の修復機能や再送機能も備わっている。

## 1-5. セッション層
セッション層の役割は、送信先とのデータのやりとりの確立・切断を行い、通信方法を決める役割を担っている。

## 1-6. プレゼンテーション層
プレゼンテーション層の役割は、異なるコンピュータ同士のデータ形式の違いを補正したり、データの暗号化や圧縮・伸張を行っている。

## 1-7. アプリケーション層
アプリケーション層の役割は、ユーザーが利用するアプリケーションに対して、ネットワークサービスを提供する。
例として、ファイルを送信したり、メールを受信したりすること挙げられる。



# 2. TCP/IPモデル
TCP/IPモデルもOSI参照モデル同様に通信モデルの１つである。TCPとIPは個々のプロトコルの名称を指す。
TCP/IPモデルはアプリケーション層、トランスポート層、インターネット層、ネットワークインターフェース層（リンク層）の4つで構成されている。

![tcpip.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1520017/d19d1354-6c1e-de4f-bf12-c7504d788383.gif)
参照元: https://www.infraexpert.com/study/tcpip.html

OSI参照モデルとTCP/IPモデルの各レイヤーの違いは画像の通りである。
例えば、OSI参照モデルのアプリケーション層とプレゼンテーション層とセッション層がTCP/IPモデルにおけるアプリケーション層と対になっている。

## 2-1. ネットワークインターフェース層（リンク層）
ネットワークインターフェース層の役割は、直接接続されたノード間の通信を定義する。
代表的なプロトコルに**Ethernet**が存在する。

この層でカプセル化されたデータは、**フレーム**もしくは**パケット**と呼ぶ。

### 2-1-1. Ethernet
Ethernetは多くの企業が採用しており、事実上の標準になっている。（デファクトスタンダード）
フレームに送信元アドレスと送信先アドレスを入れて通信することができる。
このアドレスには**MACアドレス**という48ビット（1バイト=8ビット）のアドレスが使われている。

Ethernet通信が行われるためのネットワーク機器として、以前は**リピーターハブ**が使われていたが現在は**L2スイッチ**が使われている。

#### 2-1-2. リピーターハブ
リピーターハブは物理層に相当し、複数のポートを保有する。リピーターハブはその名前の通り、リピータとハブの２つの機能を持つ。

リピーター：信号を増幅・整形することで伝送距離を延ばす。
ハブ：送信ホスト以外の全てのポートに送出し、MACアドレスで判断し、処理または破棄する。

しかし、リピーターハブは**コリジョンドメイン**が起こり得る。コリジョンドメインとは、ネットワーク機器の内部で電気信号の衝突が起こり得る範囲のことをいう。

#### 2-1-3. L2スイッチ
L2スイッチはデータリンク層に相当し、リピーターハブ同様に複数のポートを保有する。
L2スイッチは受信データの**送信元MACアドレスを参照し、どのポートから受信したかを学習する**ことができる。その学習したテーブルのことを**MACアドレステーブル**と呼ぶ。また、MACアドレステーブルが一定期間毎に削除され、再度接続することで再度学習される。

基本的にはMACアドレステーブルを参照し、該当するポート先に受信データを送信しますが、該当するポートが無かった場合は受信ポート以外の全てのポートに受信データを送信する。このことを**フラッディング**という。

リピーターハブとは違い、**L2スイッチでは電気信号の衝突は起きないのでコリジョンドメインは分割する**ことができる。しかし、ブロードキャスト通信の場合は全てのポートに送信してしまうため、そのL2スイッチの範囲を**ブロードキャストドメイン**と呼ぶ。

## 2-2. インターネット層
インターネット層の役割は、インターネット間のEnd to End通信を定義する。
この層の代表的なプロトコルに**IP**が存在する。

この層でカプセル化されたデータは、**パケット**と呼ぶ。

### 2-2-1. IP
IPはInternet Protocolの略であり、インターネット上の住所のようなもの、ホスト間のエンドツーエンドを実現する。
IPはインターネット層におけるデファクトスタンダードになっており、IP Version 4（IPv4）とIP Version 6（IPv6）の２種類が存在する。
IPもEthernet同様にパケットに送信元アドレスと送信先アドレスを入れて通信することができる。
そのアドレスを**IPアドレス**という。

#### 2-2-2. IPアドレス
IPアドレスは32ビットの長さを持ち、8ビットずつドットで区切り、10進数表記する。
IPアドレスは**ネットワーク部**と**ホスト部**の2階層からなっている。
また、IPアドレスには**ネットワークアドレス**と**ブロードキャストアドレス**の2つの特別なIPアドレスが存在する。
ネットワークアドレスはネットワーク自体を表すIPアドレスのことで二進数にした時にホスト部が全て0になる。
ブロードキャストアドレスはそのネットワークに所属するすべてのホストに対して通信したい時に使用するアドレスで二進数にした時にホスト部全てが1になる。

そしてIPアドレスには**クラスフル**と**クラスレス**の2つの割り当て方法が存在する。

#### 2-2-3. クラスフル
クラスフルではIPアドレスを以下の表のように5つのグループに分ける。
このようにネットワーク部とホスト部を8ビットずつに分ける方法を**クラスフル**と呼ぶ。

|クラス|IPアドレス|ネットワーク部|ホスト部|
|:---:|:---:|:---:|:---:|
|クラスA|0.0.0.0 ~ 127.255.255.255|8|24| 
|クラスB|128.0.0.0 ~ 191.255.255.255|16|16|
|クラスC|192.0.0.0 ~ 223.255.255.255|24|8|
|クラスD|224.0.0.0 ~ 239.255.255.255|-|-|
|クラスE|240.0.0.0 ~ 255.255.255.255|-|-|

その中でもクラスDはマルチキャスト用、クラスEは実験的な目的で予約されているため実際に使われることはない。


クラスフルの問題点としてこの分け方では無駄が多すぎるという点が挙げれる。
クラスAからCまでを十進数に変換すると、クラスAでは約1600万のホストが所属するグループが128作れ、クラスBでは約65000のホストが所属するグループが約16000作れ、クラスCでは約128のホストが所属するグループを約200万作ることができる。
しかし、この分け方だとクラスAでは多すぎ、クラスCでは少なすぎる。
そこでIPアドレスを効率的に使うために**クラスレス**という分け方が生まれた。

#### 2-2-3. クラスレス
現在はクラスレスの方法が主流となっている。
クラスレスにも3つの分け方が存在する。

1. CIDR（Classless Inter-Domain Routing, サイダー）
複数のネットワークを１つにまとめ、大きなネットワークを作る方法。
イメージとしてはクラスCだと足りないがクラスBだと余り過ぎてしまう場合にクラスCをいくつか統合することで必要な数用意するイメージ。
複数のネットワークのうち、連続した共通部分をまとめ、その部分をネットワーク部とし、残りの部分をホスト部とする。まとめる際は2のべき乗単位でまとめる必要がある。<br>
また、表記する際はネットワーク部とホスト部の境界がわかるように192.168.0.0/22のように**/**で表記し、後ろの数字がネットワーク部を表す。この表記方法を**プレフィックス表記**という。この例だと前半22ビットがネットワーク部となる。

2. FLSM（Fixed Length Subnet Mask, 固定長サブネットマスク）
CIDRとは逆で大きなネットワークから小さいネットワークを作る方法。
ネットワーク部の一部を削って、ホスト部として使う。その増えた部分を**サブネット**と呼ぶ。
FLSMにおいては1つのサブネットに所属するアドレスの数が全て同じになる。
例としては、たくさんの部署が会った際に1番アドレス数が多い部署をベースにすれば全ての部署でその数分だけアドレスが使えるというものです。<br>
また、表記する方法としてプレフィックス表記以外に**サブネットマスク**が存在する。
IPアドレスを二進数で表し、ネットワーク部を表す箇所に1をホスト部を表す箇所には0を並べ、この二進数を十進数に戻し、IPアドレスと併記する。

3. VLSM（Variable Length Subnet Mask, 可変長サブネットマスク）
必要とするIPアドレスの数に合わせて、サブネットの大きさを変える方法。
必要なアドレス数より大きい、2のべき乗が割り当てられるアドレス数である。
現在ではFLSMよりVLSMの方がよく使われている。




## 2-3. トランスポート層
トランスポート層の役割は、OSI参照モデル同様に送信するデータの品質管理を行う。
この層の代表的なプロトコルは以下の２つです。


・**TCP**：Transmission Control Protocolの略
・**UDP**：User Datagram Protocolの略

この層でカプセル化されたデータは、TCPの場合は**セグメント**、UDPの場合は**データグラム**と呼ばれ、総称して**パケット**と呼ぶ。
また、複数のアプリケーションからのパケットを適切に管理するために**ポート番号**が利用されている。

### 2-3-1. TCP
TCPは通信データの品質管理機能を持っている。
コネクション管理、順序制御、再送制御、フロー制御、輻輳制御を行う。
輻輳とはネットワーク機器で処理できないような通信量が発生し、混雑する状況を指す。

コネクションの管理は**3 Way Handshake**により通信前に双方の通信準備を整える。
順序制御は**SeqとArkを使うことで送信したセグメントが正しい順序で受信できるように制御する。**
フロー制御は**Windowによるによる通信効率の最適化**を行う。
Windowとは相手側からのリクエストをまとめて送ることなく、順次処理することである。
輻輳制御は**スロースタート**により徐々に送信するセグメントを増やしていく。

### 2-3-2. UDP
TCPのような品質管理機能を持っていない。
音声通信のような比較的小さなデータの扱うのに適している。


## 2-4. アプリケーション層
アプリケーション層の役割は、OSI参照モデルの第5から7層と同じである。
この層の代表的なプロトコルは以下の３つです。
・HTTP（Hypertext Transfer Protocolの略）：ホームページを見る時に使われるプロトコル
・FTP（File Transfer Protocolの略）：ファイルを転送する際に使われるプロトコル
・SMTP（Simple Mail Transfer Protocolの略）：メールを送受信する際に使われるプロトコル

TCP/IPモデルの場合、この層でカプセル化されたデータを**メッセージ**と呼ぶ。


# 3. ネットワークの仮想化
ネットワーク仮想化とは、ネットワーク回線やネットワーク機器を仮想化すること。もしくは、物理的にではなくソフトウェアの制御により、ネットワークを構築することを指す。

## 3-1. VLAN
VLANとは簡単にいうと仮想的なL2スイッチを指し、現在のEthernet環境では広く使われている。
VLANは本来、異なるL2スイッチ間の通信はできないが1つのL2スイッチの中に複数のL2スイッチを内蔵することでそれを実現する。**内部では異なるL2スイッチに接続されているためブロードキャストドメインを分割する**ことができる。

# 最後に
・もっとわかりやすいように画像とか使いたい

・SREエンジニアとしてネットワーク知識をどこまで踏み込むべきか...<br>　考えていく必要がありそうです。


・今後触れるかも？
→ルーター、L3スイッチ、ARP etc.

今後、新しく学んだことは随時更新していく予定です。