マスタリングTCP/IP　第1章　ネットワーク基礎知識

自分の知識の定着を図るためのアプトプットです。詳しくは実際の本を読んでみて下さい！

https://www.amazon.co.jp/-/en/%E4%BA%95%E4%B8%8A%E7%9B%B4%E4%B9%9F-ebook/dp/B0827QNDNT/ref=sr_1_1?adgrpid=48910594010&dib=eyJ2IjoiMSJ9.kB1wpWesImwGFopOwjS_XQn8hT_FkSmFdM7c9FebnVzCTnUqW6XqRK1pZbTkbZfWpEd6Rg3XGtYJblcXIrmM7QObyT4lJUiNT7ofSaGMpTUvQkCKnKIVuWh49cFwDrEpyR88lJH67Qb9J_Rc_1BIALz9t9PKMUzc66PrSfhN05Pc5v70s7jnFBX46ENK0nBWFfyZ3x2Fmem2-Qbf2V5BMwURHtj2QNhCIlOWPq_8CuUCK7sx3WqZlp0bRVsTRPXM1CCAQITEF8C3iB83nACxNgahDugy1glqM_Lv4DjsBWS-M5M72r6d4UgQKOiYXH7pPZn89JbCnvJEOnr8lHrDhaZCJINyuYH9aXllZhnBHaKLna7oUkar7JsaWNgrdyO6Mda2mBVs5vDmiB8d7ObLVWXwYyPGOj-XQ6J41loTfdR_jH6GMo3RCmQ44h-s2J0F.q__f8x4Emr8t3xOijgAA0Tra7lHLkv7SfLGRiJpdQAI&dib_tag=se&hvadid=679073071879&hvdev=c&hvlocphy=1009307&hvnetw=g&hvqmt=e&hvrand=16804345372684970371&hvtargid=kwd-334746806305&hydadcr=27706_14738821&jp-ad-ap=0&keywords=%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0+tcp%2Fip&qid=1735294326&sr=8-1

# 1.1 コンピュータネットワーク登場の背景
最初はスタンドアロンという形式で使用されており、それぞれのコンピュータ同士で連携をとることはできず、個々の作業を行うためだけに使用されていた。しかし、普及するにつれて連携とれた方がいいよねってなって通信できるようになった

# 1.2 コンピュータとネットワーク発展の7つの段階
発展を7段階に分けてるけどちょっと省略
- バッチ処理
  - この頃のコンピュータはとても高価なものだったので、一般のオフィスなどにはなく、コンピュータが多いてある計算機センターに自分の作ったプログラムを持ち込んで、それを何時間も掛けて計算してもらって後日取りに行くなどとしていた
- タイムシェアリングシステム（TSS)
  - 一つのホストコンピュータに各端末がアクセスして使えるようにするというもの。一つの大きいコンピュータを複数のホストが分割して使用できる
- コンピュータ間通信
  - 計算を複数のコンピュータ同士で通信できる様になった。TSSで一つの大きなコンピュータを使用していたが、さらにその様なコンピュータを複数台接続できる様になった。そのおかげで、それぞれのコンピュータ同士の結果などを合わせることなどもできる様になった
- コンピュータネットワークの登場  
  - パケット交換技術により異なるメーカーのコンピュータ同士でも相互通信が可能になってきた 
- インターネットの普及
  - 安価になり普及していった
- 安全に繋ぐ時代へ
  - みんなが使うからこそ安全性の確保が大事になった。暗号化やセキュリティなどを重視するように 
- IoTへ
  - Internet of Thingsという考えが広まっていき、様々な所にITを組み込もうとしている

# 1.3 プロトコルとは
プロトコルとは、約束事のようなもの。異なるメーカーのOSやCPUが通信をできる様にするためにプロトコルを決め、それに沿った通信をすることでそれぞれのコンピュータでデータを処理することができる
大きなデータはパケットという小さな単位に分割して送信される。それぞれにヘッダが付けられてパケットが送信される。受け取った側は小分けされたパケットをヘッダを見て再構築して、元のデータに戻す

# 1.4 プロトコルは誰が決める？
どこかの会社がこのプロトコル使う！！って宣言しても、他の会社が同じプロトコルを使用しないと通信ができないので結局普及しない。なので、ISO（国際標準機構）という機関が国際標準がOSIと呼ばれる通信体系を標準化した。この本ではTCP/IPというISOの定めている国際標準ではないが、IETFというところで提案や標準化作業が行われているプロトコルを紹介する。この考え方はインターネット上のデファクトスタンダードとして世界中で最も広く使われている通信プロトコルである。

# 1.5 プロトコルの階層化とOSI参照モデル
OSI参照モデルでは、通信に必要な機能を7つの階層に分けており、それぞれで機能を分割することで、ネットワークプロトコルを単純化しようとした。システムのある階層を変更しても、その影響がシステム全体に波及しないため、拡張性や柔軟性に富んだシステムを構築できる
例えば電話で考えてみると、日本語同士で会話している時も日本語という言語層と電話機という通信装置層の2つに分かれており、言語層を英語にしたところで電話自体は成り立ち、各層の中でしか影響が無いため問題が起きた時にデバッグをしたりや拡張性が高いところなど色々メリットがある
OSI参照モデルは7層に分かれている
- 7層： アプリケーション層
  - 特定のアプリケーションに特化したプロトコル
- 6層： プレゼンテーション層
  - アプリケーションが扱う情報を通信に適したデータ形式にしたり、下位層からきたデータを上位層が処理できるデータ形式にしたりしている
- 5層： セッション層
  - コネクションの確率や切断、転送するデータの切れ目の設定などをしている
- 4層： トランスポート層
  - 宛先のアプリケーションにデータを届ける役目がある。通信を行う両端のノードでだけ処理され、途中のルータでは処理されない
- 3層： ネットワーク層
  - 宛先までデータを届ける役割を持つ。宛先は複数のネットワークがルーターで繋がっている場合などがあるので、どの経路を使うかなどの経路選択の役割を持つ
- 2層： データリンク層
  - 物理層で直接接続されたノード間での通信を可能にする。例えば、一つのイーサネットに接続された2つのノード間での通信を可能にする
- 1層： 物理層
  - ビットの列（0と1の数字の列）を電圧の高低や光の点滅に変換したり、逆に電圧の高低からビットの列に変換などをしている

#### 追記
それぞれのハードウェアがVirtulBoxなどで仮想化されていたり、回路によるハードウェアドライバが存在しておらず、ドライバが完全にソフトウェアになっている場合（ソフトウェアによってエミュレートされている場合）は必ずしもOSI参照モデルの各レイヤに対応するネットワークを構成する物が装置化されていないことにも注意が必要だそうです！

# 1.6 OSI参照モデルによる通信処理
AさんがBさんに「おはようございます」という文章を送る場合の処理について考える
- アプリケーション上で「おはようございます」という文章を打って、それを「送信」ボタンを押す。これはアプリケーション層の処理であり、「ありがとうございます」がメッセージの本文で宛先が「B」である、ということなどの情報をまとめて、プレゼンテーション層にデータが渡される
- プレゼンテーション層では、受け取った情報を下位層が扱えるようにUTF-8などで符号化する。また、写真などがある場合は圧縮なども行う。圧縮にも色々あるので調べると面白い
- セッション層では、どの様にデータを送信したら効率よくやり取りが行えるかや、データの送信方法をどうするかなどを決定する。例えば、AがBにメールを5つ送るときなどは1件ずつコネクションを確立して通信を行うのか、1つのコネクションで5件データを送るのか、5つのコネクションを並列で確立するか、などいろいろな方法があり、それらを決定するのがセッション層（実行するのはトランスポート層）
- トランスポート層ではコネクションの確率や切断を行い、（コネクションの確率や切断をいつ行うか決めるのはセッション層）データの再構築や送れていない場合は再送信などを行い、信頼性を確保する
- ネットワーク層では、宛先のIPアドレスに届くまでを担当する。ホストAからホストBまでの（エンドツーエンドの）通信を実現する
- データリンク層ではホストAからイーサネットで接続されたスイッチまでの処理や、それぞれのルーター間での通信（1区間の通信）を実現するために使用される
- 物理層ではデータリンク層によって通信が可能になったハードウェアに対してビット列の0,1を電圧の変化などにして物理的な通信媒体に流し込む

ホストBではこれらと逆順の作業を行い、下位層から順にデータを復元して最終的には「おはようございます」というデータをBが読める様にする

# 1.7 通信方式の種類
### データの配送方法
- コネクション型： データの送信を開始する前に送信ホストと受信ホストの間で回線を接続する。これにより再送処理やデータの再構築などができ信頼性が担保できるが、時間がかかってしまう。また、コネクション型の場合には通信の前後でコネクションの確立と切断が必要がある。しかしこれにより、相手が通信不可能な場合は不要なデータの送信などがなくなる
- コネクションレス型： この場合はコネクションの確率や切断処理が必要なく、送信したいコンピュータはいつでもデータを送信することができる。しかし、受け取り側はいつデータが来るかわからないので、データを受け取っていないかを常に確認する必要がある。コネクションレス型の場合は通信相手がいるかどうかなどは確認しないのでコネクション型よりオーバーヘッドは減り高速だが、相手に届かない場合や、受信相手がいないときもデータを送ってしまう

### 通信方法
- 回線交換：回線交換では交換機がデータの中継処理を行う。複数のコンピュータは交換機に接続され、交換機同士も複数接続されている。回線を接続することをコネクションの確立と言い、一度コネクションを確立すると、切断されるまで、その回線は占有利用される。例えば、ある交換機同士が2回線でのみ接続されていたとすると、Aの交換機に接続されているユーザーa,b,cとBの交換機に接続されているユーザーd,e,fがいたときに、aとdが通信をするだけならば一つのコネクションを利用するだけなので足りるのだが、aとd, bとe, cとfの3人が通信を行いたい時には2本しか回線がないので2組しか利用できず、どちらかの通信が終わるまで3組目は待たなければいけない
- パケット交換：回線交換だとユーザーが多いと通信ができないことが問題だったので、それを解消しようとしたのがパケット交換方式。この方法では、回線に接続しているコンピュータが送信するデータを複数の小さなパケットに分けて送信する。小さなデータに分けることで回線を効率的に利用でき、また、パケットにヘッダをつけ自分のアドレスと相手のアドレスをつけることで、1つの回線を複数人で使用していてもどのコンピュータ間の通信なのかが簡単に判断できる。パケット交換方式ではルーターというLAN同士を繋ぐ機械でデータを転送する。ルーターの中にはバッファと呼ばれる記憶領域があり、流れてきたパケットはキュー（待ち行列）を作りながらこのバッファに一旦格納され、先に入った順に転送される（特定のパケットを優先的に送信するといったことも可能）。パケット交換ではルーター間の回線は基本的に一つであり、ネットワークの混雑度でパケットの到着時間が異なることがある。また、ルーターのバッファが溢れるほどのデータがきた場合はパケットが失われることもある

### 通信相手の数による通信方式の分類
- ユニキャスト：1対1の通信。電話のイメージ
- ブロードキャスト：1対全ての通信。同じデータリンク内の全てのコンピュータにデータを送信する。テレビとかのイメージ。ブロードキャストで通信できる範囲をブロードキャストドメインとも言う。
- マルチキャスト：1対Nの通信。特定のグループにのみデータを送信する。1人のホストが主催するビデオ会議などのイメージ
- エニーキャスト：1対1の通信。特定のグループのどのコンピュータでもよく、いずれか一つにデータを送信する。これはマルチキャストのように複数のホストに向けて情報を発信するが、マルチキャストとは異なり、特定の複数台のうちから最適な条件を持つ対象が一つ選別され、その対象一つにだけデータが送信される。通常はその選定されたホストからユニキャストで返信があり、以降の通信はそのホストとの間で行われる。DNSのルートネームサーバーなどが実際のネットワークでは使用されている。DNSでは、DNSルートサーバーやトップレベルDNSサーバーは世界中にレプリケーションされており、DNSルートサーバーに接続したい時などにエニーキャストで通信を行い、最も近いロケーションの（保証はされていない）DNSルートサーバーが返信をしてくれる

# 1.8 アドレスとは
ネットワークにおける住所の様なもの。コンピュータ通信ではプロトコルの各層で異なるアドレスが使用されている。TCP/IPでの通信を考えると、データリンク層、物理層などではMACアドレス、ネットワーク層ではIPアドレス、 トランスポート層では ポート番号などが利用されている。また、それらより上の層でも電子メールアドレスなどが使用されている

アドレスには唯一性があるべき
MACアドレスとIPアドレスには両方とも唯一性はあるが、階層性はIPアドレスのみにある。MACアドレスはNIC（Network Interface Card）ごとにアドレスが付与されているが、IPアドレスにはネットワーク部とホスト部という二つの部分から構成されており、ホスト部が異なるIPアドレスでも同じネットワーク部を持つものは必ず同じ組織やグループに接続されている
ルーターはルーティングテーブルという最終的な宛先のIPアドレスから、次にどこのルーターに行けばいいか（ネクストホップ）を決めるためのIPアドレスの表を持っている（経路制御表とも言う）。他にも、ARPテーブルというIPアドレスをMACアドレスに変換するためのプロトコルも持っている
それに対して、スイッチはフォワーディングテーブルというものを持っており、これは宛先のMACアドレスに基づいてデータをどのポートへ接続するかを決定している。これは送信元のMACアドレスとポートを学習してフォワーディングテーブルを動的に更新する

# 1.9 ネットワークの構成要素
コンピュータネットワークとはコンピュータ同士を接続することである。接続するケーブルとしてはツイストペアケーブルや光ファイバケーブル、同軸ケーブルなどがある。これらのケーブルは利用されるデータリンク（直接接続された機器間を通信するためのプロトコルやネットワーク）によって種類が変わる
- イーサネット
 - 同軸ケーブル：LANで主に使用
 - ツイストペアケーブル：LANで主に使用
 - 光ファイバケーブル：LANで主に使用
- 無線
  - 電磁波：LAN、WANで主に使用

他にもATMやFDDIなどがあるが現在はあまり利用されていないらしいので省略

実際に使用されている機器
- ネットワークインターフェース（NIC）
  - NICはコンピュータがインターネットに接続するときに必要なもの。NICごとにMACアドレスが割り当てられる。最近の場合は無線LANのインターフェースを備えたパソコンが多く、WiFi環境さえあれば自動でインターネットに接続できるものも多いが、以前は有線のLANが主流でそのNICを使用してインターネットに接続していた。その中でも、USB接続するタイプはLANアダプタ、主にデスクトップパソコンに使用されるのはLANボード、主にノートパソコンに使用されるのはLANカードなど言葉の使い分けはあるらしいが、だいたい同じようなものでNICの派生の話である
- リピーター
  - リピーターはOSI参照モデルの第1層の物理層でネットワークを延長する装置。ネットワークを流れる信号は長距離になればなるほど減衰するので、そのデータを増幅、整形して元の形に戻して別の側に流すことでより長い距離を通信できる様になる。また、電気信号で通信を行う同軸ケーブルから光信号で通信を行う光ファイバーに信号を変換することもできる。しかし、通信の速度を変換することはできないので、電気信号と光信号の伝達速度が異なる媒体間などを接続することはできない。また、接続段数に制限もあるので無限に物理ケーブルを伸ばすことなどはできない
- ブリッジ・レイヤ2スイッチ（スイッチングハブ）
  - ブリッジはOSI参照モデルの第二層のデータリンク層で、同一ネットワーク内で2つのセグメント同士（一般的な説明ではネットワークと言うらしい。ネットワーク層の話をしているのではないことに注意するべきと考え、この記事ではセグメントと表記する）を接続する装置。データリンクのフレーム（パケット）をブリッジ内の内部メモリに一旦バッファリング（蓄積）してMACアドレスをもとに次のセグメントに新しいフレームとしてパケット化してデータを送信する。そのため、伝達速度の異なるデータリンクを接続することもできる。また、接続段数に制限はなく、何個でもブリッジを繋げて様々なネットワーク同士を繋げることができる
  - データリンクのフレームのヘッダは以下の様になっており、FCS(Frame Check Sequence)と呼ばれる、フレームをチェックするために利用されるフィールドが存在する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3654277/12908cf0-5809-d7ae-7a27-c951cfca27cc.png)
これによりノイズなどが入り、通信途中でデータが壊れていないかなどを確認し、もしフレームが壊れていたら他のセグメントへ送信しない、というフィルタリングの機能があり、無駄なトラフィックを流さない様に制御している。
また、トラフィックの制御（不必要なブロードキャストを減らすため）にアドレスの学習機能というものがある。ここでいうアドレスとはMACアドレス（ハードウェアアドレスとも呼ばれる）であり、ネットワークインターフェースカード（NIC）に割り当てられているアドレスである。
この機能を持つ装置はラーニングブリッジと呼ばれる。ラーニングブリッジは、異なるセグメント間を接続し、MACアドレスを基に効率的にフレームを転送する。例えば、スイッチングハブAにホストAとホストBがあり、スイッチングハブBにホストCが接続されている場合を考える。このとき、セグメントA内のホスト（ホストA, B）とセグメントB内のホスト（ホストC）が通信できるように、ラーニングブリッジでセグメントAとセグメントBを接続する。
```text
[ホストA]─────┐
             │
[ホストB]────┤ スイッチングハブA
             │
    ┌────────┴────────┐
    │ ラーニングブリッジ │
    └────────┬────────┘
             │
[ホストC]─────┘ スイッチングハブB

```
初回の通信でホストAがホストBに通信を行いたいときに、ホストAのパケットがラーニングブリッジに到達してホストBのMACアドレスをラーニングブリッジが確認する。しかし、ラーニングブリッジにはMACアドレステーブル（転送表）が空のためどのポートに接続されているコンピュータがホストBに繋がっているのかがわからないので、フラッディング（全ポートへの送信）を行う。なのでセグメントA内のホストBとセグメントB内のホストCへフレームを転送し、その後ホストBから返信のフレームがラーニングブリッジに返ってくる。このようなときに、学習が行われる。
まず、ホストAからラーニングブリッジにフレームが来たときにホストAのポートを学習する。次にホストBからの返信が来た際にホストBのポートを学習する。これにより、ホストBからホストAへのフレームの返信の際にフラッディングをせずに済み、セグメントBのホストCへの無駄なトラフィックを減らせる。そしてラーニングブリッジでホストAのMACアドレスを確認すると、直接ホストAのいるポートにデータを返却できる
~~しかしブリッジは現在はほぼ使われていない~~ → 一部のブリッジと接続する機械や、あるハードウェアに仮想化されたソフトウェアとしてブリッジが組み込まれていて、同一機器で回路やソフトウェアを切り替えて、ブリッジとルーターとして切り替えて使用できる機能のあるものもあるそうです！
>フラッディングとブロードキャストの違い
> - フラッディングではユニキャスト通信でのMACアドレスが、MACアドレステーブルに載っていないときに仕方なく全ポートへデータを送信する
> - それに対しブロードキャストは、ブロードキャストアドレスが来たときに意図的に全ポートに対してデータの送信を行う

- スイッチングハブ  
  - ネットワーク層で動き、ブリッジと同様にMACアドレスをもとに送信先を判断してデータを送る。ブリッジでは2ポートしか接続できなかったが、基本的に3ポート以上接続することができ、ハブの機能も備えていることが多いのでスイッチングハブと呼ばれている。また、ブリッジではネットワーク（セグメント）を繋ぐことしかできなかったが、スイッチングハブではポートの振り分けなどができる。他にもスイッチングハブはハードウェア主体で処理するので、処理速度が早いなどのメリットがある

- ルーター・レイヤ3スイッチ
  - ルーターはOSI参照モデルの第三層のネットワーク層でネットワークとネットワークを接続してパケットを中継する装置のこと。ブリッジはMACアドレスで処理を行うが、ルーターはネットワーク層のIPアドレスで処理を行う。ルーターでネットワークを接続するとルーターの部分でデータリンクが分断されるため、データリンクのブロードキャストパケットが伝わらなくなるのでネットワークの負荷なども仕切ることができる
- レイヤ4-7スイッチ
  - これはOSI参照モデルのトランスポート層からアプリケーション層の情報に基づいて配送処理を行うもの。通信が混雑した場合などに音声通話を優先したり、ロードバランサーなどの負荷分散装置など目的によって色々なものがある

- ゲートウェイ
  - OSI参照モデルのトランスポート層からアプリケーション層までの階層で、データを変換して中継する装置のこと。互いに直接通信が出来ないプロトコルの翻訳作業の様なことなどを行い中継する機能。実際の装置があるわけではなくここでは単語の紹介程度に収めている

- プロキシサーバー（代理サーバー）
  - ネットワークのトラフィック軽減やセキュリティの向上のためなどに使用される。実際の例としてはnginxやapacheなどが挙げられ、負荷分散を行ったり、キャッシュをしたりする。ホストとインターネットの間に位置し、先に挙げたような機能を行う

# 1.10 現在のネットワークの姿
実際のネットワークがどの様な構成になっているのか、道路を例に説明する
- 高速道路：コア、バックボーン
- インターチェンジ：エッジ
- 国道、県道：アクセス

- インターネットでの通信
  - 流れとしては、家庭のルーターからアクセスに繋ぎ、それが通信会社のエッジを経てバックボーンにつながる
- 携帯端末による通信
  - 電話通信では、基地局自体がアクセスになっており、そこから通信会社のエッジを経てバックボーンに繋がる流れになっている

- データセンター
  - データセンターとは、巨大なサーバーとストレージ、そしてネットワークなどを保管する物理的な場所。大規模なデータセンターは直接バックボーンへ接続されている。小規模なものでも、エッジに接続されているものが多く、1日に何十万というアクセスを捌くためにたくさんのデータセンターを複数箇所に設置して、高速なネットワークで繋ぐことでそれらのトラフィックを処理できる様にしている。かつては個人や企業の管理するサーバーへアクセスしていたが、データセンターを利用するサービスで情報発信する場面が増えた

- 仮想化とクラウド
  - 現在のサイトやアプリでは、アクセスされる日時や時間帯などにムラがあることは往々にしてある。それらを全て捌かなければクレームに繋がるので、処理したいが、予想されるアクセスの全ての処理を可能にするサーバーを買ったところで、普段は無駄になってしまうので、必要な時や場所でのみネットワーク資源を増やせる様にした技術が仮想化技術である
  - サーバーやストレージ、ネットワークなどを、物理的に増やしたり減らしたりするのではなく、論理的に、必要なときに必要な量を提供できる様にする仕組み。仮想化により、ハードウェアの構成を変えることなくソフトウェアのリソースを分配できる様になった。この仮想化技術を利用し、利用者にとって必要な資源を自動的に提供する仕組みをクラウドと呼んでいる。また、仮想化されたシステム全体を必要に応じて自動的に制御する仕組みをオーケストレーションと呼ぶ

- クラウドの利用
  - クラウド上のアプリケーションを利用する形態をSaas(Software as a Service)と呼ぶ
  - 自分でアプリケーションを入れて、計算が出来る環境だけが欲しい場合に、それを提供する形態をPaaS(Platform as a Service)と呼ぶ
  - また、人によっては自分でCPUの能力やメモリの量、ストレージの量、使い方を決めたい人もいる。それらを提供する形態をIaas(Infrastracture as a Service)と呼ぶ
  - いずれの場合もサーバーやストレージ、ネットワークを仮想化し、各機能を要求に応じた構成に自動的にオーケストレーションを行い、利用者へスムーズに要求通りの環境提供を実現する