TCP/IPを使ったネットワーク

TCP/IPは一つのプロトコルではない。
２つのプロトコルが合わさったものだ。
TCPは正しくデータが送られたことを保証する仕組み
IPは複数のネットワークを繋いで、その上をパケットが流れる仕組み
このTCP/IPを企業内LANなどに転生したネットワークのことを```イントラネット```と言う。

# TCP/IPの中核プロトコル
TCP/IPネットワークを構成する上で中核となるプロトコル
## IP(Internet Protocol)
### コネクションレス型の通信
```事前に送信相手に接続確認をとることなく一方的```にパケットを送りつける。
```通信品質の保証```についてはTCPやUDPなどの上位層に任せる。

IPアドレスと言う番号を割り当てて管理する。
それを基にネットワークからネットワークへとパケットを運んで相手に送り届ける。

## TCP(Transmission Control Protocol)
### コネクション型のプロトコル
通信相手とのコネクションを確立してから、データの送受信を行う。
パケットの順序や送信エラー時の再送などを制御して、送受信するデータの信頼性を保証する

なかなか送信先から再送されない場合待っている時間が勿体無いのでとりあえず```連続でデータをパケットを送る```。

### 気づき
#### データの信頼性とは?
信頼性があったのでこれを載せる。
一定の条件下で安定して期待された役割を果たすことができる能力。
出典 https://e-words.jp/w/%E4%BF%A1%E9%A0%BC%E6%80%A7.html

役割を果たすか。
送信する役割を果たすか。確かに送信先が再送信しているから。
送信されていることを確かめることができる。

### UDP(User Dategram Protocol)
#### コネクションレス型
```事前に送信相手に接続確認をとることなく一方的```にパケットを送りつける。
パケットの再送制御は一切しない。
しかし再送制御をしない分```高速```。

信頼性よりもリアルタイム性を重視する用途には適している。

#### 気づき　UDPとIPの違いはなんだろう？

# IPアドレスはネットワークの住所
TCP/IPのネットワークに繋がれているコンピュータやネットワーク機器は、```IPアドレス```で管理されている。
## 特徴
* 重複は無く、一意の番号
* ３２ビットの数値で表され、それを８ビットずつ区切り１０進数で表現する。

# グローバルIPアドレスとプライベートIPアドレス
IPアドレスには２種類ある。
### グローバルIPアドレス(またはグローバルアドレス)
* インターネット世界で使用するIPアドレス
* ```世界中で一意```
* NIC（Network Information Center)と言う非営利機関で一意性を保証するため管理されている。

### プライベートIPアドレス(またはプライベートアドレス)
* 企業内などLANの中で使えるIPアドレス
* ```LAN内で一意```であれば良い。
* 自由に割り当てできる。

## 気づき
* プライベートIPアドレスはグローバルIPアドレスよりも簡単に割り当てができそうだ。
* 範囲が限定されているんだな。

# IPアドレスは「ネットワーク部」と「ホスト部」でできている。
IPアドレスは２つ要素から成り立っている。
* ネットワークごとに分かれる```ネットワークアドレス部```
* そのネットワーク内でコンピュータを識別する```ホストアドレス部```

例
p３７４のIPアドレスの最後の８びっとがホストアドレス部になる。
これでコンピュータを識別するコンピュータを識別する

## 自分のIPアドレスを探してみよう。
多分MACの場合
```リンゴマーク⇨システム環境設定⇨Wi-Fiの詳細⇨TCP/IP```
で確認できる。

### IPv４アドレスとは?
IPv4アドレスとは、インターネットなどで用いられるIP（Internet Protocol）の```バージョン4（IPv4）における機器の識別番号（アドレス）```。32ビットの値で、```約42億台の機器を識別することができる```。現在インターネットで最も一般的に用いられている。
出典 https://e-words.jp/w/IPv4%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9.html

### IPv6アドレスとは？
IPv6アドレスとは、インターネットなどで用いられるIP（Internet Protocl）の```バージョン6（IPv6）における機器の識別番号（アドレス）```。128ビットの値で、```約340澗（1000京の3400京倍）台の機器を識別することができる```。
出典 https://e-words.jp/w/IPv6%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9.html

# IPアドレスのクラス
使用するネットワークの規模によってクラスが分けられる。
### クラスA
* ネットワーク部は８ビット、ホストアドレス部は２４ビット
* 割り当て可能なホスト数は16,777,214台

### クラスB
* ネットワーク部は１６ビット、ホストアドレス部は１６ビット
* 割り当て可能なホスト数は65,634台

### クラスC
* ネットワーク部は24ビット、ホストアドレス部は８ビット
* 割り当て可能なホスト数は２５４台

## 注意
ホストアドレス部が全て０、全て１となるアドレスは、それぞれ```「ネットワークアドレス（全て０）」、「ブロードキャストアドレス（全て１）」と言う意味で予約され割り当てられない```。

## クラスレス
ネットワーク部を固定長とせずに、クラスに依存せずに```サブネットマスクによって長さを識別する方式```。CIDR（Classless Inter-Domain Routing)とも言う。各組織に割り当てるグローバルIPアドレスを```最低限にでき、アドレス不足に対応```できる。

### ネットワークアドレスとは?
ネットワークアドレスは、ホスト部の2進数のビットが全て 0 のアドレスです。ネットワークアドレスは ```ネットワーク自体を指すアドレス```として使用されます。
出典　https://www.infraexpert.com/study/ip4.html

### ブロードキャストアドレスとは？
ブロードキャストアドレスはホスト部のビットが全て 1 のアドレスです。ブロードキャストアドレスは
```あるセグメントに接続されている全てのホストにパケットを送信するためのアドレス```として使用されます。
出典 https://www.infraexpert.com/study/ip4.html

### ループバックアドレスとは？
ループバックアドレスですが、ネットワークアドレスとしても使用禁止とされているネットワークの127.0.0.0/8のネットワークで、127.0.0.1のアドレスのことをループバックアドレスと呼んでいます。
ループバックアドレスは、```自分自身を示す仮想的なIPアドレス```です。例えば、パソコン上のコマンドプロンプトで ```ping 127.0.0.1 と実行し応答があれば、TCP/IPが正常に動作している```事を意味します。

#### 気づき
またループバックアドレスを勉強する機会があれば勉強しよう。
ネットワークアドレスとブロードキャストアドレスの意味を知ることができてよかった。

# ブロードキャスト
```同一のネットワーク内の全てのホストに対して、一切の同じデータを送信```すること。
同一ネットワークなので```第三層のネットワーク間を中継するルータを超えて流れません```。

特定の一台のみを送信することを```ユニキャスト```と言う。
不特定多数ではなく決められた範囲内の複数キャストに送信する場合は```マルチキャスト```と言う。

## 気づき
ブロードキャストとは同じネットワーク上のコンピュータなどに送信することなのか。

# サブネットマスクでネットワークを分割する
一番最小のIPアドレスのクラスCでも２５６個のホストを扱うことができる。
しかしホスト数が多すぎるかつより分割したい場合は
```サブネットマスク```を用いる。

## サブネットマスクとは？
```ネットワークアドレス部とホストアドレス部とみなすか指定するビット列```のこと。
### どんなものか？
```255.255.255.0```このようになっている。
これを１０進数で表すと```11111111.11111111.11111111.00000000```
ネットワークアドレス部とホストアドレス部が１と０で分けられている。

### 気づき
* サブネットマスクのビット列が増えていけばその分分割できるネットワークの量も増えるのかな。
* サブネットマスクの意味を知れてよかった。前から気になっていた。

# MACアドレスとIPアドレスは何が違うの？
ネットワーク間を渡ってパケット渡す時TCP/IPのプロトコルに則りOSI参照モデルを通らなければならない。
この場合、第1層から第三層までを通る。
MACアドレスはデータリンク層（第２層）
IPアドレスはネットワーク層（第３層)
つまり
MACアドレスはデータリンク層までしか使うことはできない。
ネットワーク間を渡るためにはIPアドレスが必要になる。
しかし送る場合もそうだがパケットを受け取る場合もデータリンク層を通らなければならない。
その時にまたMACアドレスは必要になる。
だから
送り先の中継所（ルータ、ハブ）も受け取る側もMACアドレスを使って受渡される。

自動で宛先までバケツリレーしてくれるのか。

# DHCPは自動設定する仕組み
LANに繋ぐコンピュータが多くなるとIPアドレスが重複する可能性が出てくる。
そこで登場するのが```DHCP（Dynamic Host Configuration Protocol)```だ。
## DHCPの特徴
* ```IPアドレスの自動割り当て```
* ```ネットワークの設定作業を自動化```

以上の特徴により管理の手間が省ける、人為的なミスを防ぐ。
## プロトコルを支えるサーバー
DHCP（Dynamic Host Configuration Protocol）というプロトコル（通信手順）を用いて、管理者があらかじめ設定したIPアドレスや```DNSサーバ```のアドレスなどの情報を```端末に自動的に送信```する。```DHCPサーバにアクセスして設定情報を入手する端末やソフトウェア```は```DHCPクライアント```という。
出典 https://e-words.jp/w/DHCP%E3%82%B5%E3%83%BC%E3%83%90.html

### 気づき
DHCPがあるおかげで知らないLAN環境でインターネットをすることができるのか。
ありがたい。感謝！

# NATとIPマスカレード
IPアドレスにはプライベートIPアドレスとグローバルIPアドレスがある
コンピュータの中にはプライベートIPアドレスしか持たないものもある。
そんな時に
```NAT```や```IPマスカレード```と言うアドレス変換技術だ。
つまりプライベートIPアドレスからグローバルIPアドレスを繋げてくれる。

## NAT(Network Address Translation)
グローバルIPアドレスとプライベートIPアドレスとを１対１で結びつける。
お互いに変換をおこなう。
同時にインターネット接続できるのは、グローバルIPアドレスの個数分だけ。

NATでは一般的にIPパケットのヘッダ内にある送信元IPアドレスを変換します。企業ネットワークでは
　送信元IPアドレスがプライベートIPアドレスなので、NATによってグローバルIPアドレスに変換します。

　NATでは、企業内LANのクライアントPCに割り当てられたIPアドレスを変換してインターネット通信が
　行われることから、セキュリティが向上する利点がある一方、アプリケーションによりNAT変換による
　通信では正常に動作しない問題点もあります。
出典 https://www.infraexpert.com/study/ip10.html
## NATの種類
NATは「動的NAT」「動的NAPT」「静的NAT」「静的NAPT」の４種類に分けられます。
### 「動的NAT」
NATプールと言う変換後アドレスリストを使用し、送信元IPアドレスを未使用アドレスに変換することです。```NATプール```を使い切った後は、クライアントは接続できなくなります。

#### NATプール（確定はしていません）
動的NATでISPから割り当てられたアドレスプール内のグローバルIPアドレスを使用して，複数の社内クライアントからInternetの外部HTTPサーバにアクセスする例を示します。
出典 https://www.alaxala.com/jp/techinfo/archive/manual/AX2000R/HTML/CFGUIDE/0124.HTM
##### 気づき
出典元の図でイメージできると思う。
変換できるグローバルIPアドレスを溜め込むものかそれがなくなると変換できなくなるのか。

#### 「動的NAPT」
送信元IPアドレスを、グローバルIPアドレスに変換することです。送信元のポート番号を、使用していないポート番号に変換します。大企業や一般家庭でも使う一般的な方法です。

#### 「静的NAT」
IPアドレス1つを、別のIPアドレス１つに変えています。具体的にはグローバルIPをプライベートIPに変換することです。

#### 「静的NAPT」
IPアドレス１つに対して、別のIPアドレスとポート番号に変えられます。ポート番号を指定する必要があり、番号に対して１対１で変換する決まりです。

出典 https://www.freshvoice.net/knowledge/word/6881/

## IPマスカレード(NAPT)
グローバルIPアドレスに複数のプライベートIPアドレスを結びつけて、```１対複数の変換```を行う。
IPアドレスの変換時に```ポート番号も合わせて書き換える```。
一つのグローバルIPアドレスでも複数のコンピュータが同時にインターネット接続。

### 気づき
もうちょっと勉強が必要だ。
時間がないからこの辺で

# ドメイン名とDNS
IPアドレスは２進数や１０進数で表現されていても覚えられなくもないが人間には覚えづらい。
なのでIPアドレスを文字に置き換えたものを```ドメイン名```と言う。
ドメイン名はコンピュータを表すことができる。

## ドメイン名を訳してみる
```www.gihyo.co.jp```
* ```www``` コンピュータの名前
* ```gihyo``` 組織の名前
* ```co```　組織の種類
* ```jp```　国の名前

日本の企業の技術評論社のwwwと言うコンピュータとなる。

## それぞれのドメインの名前
ドメイン名を構成する最も右側のラベルを```「トップレベルドメイン」```と呼び、 以下左へ順に```「第2レベルドメイン」```、 ```「第3レベルドメイン」```、……と呼びます。

```jp```がトップレベルドメイン
```co```が第２レベルドメイン
```gihyo```が第３レベルドメイン
.
.
.
となる。
出典　https://www.nic.ad.jp/ja/dom/system.html

## DNS
IPアドレスとドメイン名を関連づけを管理している組織を```DNS(Domain Name System)```と言う。
DNSサーバーを使ってIPアドレスでドメイン名を問い合わせることができる。
逆も然り

## DNSの構造
下の図はDNSの構造を表したもので、ドメイン名空間と呼ばれます。 これは、木をさかさまにした形となっており、 ```一番上の「ルート(root)」```と呼ばれる部分(「“　”」で表現される)を頂点にして、 下の階層へと空間が広がっていきます。 ```ルートの下には「com」「net」「jp」などのトップレベルドメイン```が配置され、 そのさらに下に第2レベルドメイン、 第3レベルドメイン……と続きます。

あるドメインの下の階層に複数のドメインを新設する場合は、 ```必ず異なるラベルをつけるようにしなければなりません```。 これによって、ドメイン名空間を構成するすべてのドメイン名は、 必ず一意性が保証されるようになっています。

それぞれの```階層の各ドメインには「ネームサーバー」と呼ばれるデータベース機能が配置```され、 その空間にある名前の管理を行っています。 ネームサーバーは、 ```基本的にはその配下にあるドメイン名とIPアドレスの対応関係を管理```するものですが、 そのさらに下の階層のドメイン(サブドメイン)を管理しているネームサーバーの位置を示す役割も担っています。

ドメイン名空間の```最上位にあるネームサーバーは「ルートサーバー」```と呼ばれます。 このルートサーバーが管理している「ルートゾーン」には、 ```「jp」や「com」といったトップレベルドメインのネームサーバー```(のホスト名とIPアドレス)が記述されており、 ルートサーバーは```それらのネームサーバーがどこに位置しているのかを把握```しているというわけです。

出典　https://www.nic.ad.jp/ja/dom/system.html
図を見るとイメージしやすくなる。
ルートサーバは世界各地に存在する。詳しくは出典元の一番下

## DNSの誕生理由
現在のインターネットの前身であるARPANETでは、 「HOSTS.TXT」(JPNIC Newsletter No.22のインターネット10分講座を参照 )というテキストファイルを使用して名前の管理を一元的に行っていました。 しかし、ARPANETの規模拡大とともに、 HOSTS.TXTによる```集中管理は破綻をきたす```ことになります。 HOSTS.TXTの更新が週1、2回であったということもあり、 ローカルサイトのホスト情報が変わっても、 それがHOSTS.TXTに```反映されるまでに時間がかかる```という問題がありました。 また、```ネットワークに接続するホスト数の増加に伴い、 HOSTS.TXTが巨大なファイル```となり、 これをダウンロードする```トラフィックがネットワークの大きな負荷```となってしまうという問題も発生しました。

そこで、 こうした問題を解決するための新たな仕組みとしてDNSが考案されました。 DNSは、上の図(出典元の図）に示したような```階層構造を持つことによって、 データを分散管理することが可能```になっています。 これにより、 DNSでは```ローカルに管理されているネームサーバーでホスト情報を更新```することができるようになり、 その```更新結果がネットワーク全体に反映される仕組み```となっています。
出典 https://www.nic.ad.jp/ja/dom/system.html

### 気づき
ネットワークにつなぐものが多くなっていくと分散させて管理するのか。

# 問題を解いた時の気づき
## IPアドレスとサブネットマスクからネットワークアドレスの求め方
IPアドレスとネットマスクのANDを計算すると、ネットワークアドレスを得ることができるのです。
２進数で表されたサブネットマスクを見てみると```11111111.11111111.11111111.00000000```になっている。

ANDで計算するとIPアドレスが1の時は１を0の時は０を返してくれる。
そのためネットワークアドレス部を取り出すことができる。

ホストアドレス部を求めるときもサブネットマスクの１と０を逆にすれば求める音ができる。
出典 https://wa3.i-3-i.info/word11975.html

## ホストアドレスの求め方
```11000000.10101000.00000000.00000010```の場合はホスト部が````00000010```なので
値は２になる。

## ブロードキャストアドレスの求め方
求めたネットワークアドレスのホストアドレス部分を「全て1」に設定した値がブロードキャスアドレスとなります。
```192.168.1```がネットワークアドレス部の場合、```192.168.1.255```になる。
出典 https://ict-skillup.com/network/506/#toc9

# 出典
https://gihyo.jp/book/2020/978-4-297-11781-8

https://gihyo.jp/book/2022/978-4-297-12375-8