マスタリングTCP/IP入門 重要用語について自分の言葉で説明する Part3

# はじめに
ネットワーク知識習得のため、基本に立ち帰り[マスタリングTCP/IP―入門編―(第6版)](https://www.amazon.co.jp/%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0TCP-IP%E2%80%95%E5%85%A5%E9%96%80%E7%B7%A8%E2%80%95-%E7%AC%AC6%E7%89%88-%E4%BA%95%E4%B8%8A-%E7%9B%B4%E4%B9%9F/dp/4274224473)を読むことにしました。
読んだ中で特に重要かなと思ったor興味を持った用語について、本書籍や他サイトの解説、自分の基礎知識と照らし合わせて超短く要約をしていきます。

この記事は[マスタリングTCP/IP入門 重要用語について自分の言葉で説明する Part2](https://qiita.com/Ryku/items/0072407e13a798c597d9)の続きです。

# 7章 ルーティングプロトコル
## EGPとISP
Exterior Gateway Protocol 
Interiror Gateway Protocol
組織の内部的な経路制御規格を定めるのがISP、それらを繋ぐネットワークの経路制御の規格がEGP。

## 距離ベクトル型とリンク状態型
組織内での経路制御（ISP）の決定方針が主に2通りある。
- 距離ベクトル型
    - 送信対象のネットワークにつながる経路のうち、次のルーター間の距離が近い方向にパケットを送信していく方法。
    - この方針の規格で代表的なものとして、RIP、RIP2などがある。
- リンク状態型
    - 送信対象までを含めたネットワーク全体の接続情報を理解して、経路が最短になるようにパケットを送信していく方法。
    - 代表的なものとして、OSPF（Open Shortest Path First）がある。

距離ベクトル型が近い範囲を見ているのに対して、リンク状態型もっと俯瞰的な視点でネットワークを見ているイメージ。

# 8章 アプリケーションプロトコル
# 遠隔ログイン
特定のホストから同一ネットワーク、または外部ネットワークにある別のホストにログインすること。

- TELNET
    - TCPの通信を利用して遠隔ホストにログインする方法。ルーターなどのネットワーク機器の設定をする際などに用いられる。
    - 通信は暗号化されていない。
- SSH
    - 暗号化された遠隔ログインシステム。ファイル転送などにも対応している。

## FTP
File Transfer Protocol
特にSSHで接続しファイル転送を行うプロトコルのことをSFTP（SSH File Transfer Protocol）と呼ぶ。

:::note info
例えば、以下のようなDockerfileを元に、FTPサーバーコンテナを起動して、paramikoなどから接続を試してみるなどすると勉強になるかもしれない。

```Dockerfile
FROM ubuntu:20.04

RUN apt-get update && apt-get install -y vsftpd

COPY vsftpd.conf /etc/vsftpd.conf
COPY start_vsftpd.sh /start_vsftpd.sh

RUN chmod +x /start_vsftpd.sh

EXPOSE 21

CMD ["/start_vsftpd.sh"]
```
:::

## WWW
インターネット上の情報をハイパーテキスト形式で参照できる情報提供システム。動作に以下の定義がある。
- 情報へのアクセス手段
    - URI
- 情報の表現フォーマット
    - HTML
- 情報の転送などの操作
    - HTTP

### HTTP
HTMLや音声、動画の送受信に使用されるプロトコル。TCPのコネクションが確立された上でHTTPでの通信が行われる。クライアントがHTTPサーバー（Webサーバー）に情報を要求し、HTTPサーバーがクライアントに情報を送信する仕組み。

### WebSocket
クライアントとサーバー間の双方向通信プロトコル。HTTPと別物というわけではなく、HTTP通信を行った後に、upgradeリクエスト/レスポンスという動作を行いWebSocket用の通信路を確立する。

### P2P
Peer to Peerプロトコル。Peerは対等な人という意味。1対1での相互通信を行う。
双方向通信ということでWebSocketと近いのかなと思ったが、WebSocketはサーバー:クライアントが1:Nで、P2Pでは1:1での通信というのが大きな違いなのかな。

### クライアントサイドアプリケーション
サーバー側のHTMLなどにコードを埋め込んでおき、それを取得したクライアント側でコードが動く仕組みのものをクライアントサイドアプリケーションという。このコードにはJavaScriptが使用されることが多い。

# 9章 セキュリティ

## ファイアウォール
組織内部のネットワークと外部のネットワークとの接続路に対して施されたセキュリティをファイアウォールと呼ぶ。ファイアウォールにも様々な種類があるが、基本的な考え方は外部の危険に晒すホストやルーターを制限すること。

## 暗号化と階層
暗号化技術もOSI参照モデルの階層ごとに分類することができる。各暗号化技術と階層の対応は以下のようなイメージ。


|階層  |暗号化技術  |
|---|---|
|アプリケーション、プレゼンテーション  |SSH, S/MIME, ...|
|セッション、トランスポート  |SSL/TLS, SOCKS V5 |
|ネットワーク |IPsec |
|データリンク、物理 |PPTP（PPP） |

## 共通鍵暗号方式と公開鍵暗号方式
データの送受信の際に、暗号化を施すことが現代のセキュリティ上、重要とされている。この暗号化と、その復号に共通の鍵（暗号化するための道具みたいなイメージ）を使用するのが共通鍵暗号方式、別々の鍵を使用するのが公開鍵暗号化方式。

これらの暗号化方式は、`ssh-keygen`コマンドを実行することでも実装できる。`-t`オプジョン（おそらく`type of key`の頭文字から）で暗号化方式を選択でき、RSAや、DSA（Degital Signature Algorithm）などが指定できる。デフォルトはRSA。

```sh 
ssh-keygen -t <rsa | dsa>
```

:::note info
公開鍵暗号化方式は現在でも良く使用されています。（githubのSSH接続など）
データを送信して欲しい相手に公開鍵を送り付けて、「これで暗号化して送ってくださいね、復号化の鍵は我々が持っていますので」みたいなイメージ。秘密鍵の方で暗号化して送信して公開鍵で復号化することも可能らしいです。その場合、公開鍵は名前の通りWebで公開したりメールで送付したりすることが多いため、通信を傍受されたときに復号されるリスクは高まるのでは？と思いました。
:::

## VPN
Virtual Private Network
以前は機密情報などを送信する際にはインターネットを使用せずに、専用回線を使用して通信を行っていた。専用回線の構築には多大な費用がかかってしまうため、仮想的に専用回線のようなものを構築できるようにしたものがVPN。

# まとめ
7章〜9章までの内容をまとめました。
本書の内容は以上になりますが、Webアプリケーションを作成する上で基本となるネットワーク知識を知る上でとても役に立つ内容でした。この用語集まとめでは一部用語について簡潔にまとめただけですので、もっと詳しく知りたいとなってくれた方がいれば、購入をおすすめします。