[CCNA ICND1] 03. TCP/IP

# 1. TCP/IP プロトコルスタック

TCP/IPはインターネットの標準プロトコル。

## 1.1. TCP/IP プロトコルスタック

TCPとIPを中心とするプロトコルの集合。

![03.1. TCP:IPプロトコルスタック.png](https://qiita-image-store.s3.amazonaws.com/0/122648/75521efa-5c7c-fcb7-a52c-d53bbfe6b128.png)


|階層|役割|
|:---:|:---|
|アプリケーション層|アプリケーションの機能を実現|
|トランスポート層|通信信頼性を提供|
|インターネット層|最適経路の決定及び`End-to-end`通信を提供|
|リンク層|隣接のノードとの通信|

## 1.2. TCP/IPのカプセル化と非カプセル化

TCP/IPは階層構造で構成されている。

送信側で作成されたデータは、階層のヘッダを付加して伝送される。

![03.2. カプセル化.png](https://qiita-image-store.s3.amazonaws.com/0/122648/ebddf69d-d0b2-3df1-e989-7e691fbc44b2.png)

 
 
---
 
 
# 2. インターネット層

インターネット層は、パケットの伝送経路の決定及びアドレッシング方法などを規定。

中心となるプロトコルにはIP、ARP、ICMPがある。

## 2.1. IP

1. コネクションレス型

2. ベストエフォート型

3. データの回復機能なし

4. 階層がたアドレッシング

5. IPv4とIPv6 

## 2.2. IPv4ヘッダ

ヘッダに含まれている情報は多い。

重要なことだけ説明。

|名前|説明|
|:---:|:---|
|バージョン|IPv4 / IPv6|
|ヘッダ長|ー|
|ToS|QoSを行う|
|識別子|フラグメンテーションの時、復元に使われる|
|フラグ|フラグメンテーションの制御(可能、不可)|
|TTL|パケットが通過できるルータの数|
|プロトコル|ICMP / TCP / UDP|
|チョックサム|ヘッダのエラーチェック|
|宛先・送信元アドレス|ー|


```
* ToS：Type of Service
* QoS：Quality of Service
* TTL：Time To Live
```

```
QoSはリアルタイム性が要求される通信で必要な技術。
輻輳や遅延から守るための仕組みを意味する。
```

## 2.3. ARP(Address Resolution Protocol)

IPアドレスからMACアドレスを取得するためのプロトコル。

### 2.3.1. ARPの動作

1. ARPテーブル参照

2. ARPリクエスト送信

3. ARPリプライ送信

4. ARPテーブル更新

![03.3. ARPフロー.png](https://qiita-image-store.s3.amazonaws.com/0/122648/368c3fc2-2ce6-4a00-c5be-5dc76691f4e2.png)


### 2.3.2. 別ネットワークの相手と通信する場合のARP

ルータはブロードキャストを他のネットワークへ転送しないため、ルータの先にある別のネットワークの宛先ホストのMACアドレスを取得できない。

![03.4. 別のネットワークのARP.png](https://qiita-image-store.s3.amazonaws.com/0/122648/caed870c-7e1f-fb3b-d2c5-e6bcc538ec81.png)


### 2.3.3. ARPテーブルの表示

* window : arp -a

* cisco : show ip arp

## 2.4. ICMP(Internet Control Message Protocol)

IPプロトコルのエラー通知や制御メッセージを転送するためのプロトコル。

### 2.4.1. エラー通知

|コード|タイプ|
|:---:|:---|
|3|Destination Unreachable|
|5|Redirect|
|11|Time Exceeded|

### 2.4.2. 問い合わせ(Query)

|コード|タイプ|
|:---:|:---|
|0|Echo Reply|
|8|Echo Request|

### 2.4.3. ping

pingは、特定のノードトIP通信できるかどうかを確認するためのコマンド。

ICMPでは、エコー要求(Type 8)とエコー応答(Type 0)を利用して行う。

### 2.4.4. traceroute

tracerouteは、送信元から宛先までの経路情報を取得するためのコマンド。

IPヘッダ内のTTL値を利用して経路情報を取得する。

windowでは`traceroute`、ciscoでは`tracert`コマンドで実施。

---
 
 
# 3. トランスポート層

## 3.1. トランスポート層の機能

トランスポート層の役割はアプリケーションに対して信頼性のある通信を提供すること。

トランスポート層の基本サービスとしてセッションの多重化がある。

セッション多重化を1つのIPアドレスを持つコンピュータで複数のアプリケーションを同時に使用できるようにする機能を意味する。

## 3.2. TCP(Transmission Control Protocol)

### 3.2.1. コネクション型

データの送信する前に通信相手とのコネクションを確立する。

### 3.2.2. セグメンテーション

TCPはアプリケーション層からデータを受け取ると、ネットワーク層のMTUに適したサイズに分割しTCPセグメントを生成する。

### 3.2.3. TCPヘッダ

#### 3.2.3.1. ヘッダ
|名前|説明|
|:---:|:---|
|送信元・宛先ポート|ー|
|シーケンス番号|分割されたデータ部の位置を表す。|
|確認応答番号|受信通知、データのシーケンス番号通知|
|制御ビット|3.2.3.2を参考|
|ウィンドウ|受信可能なバッファのサイズ|
|チェックサム|エラーチェック|


#### 3.2.3.2. 制御ビット

|フラグ|意味|
|:---:|:---|
|URG|緊急処理が必要なデータが含まれている。|
|ACK|確認応答番号が有効なのを表す。|
|PSH|データをアプリケーションに渡す。|
|RST|コネクションの強制的な切断を要求する。|
|SYN|コネクションの確立を要求する。|
|FIN|データの受信完了、コネクションの終了を要求する。|

### 3.2.4. コネクションの確立と終了

#### 3.2.4.1. コネクションの確立

3ウェイハンドシェイク

1. ホストA > ホストB：SYN

2. ホストB > ホストA：SYN & ACK

3. ホストA > ホストB：ACK

### 3.2.4.2. コネクションの終了

4回会話

1. ホストA > ホストB：ACK & FIN

2. ホストB > ホストA：ACK

3. ホストB > ホストA：ACK & FIN

4. ホストA > ホストB：ACK

### 3.2.5. 順序制御

3ウェイハンドシェイクでコネクションが確立されると、データ転送の段階になる。

1つのTCPセグメントで運ぶことができるデータの量のことを`MSS(Maximum Segment Size)`という。

![03.5. MSS.png](https://qiita-image-store.s3.amazonaws.com/0/122648/7acff714-24a3-3651-9565-4de0880ec1df.png)


TCPはアプリケーションから大きなデータを受け取ると、MSSに分割し、複数のTCPセグメントとして送信する。

受信側でシーケンス番号を使って正しい順に再構成する。

この処理を`順序制御`という。

### 3.2.6. 再送制御

ネットワーク状態によっては、ある1つのセグメントだけが届かなかったり、壊れていたりすることがある。

TCPではその問題を回避するために`再送タイマー`を設定して確認応答が来ない場合には再送信する。

これを`再送制御`という。

### 3.2.7. ウィンドウ制御(フロー制御)

TCPヘッダには、ウィンドウというフィールドがある。

ウィンドウは、受信したデータを一時的に溜めてバッファ領域のことで、この大きさをウィンドウサイズという。

ウィンドウサイズはコネクションを確立するときの`SYNセグメント`で相手に通知している。

送信側は受信側の確認応答を待たずにTCPセグメントを連続して送信することができ、`ACK`が1つでも送られてきたら次のデータを送信できる。

この機能をウィンドウ`制御(フロー制御)`という。

```
* TCPではスライディングウィンドウという制御方式を使っている。
```

## 3.3. UDP(User Datagram Protocol)

### 3.3.1. コネクションレス型

UDPには、TCPのようなコネクションの確立、確認応答、シーケンス番号を使った順序制御やフロー制御などの機能はない。

UDPはポート番号でアプリケーションを識別してデータを渡すだけのプロトコル。

TCPではデータの単位を`セグメント`というが、UDPでは`データグラム`という。

### 3.3.2. UDPの用途

コネクション確立するときにはオーバーヘッドが大きくなる。

それでリアルタイムでの通信や高速性が要求される場面にはあまり向いていない。

そのような場合には効率の良いUDPを利用する。

## 3.4. TCPとUDPの比較

||TCP|UDP|
|:---|:---|:---|
|タイプ|コネクション型|コネクションレス型|
|信頼性|有|無|
|シーケンス|有|無|
|オーバーヘッド|大きい|小さい|

---
 
 
# 4. アプリケーション層プロトコル

TCP/IPアプリケーション層はOSI山椒愛でるの第5〜7層に相当。

## 4.1. DHCP[67、68/UDP]

```
* DHCP：Dynamic Host Configuration Protocol
```

### 4.1.1. 概要

TCP/IP通信に必要なIPアドレスなどの設定情報を自動的に取得するためのプロトコル。

DHCPはUDPの上で動作し、ポート番号には`67(サーバ用)`と`68(クライアント用)`を使用する。

```
* DHCPサーバ：設定情報の管理及びクライアントに情報を配信
* DHCPクライアント：IPアドエスなどの設定情報をサーバに要求
```

### 4.1.2. DHCPクライアント

一般的なコンピュータのOSには、DHCPクライアントとして動作するためのプロゴラムが標準搭載されている。

それで起動時、ケーブルの接続時に自動的にTCP/IP通信に必要な設定情報を取得する。

### 4.1.3. DHCPサーバ

DHCPサーバには、DHCPクライアントに割り当てるための各州の情報を設定する。

クライアントに配布するIPアドレスの範囲は、アドレスプールとして定義しておく。

```
DHCPサーバが配布する情報

1. IPアドレス
2. サブネットマスク
3. リースの有効期限
4. デフォルトゲートウェイ
5. ドメイン名
6. DNSサーバのIPアドレス
7. NTPサーバのIPアドレスなど
```

### 4.1.4. DHCPの仕組み

DHCPサーバとDHCPクライアントが同じサブネット上に接続されている場合、クライアントがサーバの設定情報を取得するときにやり取りされるメッセージがある。

|メッセージ名|送信者|種類|説明|
|:---|:---|:---|:---|
|DHCP DISCOVER|クライアント|Broadcast|DHCPサーバの検索|
|DHCP OFFER|サーバ|Unicast|DISCOVERの応答、情報の通知|
|DHCP REQUEST|クライアント|Broadcast|通知された情報の取得のための要求|
|DHCP ACK|サーバ|Unicast|情報の提供|

### 4.1.5. 補足

DHCP DISCOVERはブロードキャストで送信されるため、ルータを超えて転送されない。

DHCPサーバがブロードキャストドメインに存在しない時は`DHCPリレーエージェント`の設定が必要。

## 4.2. DNS[53/UDP、TCP]

```
* DNS：Domain Name Server
```

### 4.2.1. 概要

人間にとって理解しやすいホスト名(ドメイン名)からIPアドレスを検索する仕組み。

ホスト名とIPアドレスの対応付けを行うことを`名前解決`という。

### 4.2.2. 名前解決の仕組み

![03.6. 名前解決.jpg](https://qiita-image-store.s3.amazonaws.com/0/122648/0157ffc6-d542-2dbb-5335-f4032077e048.jpeg)


### 4.2.3. 別：hostsファイルによる名前解決

hosts(拡張子なし)というファイルにIPアドレスとドメイン名を1行で記述しておくだけで、DNSよりも優先的な参照が行われる。

```
例) 198.133.219.25 cisco.com

* windows8では「C:/Windows/System32/drivers/etc/hosts」にhostsファイルがある。
```

## 4.3. HTTP[80/TCP]、HTTPS[443/TCP]

```
* HTTP：Hyper Text Transfer Protocol
* HTTPS：Hyper Text Transfer Protocol Secure
```

### 4.3.1. 概要

ウェブバラウザとウェブサーバの間でデータをやりとりするためのプロトコル。

HTTPで転送されるウェブページは、HTML(Hyper Text Markup Language)言語に技術された`Hyper Text`。

### 4.3.2. ウェブアクセスの流れ

1. ユーザがURLを通じてウェブアクセス開始
2. ブラウザは、サーバに必要なデータを`HTTPリクエスト`で要求
3. サーバはリクエストの処理＆返信
4. ブラウザは、受け取ったデータを処理してブラウザの画面上に表す

### 4.3.3. HTTPリクエストの主なメッセージ

|Msg.|意味|
|:---|:---|
|GET|データの要求|
|HEAD|データに関する情報要求|
|POST|サーバにデータ送信|
|PUT|サーバにファイルをアップロード|
|DELETE|サーバにデータの削除要求|

### 4.3.4. HTTPレスポンスの主なメッセージ

|コード|意味|
|:---|:---|
|100番台|続きの情報がある|
|200番台|成功|
|300番台|リダイレクト|
|400番台|クライアントエラー|
|500番台|サーバエラー|

### 4.3.5 HTTPS

HTTPにSSLに夜データの暗号化機能を付加したプロトコル。

## 4.4. FTP[20、21/TCP]、TFTP[69/UDP]

```
* FTP：File Transfer Protocol
* TFTP：Trivial File Transfer Protocol
```

### 4.4.1. FTP

特定のコンピュータ間でファイル転送を行うためのプロトコル。

TCP上で動作し、信頼性のあるファイル転送を実現する。

FTPでは2つのコネクションを使用して通信を行う。

1. データ転送用コネクション[20]

2. 制御用コネクション [21]

FTPでは、FTP通信の最初にIDとパスワードを使って相手を人すきする認証プロセスが必要であり、通信にはデータ用と制御用のコネクションを確立する。

#### 4.4.1.1. FTPの2つのモード

FTP通信には「アクティブモード」と「パッシブモード」の2つのタイプがある。

```
* アクティブモード：サーバ側からコネクション要求
* パッシブモード：クライアント側からコネクション要求
* 制御用のコネクションは、どちらのモードでもクライアント側から要求
```

#### 4.4.1.2. 2つのモードの理由

企業内の情報が企業外部に流出することを防ぐためには一般的にファイアウォールがある。

アクティブモードの場合、サーバからのデータ転送はファイアウォールによって防ぐことができる。

パッシブモードの場合は通信できるようになる。

### 4.4.2. TFTP

UDP上で動作する。

信頼性を提供するためのコネクションの確立や認証を行わず、効率の良いファイル転送を実現するが、データを受け取るとTFTP地震で確認応答を返す機能は持っている。

## 4.5. SMTP[25/TCP]、POP3[110/TCP]

SMTPとPOP3は電子メールのやり取りのためのプロトコル。

```
* SMTP：Simple Mail Transfer Protocol
* POP3：Post Office Protocol version3
```

## 4.6. Telnet[23/TCP]、SSH[22/TCP]

TelnetとSSHは離れた場所にあるルータやサーバを遠隔操作するためのプロトコル。

```
* SSH：Secure SHell
```