ネットワークを勉強する上での基礎用語について

備忘的に書きます。
SSL化をするにあたって、今までなんとなくやっていたインフラ構築を用語から体系的に理解しなければ、ダメだということに気づいたので、まとめます。

## サブネット

例えるなら、郵便局の役割を果たす。
リクエストに対して、ルーティングに合わせて、リクエストを振り分ける役割。

### サブネットが必要な理由

世界中のネットワークからIPアドレスを探し当てること自体は容易。
ただ、クラスAネットワークでは全てのネットワークなので、接続されているデバイスが非常に多くなる可能性がある。
そうなると当然、適切なデバイスを見つけるまでに時間がかかる場合がある。
だからサブネット化する必要があって、IPアドレスをデバイスの範囲内で使用するために限定化する。

言うなれば、学校の学区制に近いかな。
子供たちがデバイスだとすると、日本全国どこの学校どこに行ってもいいよというルールになると、一つの学校にめちゃくちゃ子供（デバイス）が集まる可能性がある。
ということで、元々子供たちの住所（IPアドレス）を限定化する、つまり学区制を導入することで、スムーズにルーティングできる。

## IPアドレス

各デバイスに割り当てられた一意の番号、IDのようなもの。
例えばAさんからGoogleにアクセスするという場合の処理は「AさんのIPアドレスからGoogleさんのIPアドレスにアクセスするというリクエストがありました」というような処理。
※実際はIPアドレスからAさん、Googleを探し当てるので、厳密には逆

203.0.113.112

というIPアドレスの場合

クラスAネットワーク：203は全てのネットワーク
クラスBネットワーク:「203.0」がネットワーク
クラスCネットワーク：「203.0.113」　最後の112はデバイスを表す

### IPv6とIPv4の違いについて

IPv4はIPの第4版
IPv4ではこのIPアドレスを32ビットのデータとして表現する。
つまりIPv4のアドレス総数は2の32乗個、42億9496万7296個。
ということは最大約43億台のコンピュータがインターネットに直接接続できるということ。

IPv6ではIPアドレスを128ビットのデータとして表現。
アドレス総数は3.4×10の38乗個、つまり約340澗（かん）個となり、事実上無制限ということになる。
特に自宅のネット環境などの場合、IPv6アドレスではMACアドレス（各端末・機器に割り当てられた固有の識別番号）をベースに自動設定されるため、利用者はIPv6アドレスの設計や設定が基本的には不要。

## httpとhttps

HTTP（Hyper Text Transfer Protocol）
HTTPS（Hypertext Transfer Protocol Secure）

「https://」だと通信内容が暗号化される。
HTTP接続だと安全性が不十分。
『HTTPS』とは「HyperText Transfer Protocol Secure」の略称で、インターネット上のHTTP (HyperText Transfer Protocol)通信が、SSLによって暗号化されたプロトコル

## SSL

SSL（Secure Sockets Layer）とは、インターネット上におけるウェブブラウザとウェブサーバ間でのデータの通信を暗号化し、送受信させる仕組みのこと。
ということで、HTTP通信を暗号化させるための仕組みがSSLということになる。

### TLS

SSL1.0で脆弱性が発見された。
SSLはバージョン3.0までが開発されましたが、1999年にはSSL3.0を元にした「TLS（Transport Layer Security）1.0」が定められ、現在は「TLS1.3」までリリースされている。

なので、基本的にはバージョンの違いなので、SSLとTSLは同義と捉えてOK

## VPC(Amazon Virtual Private Cloud)

アマゾンがAWS上で提供している機能の1つで、AWSアカウント内に構築できる仮想ネットワーク。

つまりEC2のインスタンスもVPCの中に構築することになる。
大元の空間。
なので、インフラ的にはまずこのVPCにアクセスすることになる。

## CIDR

「Classless Inter-Domain Routing」の略で、サイダーと読みます。
使用可能なIPアドレスの範囲をこのCIDR形式で指定する。
上述のIPアドレスの範囲をサブネット化することで指定すると説明したが、その時に使われるのがこのサイダーという形式。

## アベイラビリティーゾーン(AWS)

アベイラビリティゾーンとは、AWSの各リージョンに存在するデータセンター。
各リージョンには複数のアベイラビリティゾーンが存在しており、それぞれにAmazon EC2などを配置することで、地理冗長化を簡単に行うことができる。

### リージョン

地理的に近い「ゾーン」をグループ化したもの。
確かAWSでは大阪と東京が同じリージョンに属している。
ということは大阪や東京がゾーンで、それをグループ化したものがリージョンということになる。

### 冗長化

冗長化とは、ハードウェアやシステム構成などの予備を配置・運用して、二重化（多重化）すること。
つまりアベイラビリティゾーンの説明で言うと、各リージョンに複数のデータセンターが存在するので、仮にVPCに1つのEC2を配置したとしてもそれを管理するデータセンターは複数存在するよ、と言うこと。
当然これのメリットはリスクヘッジですね。

## インターネットゲートウェイ

インターネットゲートウェイは、VPC とインターネットとの間の通信を可能にする VPC コンポーネント。
（コンポーネントは構成する要素と言う意味）

インターネットゲートウェイは 2つの役割がある。
1つは、インターネットでルーティング可能なトラフィックの送信先を VPC のルートテーブルに追加すること。
つまり、リクエストが来た時にまずインターネットゲートウェイに通信が入って、それをVPCのどのルートテーブルにルーティングするのかと言うことを設定できる。

もう1つは、パブリック IPv4 アドレスが割り当てられているインスタンスに対してネットワークアドレス変換 (NAT) を行うこと。
NATとはLANに接続された端末からインターネットに接続する際に、「プライベートIPアドレス」を自動的に外部ネットワークで使用できる「グローバルIPアドレス」に変換する機能。

## ルートテーブル

ネットワークの経路を設定するコンポーネントです。
サブネット内の通信がどの宛先のネットワークに対して、どのコンポーネント（IGWとかEC2とか）に転送されて欲しいかを設定する。
一つのサブネットに一つのルートテーブルを用意できるが、指定がない場合はVPC作成時に自動生成されるメインルートテーブルがサブネットに割り当てられる。

### ターゲット

経路というからには当然、どこからどこへ転送するのかを設定する必要がある。
上述の通り、ルートテーブルで設定するのは「どこへ転送するか」ということ。
「どこから」という点を設定しなければいけないが、それが、ターゲットということ。

つまりここで、設定するのはインターネットゲートウェイを設定する必要がある。

## セキュリティグループ

セキュリティグループは、インスタンスの仮想ファイアウォールとして機能し、インバウンドトラフィックとアウトバウンドトラフィックをコントロールします。

これはAWSの文章をそのまんま持ってきましたが、ちょっと意味不明。

### ファイアウォール

ファイアウォールは、ネットワークの通信において、その通信をさせるかどうかを判断し許可するまたは拒否する仕組み。
その名の通り、税関のような役割ですね。

ということはセキュリティグループは、通信に対して、許可するか拒否するかの設定をするということですね。
ここでいう通信というのはHTTPやHTTPS通信のことです。
なので、セキュリティグループでHTTPS通信を許可する設定がされていないと、通信できないということですね。

### インバウンドルールとアウトバウンドルールについて

そのままの意味ですが、インバウンドルールは来た通信に対して許可をするかどうか。
アウトバウンドルールは応答に対して許可をするかどうか。
デフォルトでインバウンドルールは全て拒否、アウトバウンドルールは全て許可になってるみたいです。

## SSH

SSHとは「Secure Shell」の略で、ネットワークに接続された機器を遠隔操作し、管理するための手段
サーバーにアクセスする場合にSSHで接続して、操作をする。
要するにLinuxの仮想サーバーに接続する際にSSHプロトコルで接続する。
そして、その時のポート番号は22。

```
基本書式
ssh [オプション]ホスト名[コマンド]
```

### SSHソフトウェア
SSHプロトコルで通信するためにクライアント端末に準備する。

## TCP

TCP (Transmission Control Protocol) は、IPと同様にインターネットにおいて標準的に利用されている
プロトコル
難しく聞こえますが、IPアドレスのところで説明した通り、インターネット利用においてはIPアドレスをもとにHTTP通信やHTTPS通信を利用してリクエストがされますが、IPアドレスとHTTP通信を橋渡ししてくれる仕組みがTCP。

## ポート番号

ポート番号とは、コンピュータが通信を行うために通信先のアプリケーションを特定するための番号のこと
コンピュータ間の通信で通信する宛先のIPアドレスが分かれば、そのIPアドレスにデータを送信できる
しかしそのデータを受信したコンピュータが、どのアプリケーションでそれを受信するのか判断するために必要

ポート番号をもとに判断をする

### 一般的なポート番号と危険なポート番号

例えばよく使うポート番号として
80：HTTP通信
22：SSH
443：HTTPS
995：POP3s
などがある
その他ポート番号については下記
https://onoredekaiketsu.com/basic-port-number-list-and-dangerous-ports/
全てのポート番号
https://ja.wikipedia.org/wiki/TCP%E3%82%84UDP%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%9D%E3%83%BC%E3%83%88%E7%95%AA%E5%8F%B7%E3%81%AE%E4%B8%80%E8%A6%A7

## EC2

Amazon Elastic Compute Cloud (Amazon EC2) は、Amazon Web Services (AWS) クラウドでスケーラブルなコンピューティングキャパシティーを提供します。Amazon EC2 の使用により、ハードウェアに事前投資する必要がなくなり、アプリケーションをより速く開発およびデプロイできます。Amazon EC2 を使用すると、多少を問わず、必要なだけの仮想サーバーを起動できます。

これだけ見るとめちゃくちゃ難しいですが、サーバーというのは実はPCそのものなんです。
さっきのIPアドレスのところでも説明しましたが、インターネット通信でアクセスしたとしても、アクセス先は結局デバイスなわけです。
で、サーバーというは物理サーバーと仮想サーバーがあり、AWSのEC2では仮想サーバーを構築するための、サービスです。

当然処理スピードはデバイスのスペックによって変わってくるので、EC2ではいろんなスペックのサーバーを構築することができます。

## Elastic IP

Elastic IP アドレスは、動的なクラウドコンピューティングのために設計された静的 IPv4 アドレスです。

つまりはIPアドレスと同義ですね。

クライアント側のIPアドレスとElastic IPの間で様々な通信が行われているわけですね。

## ロードバランサー

サーバーにかかる負荷を、平等に振り分けるための装置のこと
この仕組みにより、Webサイトへのアクセス集中やサーバー故障などの場合でも、アクセス中の利用者に安定したサービス提供を継続可能になる
インターネットと各種サーバーの間にロードバランサーを配置

### ELB(Elastic Load Balancing)

アプリケーションへのトラフィックを複数のターゲット (Amazon EC2 インスタンス、コンテナ、IP アドレス、Lambda 関数、仮想アプライアンスなど) に自動的に分散します。
複数のターゲット、というので、下記のバランサーの総称がELBということになります。

### ALB(Application Load Balancer)

### Network Load Balancer

### Gateway Load Balancer

### Classic Load Balancer

## リスナー

リスナーとは、設定したプロトコルとポートを使用して接続リクエストをチェックするプロセスです。リスナーに対して定義したルールにより、ロードバランサーが登録済みターゲットにリクエストをルーティングする方法が決まります。

となってます。
つまり、ロードバランサーを設定する時にはリスナーも設定して、リスナーで定義したポートと通信方法によってどのバランサーに振り分けるのか、という設定をします。

## エイリアス

ざっくりいうとあだ名のことです。
エイリアスを有効にすることで、例えばログイン時にIDが必要だったものが、エイリアスを入力することでログインできるようになります。

## Nginx

「Nginx」とは、Webサーバーの一種
本来WEBサーバーは3つの役割があります。

- 静的なコンテンツをレスポンスとしてクライアントに返す処理
- 動的なコンテンツ生成をアプリケーション本体に依頼する処理
- アプリケーションサーバから返ってくる処理結果をレスポンスとしてクライアントに返す処理

で、Nginxはユーザーのリクエストに対して静的コンテンツのみ取り出し処理を行い、動的コンテンツの生成はアプリケーションサーバに依頼する役割をはたしています。
なので、ロードバランサーで振り分けられたリクエストはNginxを通して、各WEBサーバーへの処理になります。

## Apache
Webサーバーソフトウェア
CMS(Contents Management System)を利用する際に、比較的簡単な設定で済む