ネットワークの自動化【SDNの概要】

CCNAの試験に向けて学習中。
復習に見返せるようにメモしていきます。
ほぼ自分の勉強メモです。
過度な期待はしないでください。


1.SDNの概要と実装
-
#### 1-1.ルータやスイッチの内部構造
ルータやスイッチには、大きく分けて 3つの役割があります。
<font color="red"><b>データプレーン、コントロールプレーン、マネジメントプレーン</b></font>という 3つの役割があります。

##### ■ 1-1-1.データプレーン
データプレーン（データ転送機能）は、<font color="green"><b>ネットワーク機器がデータの転送処理を行う部分</b></font>になります。
受信したデータの宛先をテーブルから検索し、送り先を決定しデータの転送をします。
また、<font color="DeepSkyBlue"><b>データのカプセル化やACLによるフィルタリング</b></font>など、データの転送に
必要な処理もこのデータプレーンで実行されます。


##### ■ 1-1-2.コントロールプレーン
コントロールプレーン（制御機能）は、<font color="DeepSkyBlue"><b>データプレーンを制御する部分</b></font>になります。
データプレーンがデータを転送する際には、転送する為の宛先が不可欠です。
データを転送する為に必要な<font color="green"><b>ルーティングテーブルやMACアドレステーブルなどの
経路情報を作成・制御する</b></font>役割を担います。
また、IPアドレスとMACアドレスをひも付けるためのARPやIPv6のNDP（Neighbor Discovery
 Protocol）もコントロールプレーンの機能です。


##### ■ 1-1-3.マネジメントプレーン
マネジメントプレーン（管理機能）は、<font color="DeepSkyBlue"><b>ネットワーク機器の構成・設定管理する部分</b></font>となります。
データプレーンやコントロールプレーンとは異なり、直接的にデータの転送処理に
関わる事はしません。マネジメントプレーンを操作する事で、<font color="green"><b>設定した内容が
データプレーンやコントロールプレーンに反映</b></font>されます。

TELNET、SSH、SNMPなどの様々な管理用プロトコルにより、ユーザに対する
機器の操作・管理の機能を提供しています。

<br>
#### 1-2.SDNの概要
<font color="red"><b>SDN（Software Defined Network）</b></font>とは、従来はネットワーク機器がそれぞれ行ってきた
<font color="green"><b>ネットワーク制御とデータ転送処理を分離し、制御部分をソフトウェアの操作だけで動的に
設定（変更）する技術</b></font>の仕様の総称です。



SDNでは、<font color="red"><b>SDNコントローラ</b></font>で<font color="green"><b>全てのコントロールプレーンの機能を集中管理・集中制御</b></font>します。
その為、各ネットワーク機器ではデータプレーンの機能のみが動作し、SDNコントローラからの制御に
よってデータ処理を行います。
<img width="550" alt="ファイル名" src="https://i.gyazo.com/bea2bb43caeef1635e1cc84ad3fac0e2.png">

#### 1-3.SDNのアーキテクチャ
SDNのアーキテクチャ（構造）は、3つに分かれています。
<font color="red"><b>インフラストラクチャレイヤ、コントロールレイヤ、アプリケーションレイヤ</b></font>の 3つに分かれます。

下記の図参照
<img width="500" alt="ファイル名" src="https://i.gyazo.com/a5ecdc2596c47a94c05c45bbcbd2ce8b.png">

##### ■ 1-3-1.インフラストラクチャレイヤ
インフラストラクチャレイヤは、<font color="DeepSkyBlue">データの転送を実際に行うネットワーク上に配置された
ルータやスイッチなどの機器が該当する</font>レイヤです。データプレーンの機能を実現します。
コントロールレイヤからの制御により動作し、データの転送の役割を担います。

これらの機器の制御には <font color="red">OpenFlow※1、NETCONF※2、RESTCONF※3、OpFlex※4</font>といった
標準プロトコルや、機器ごとに設定されたAPI（Application Programming Interface）を利用します。
このプロトコルやAPIを纏めて、<font color="red"><b>Southbound API（サウスバウンドAPI）</b></font>または
<font color="red">サウスバウンドインターフェース</font>と呼びます。
コントロールレイヤから見て下に位置する為に、このような呼ばれ方をしています。
>
※1 後程解説
※2 NETCONFは、ネットワーク機器の設定や状態を取得/更新する為の管理用プロトコル
※3 RESTCONFは、RESTを基にネットワーク機器の設定を取得/更新する為の HTTPベースの
　 通信プロトコル
※4 OpFlexは、APICと様々なベンダーの「仮想/物理スイッチ、L4/L7デバイス」のインターフェースと
　 なるプロトコル

また、従来の機器でも使用可能な TELNET、SSH、SNMPといったプロトコルを用いて
SDNコントローラからネットワーク機器を制御する事もある為、これらのプロトコルも
サウスバウンドAPIに含まれます。

##### ■ 1-3-2.コントロールレイヤ
コントロールレイヤは、<font color="DeepSkyBlue">SDNコントローラが該当する</font>レイヤです。
コントロールプレーンの機能を実現します。

インフラストラクチャレイヤのネットワーク機器を制御し、同時に<font color="green"><b>インフラストラクチャレイヤの
各機器のネットワーク機能をアプリケーションレイヤに提供</b></font>します。
アプリケーションレイヤとコントロールレイヤを繋ぎ、やり取りする際のAPIを纏めて
<font color="red"><b>Northbound API（ノースバウンドAPI）</b></font>または、<font color="red">ノースバウンドインターフェース</font>とも
呼ばれます。コントロールレイヤから見て上に位置する為に、このような呼ばれ方をしています。


##### ■ 1-3-3.アプリケーションレイヤ
アプリケーションレイヤは、<font color="DeepSkyBlue">SDNコントローラを操作する各種アプリケーションが該当</font>するレイヤです。
SDNコントローラを操作するアプリケーションは、SDNコントローラとセットになってベンダーから
提供されるものあれば、カスタマイズしたアプリケーションを自作する事も出来ます。
ユーザは、これらのアプリケーションを通じてSDNコントローラを操作します。

##### ■ 1-3-4.API
API（Application Programming Interface）とは、あるコンピュータプログラム（ソフトウェア）の
機能や管理するデータなどを、外部の他のプログラムから呼び出して利用する為の手順や
データ形式などを定めた規約です。

例えば、ルーティング制御するアプリケーションは、APIを使用する事でコントロールレイヤの細かい
プログラム仕様を知らなくても、SDNコントローラに設定や制御、また情報を受け取るといった事が
出来るようになります。

##### ■ 1-3-5.Northbound API
ノースバウンドAPIは、サウスバウンドAPIとは異なり、<font color="DeepSkyBlue"><b>標準的なプロトコルやAPIは存在しません。</b></font>
SDNコントローラを提供する各ベンダーによってAPIが提供されています。
SDNコントローラとSDNコントローラを操作するアプリケーションがインストールされた端末は、
多くの場合ネットワーク上の異なる場所に配置されています。その為、<font color="green"><b>アプリケーションと
SDNコントローラはネットワークを介してデータのやり取りを行う</b></font>為、HTTPやHTTPSと
とても相性が良いので、これらを用いてやり取りを行う場合、<font color="red"><b>REST API</b>※1</font>というAPIが使用されて
います。この場合、ノースバウンドAPIにREST APIが使用されているという事になります。

>
※1 RESTとは、ソフトウェアアーキテクチャ（基本構造）の1つです。
以下の要件を満たすものが「REST」と呼ばれます。
>
|RESTの要素　　　　　|説明　　　|
|:---|:---|
|クライアント/サーバ型|要求を行うクライアントと、要求を処理して応答するサーバで構成|
|ステートレス|処理を行うにあたって前提となる状態を保持しない|
|キャッシュの制御|レスポンスの情報を一定期間保持可能かを指定出来る|
|階層構造|データや処理ごとに階層構造を取り、それぞれ独立している|
|コードオンデマンド|サーバだけでなくクライアント側でも処理実行が出来る|


▶︎ 補足：HTTPやHTTPSととても相性が良いのは、HTTPやHTTPSが以下の特徴である為
⚫️ WEB（HTTP）サーバとブラウザ（クライアント）で構成
⚫️ HTTPは状態（ステート）を管理しない
⚫️ キャッシュの可否をサーバからクライアントに通知出来る
⚫️ URIによってアクセスするリソースを分離する
⚫️ JavaScriptなどで、WEBブラウザ側で処理が出来る

<br>
#### 1-4.OpenFlow
##### ■ 1-4-1.OpenFlowの概要
OpenFlowとは、通信ネットワークを構成する通信機器を一つの制御装置で集中管理し、
複雑な転送制御を行なったり柔軟にネットワーク構成を変更出来る技術です。
つまり、通信ネットワークを構成するスイッチでの、パケットの転送方式をすべてコントローラー側で
決めて、個々のスイッチをパケットの転送に専念させる事で、全体として効率のよいネットワークを
作るという発想である。

業界団体の<font color="DeepSkyBlue">Open NetworkingFoundation（ONF）</font>によって標準仕様の策定が行われています。

OpenFlowは、<font color="green"><b>従来のネットワーク機器では内部にある「コントロールプレーン」と
「データプレーン」を分離</b></font>させています。SDNコントローラである <font color="red"><b>OpenFlowコントローラ</b></font>と、
ネットワーク機器である<font color="red"><b>OpenFlowスイッチ</b></font>で構成され、OpenFlowによってコントローラと
スイッチのやり取りを行います。
OpenFlowは機器とコントローラ間を制御するサウスバウンドAPIに該当します。
<img width="500" alt="ファイル名" src="https://i.gyazo.com/e0229cef766369e9d5de5a13f44397ad.png">

##### ■ 1-4-2.OpenFlowの通信の流れ
OpenFlowコントローラでは、<font color="green"><b>複数のOpenFlowスイッチの設定や動作を一括して管理</b></font>出来ます。
ネットワーク管理者はOpenFlowコントローラ上で、各スイッチの動作を記述した<font color="red"><b>フローテーブル</b></font>を
作成して、OpenFlowコントローラからネットワーク上のOpenFlowスイッチへと<font color="red"><b>OpenFlowプロトコル</b></font>に
よって配送、各スイッチはこれに基づいてデータの転送や破棄、宛先の書き換えなどを実行します。

OpenFlowスイッチは、それぞれは保持しているフローテーブルに従って通信を転送する為、
<font color="red"><b>ホップバイホップ方式</b></font>と呼ばれる通信転送方式となります。
<img width="500" alt="ファイル名" src="https://i.gyazo.com/4aed6b07661404dd12b3425d0afa3ceb.png">

フローテーブルには記述できる情報には、OpenFlowスイッチの物理ポート番号、
送信元・宛先MACアドレス、VLAN ID、MPLSラベル、送信元・宛先IPアドレス、
TCP/UDPポート番号等が記述出来ます。

OpenFlowは、OpenFlowコントローラにより一括でネットワーク内のOpenFlowスイッチを制御し
フローテーブルによる柔軟な通信制御を実現する事が出来ますが、フローテーブルの設定や
維持・管理が難しい事、ネットワーク内の全ての機器がOpenFlowに対応している必要があると
いった課題も抱えています。


##### ■ 1-4-3.OpenDaylight
OpenDaylightは、ベンダーの垣根を超えたOpenFlowコントローラを共同開発をする為の
プラットフォームとして開発されたオープンソースのSDNコントローラです。
OpenDaylightは、OpenFlowコントローラのみならず、様々なサウスバウンドAPIに対応した
凡庸的なコントローラになっており、各ベンダーはOpenDaylightを利用して独自の
SDNコントローラを開発する事が可能です。

Ciscoは、このOpenDaylightコントローラーを基に <font color="red"><b>Cisco Open SDN Controller</b></font>をリリース
しましたが、現在は生産・販売は行っていません。

<br>
## 関連投稿記事
[CiscoのSDNソリューション](https://qiita.com/k-yasuhiro/items/9fe436e4ca70aa8a2fc0)
[ネットワークの自動化](https://qiita.com/k-yasuhiro/items/3995d9fd9d8b087c07bd)