大阪府立大学 ネットワーク工学 キーワード メモ


# この記事について
この記事は、自身が所属する大学のテスト勉強のメモである。
# キーワードまとめ
## パケット交換/回線交換
* パケット交換
    * パケット単位で経路の交換を行う方式。
    * メリット：1つの通信リンクを異なる通信コネクションで共有できる。
    * デメリット：経路上の各ルータのバッファにおいて遅延が発生する。
    * 用途：遅延に寛容で間欠的なWWWなどの通信向き。
* 回線交換
    * 通信開始前にエンドホスト間でシグナリングを行い経路を設定する。
    * メリット：安定した通信の実現。
    * デメリット：通信が行われていなくても経路が占有されてしまう。
    * 用途：長時間安定した通信品質が必要な通信で利用。音声・動画など。


## 多重化方式
* 伝送路を物理的、論理的にチェネルに分割し、1つの伝達媒体で複数の情報を同時に転送するための技術。
* 多重化方式
    * **周波数**分割多重(FDM: FrequencyDivisionMultiplexing)
    * **波長**分割多重(WDM: WavelengthDivisionMultiplexing)
    * **時**分割多重(TDM: TimeDivisionMultiplexing)
    * **符号**分割多重(CDM: CodeDivisionMultiplexing)

## OSI参照モデル
|層|関連|
|---|---|
|7. アプリケーション層||
|6. プレゼンテーション層||
|5. セッション層||
|4. トランスポート層|TCP, UDP|
|3. ネットワーク層|IP|
|2. データリンク層||
|1. 物理層||

## FEC（前方誤り訂正）
* データリンク層での誤り符号制御
* フレーム中に発生したビット誤りを**受信ノード**で適切なビットに**訂正**する手法
    * 目的
        * 情報源符号化：可能な限り少ない符号化系列で表現(**簡略化**)
        * 通信路符号化：符号化系列の冗長化による通信の**信頼性向上**

## ARQ（自動再送要求）
* データリンク層での誤り符号制御
* **受信ノード**でビット誤りを**検出**し、送信ノードにフレームの**再送を要求**する。
* 確認応答(
    * ACK
        * 正しく受信した場合に送信される。
    * NAK
        * 誤りが検出された場合に送信される。
    * ACKとNAKを利用
        * 受信ノードは順番番号をACK、NAKに記述して送信ノードに返す。送信ノードは、NAKの番号のフレームを再送。
    * **ACKのみ**利用
        * 送信ノードは**タイムアウト**時間内にACKを受信しない場合、そのフレームを再送。
        * 誤り発生を検知されるまで時間がかかるが**ネットワークへの送出フレームを減らせる。**
* **ストップアンドウェイトARQ**
    * 送信ノードは、１つのフレームを送信、そのフレームに対する確認応答が受信ノードより帰ってくるまで次のフレームを送信しない。
* **Go back N ARQ**
    * ACKを待たずに連続してフレームを送信。
    * 誤りが検知された場合、**誤りが検知されたフレーム以降の全てのフレーム**を再送**。**
    * 伝送効率良(冗長な再送あり) but 制御はさほど複雑ではない
* **選択再送ARQ**
    * Bo back N ARQと異なり、**誤りが検出されたフレームのみ**再送。
    * 伝送効率最良
    * **順序逆転**発生、複雑な通知・処理問題


## メディアアクセス制御(MAC)
* ネットワーク(NW)の種類
    * 基幹NW：P2P形
    * アクセスNW：ブロードキャスト形
* メディアアクセス制御
    * **ブロードキャスト形**のリンクを用いる場合、どのホストが**パケット送信権**をもつか決めるための制御。多くの場合、上りリンクで利用。
        * 上りリンク：ホスト→NW
        * 下がりリンク：NW→ホスト
* 送信権の管理方法
    * 集中制御
    * 分散制御
* 送信権を割り当てる方法:
    * 固定割当形(Fixed Assignment)
    * 要求割当形(Demand Assignment)
    * 競合形(Random Access)

### 固定割当形
* 物理的、論理的に分割された通信路を各ホストに割当
    * FDMA (**Frequency** Division Multiple Access) 周波数分割
    * TDMA (**Time** Division Multiple Access)時間分割
    * CDMA (**Code** Division Multiple Access)符号分割
### 要求割当形
* **ポーリング**
    * 中央局がホストに送信したいパケットを保持しているか確認
    * 保持していれば中央局に送信
    * なければ送信権は与えられない。
* **トークンパッシング**
    * 分散型制御
    * ホスト間で**トークン**を巡回させ、各ホストはトークンが回ってきたときに送信権を得て、保持しているパケットを送信できる。
* **トークンリング**
    * ホスト間で**フリートークン**を巡回させ、各ホストはフリートークンを受信すると、送信パケットがある場合、**ビジートークン**へ変換しデータパケットと共に送信する。ビジートークンがリング上を１周した時データパケットを削除し、フリートークンへ戻す
### 競合形
* 送信権を奪い合う。
* 競合を回避する必要がある。
* **純アロハ**
    * 各ホストは送信したいパケットが生成されると直ちに送信。衝突が発生した場合、**ランダムな時間後**に再送
 * **スロット化アロハ**
    * 各ホストは**決まった時間**にしかパケット送信できない。
* **CSMA**
    * あるホストが送信した信号を、受信ノードだけでなく**他のホストにも共有**することでスループットの改善を図る仕組み。
    * 各ホストはパケット送信時に、**伝送路が他のホストに使用されていないかどうかを調べ**、伝送路が空いていればパケットを送信する。
* **CSMA/CD**
    * CSMAにパケット**衝突検出**の機能を付加したランダムアクセス方式。
    * **パケット送信後も伝送路を監視**し、パケットの衝突が起こればパケットの伝送を停止する。

## IP アドレス体系
*  IPアドレス
    * ネットワークに接続されている全てのホストの中から通信を行う宛先を識別する時に利用される。
* IPv4
    * 計32bitでアドレスを表現
* ネットワーク部とホスト部がある。切れ目は以下の２つの方法で判断できる。
    * サブネットマスク
        * 32bit
        * ネットワーク部を1、ホスト部を0で表現
        * クラスに縛られずネットワーク部を決定できる
    * プレフィックス表記(cidr表記)
        * IPアドレスの後ろに/を書く
        * **IPアドレスとサブネットマスクを一緒に表記するイメージ**
        * **CIDR**
            * クラスに縛られないIPアドレスの割り当てと、経路情報の修正を行う技術。
            * プレフィックス表記
            * メリット
                * 可変長
                * Pアドレス空間の有効活用
                * 経路の集約による経路数の削減
                    * 203.183.224.0/23
                        * 203.183.224.1 ~ 203.183.225.254をまとめてる
                        * $2^{32-23}-2=510$個のホストをまとめてる
* **NAT**
    * プライベートIPアドレス(自分のパソコン)→NAT(ルータ)→インターネットという流れ
    * グローバルIPアドレスはインターネットに公開しているサーバ(ルータなど)にだけ割り当てられている。
* **NAPT**
    * LAN側のPrivate IPアドレス+ポート番号をWAN側のGlobal IPアドレス+ポート番号に相互変換(サーバからはこちらが見える)
* IPv6
    * 計128bitでアドレスを表現
* ブロードキャストアドレス
    * ホスト番号のビットがすべて1
* ネットワークアドレス
    * ホスト番号のビットがすべて0

## IP ヘッダフォーマット

![Screen Shot 2022-07-30 at 22.28.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/888576/b472f18e-c6c7-b06b-9040-afc00d673ca2.png)
![Screen Shot 2022-07-30 at 22.24.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/888576/8025c342-4f50-6db7-5691-42027e14faa6.png)
https://www.infraexpert.com/study/ipv6z1.html より引用


## パケット交換方式
* データグラム方式
    * 動的経路選択
    * 順序入れ替え発生
* バーチャルサーキット方式
    * 経路設定後送信
    * 到着順序保証

## ルーチング
* どの経路を通ってデータを転送するか決定すること。IPアドレスのネットワーク部を用いて行われる。
* 分類
    * シングルorマルチ
        * シングルパス：宛先端末までの経路を1つ利用
        * マルチパス：宛先端末までの経路を複数利用
    * 静的or動的
        * 静的ルーチング：ネットワーク管理者が決定したルートを選択
        * 動的ルーチング：ネットワーク機器が自動的にルートを決定

## 最適経路選択アルゴリズム
* 距離ベクトル型
    * ルーター間でネットワークの距離と向きに関する情報を共有し経路制御表を作成し利用。
    * 分散ベルマンフォードアルゴリズム
* リンクステート型
    * ルーターがネットワーク全体の接続状態を理解して経路選択。
    * ダイクストラアルゴリズム
### 分散ベルマンフォードアルゴリズム
* ある終点へ至る最小パスコストと、そのパス上での始点から見た隣接点(ネクストホップ)を求めるアルゴリズム
* 基本、隣接ノードへ既知の経路テーブルの最新情報を転送し、それを元に更新
* 分散実行時、各ノードは網全体のトポロジを知っている必要はない
### ダイクストラアルゴリズム
* ある始点から到達できる他のすべての点(ノード)への最小パスコストと最小コストパスを求めるアルゴリズム
* 始点ノードから最短木の部分木を逐次成長させるアプローチ

## RIP と OSPF の概要
### RIP(Routing Information Protocol)
* **距離ベクトル型**ルーチングプロトコル
* **通過するルータの数を最小にする**
* 経路制御情報をネットワーク上に定期的（1回/30s）にブロードキャストする
    1. ルータは自身が知っている経路制御情報をブロードキャスト
    2. それを受け取ったルータは、距離を１足してブロードキャスト
    3. 2を繰り返す
* **UDPポート520番.**
* **ループ検出できない**

### OSPF(Open Shortest Path First)
* **リンクステート型**ルーチングプロトコル
* 各リンクに重み（コスト）をつけて、重みを最小化する
* Link State Advertisement(LSA)を基に、各ルータで同一のトポロジデータベースを共有的に構築し、それを用いて経路を算出(Dijkstra)。
* 外部からの経路情報(BGP)を扱える。
* 同一ケーブル内ではマルチキャスト、再送はユニキャストで情報伝送。
* パスワード、秘密鍵、MD5を使用したセキュリティ機能。
* **ループ検出できる**

# AQM(Active Queue Management) 概要
* **ルータ内のバッファが満たされる前に、パケットを廃棄する仕組み（考え方）**。
    * ルータ内部の出力リンクごとのバッファの管理制御
    * パケット廃棄制御 ・・・ Tail Drop, RED(Random Early Detection), FRED, BLUE, SFB など
    * パケット送出スケジューリング ・・・FIFO, WFQ, RR, WRR, DRRなど

## RED(Random Early Detection)動作原理
* https://en.wikipedia.org/wiki/Random_early_detection
![Screen Shot 2022-07-31 at 15.14.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/888576/d3dce21e-8400-8262-0c6c-159e0174f7f7.png)

## TCPの主要な役割(機能)
* 信頼性のある通信を実現する。

## TCP ヘッダーフォーマット
* シーケンス番号
    * 送信データの位置。データ送信されるたびに、送信データのオクテット数だけ値が加算される。
* 確認応答番号
    * 次に受信すべきデータのシーケンス番号
* ウィンドウサイズ
    * 確認応答番号が示した位置から受信可能なデータサイズ（オクテット数）
![Screen Shot 2022-07-31 at 15.21.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/888576/c77d1c8d-c5b2-22c0-0d05-4d48e5f44757.png)
https://www.infraexpert.com/study/tcpip8.html
より引用

## TCP の主要動作
* コネクション確立
    * **3-way handshake**
        1. SYN(コネクション確立要求)A→B
        2. ACK(SYNに対する確認応答), SYN(コネクション確立要求)B→A
        3. ACK(SYNに対する確認応答)A→B
* データ転送
    * 輻輳制御アルゴリズム
    * パケット廃棄の検出、再送アルゴリズム
* TCP のウィンドウフロー制御
* コネクション切断
    * 確立と同様の手順

## ウィンドウ制御
* メモリ上に「ウィンドウ」と呼ばれるバッファ領域を確保して、**大きな単位でデータを転送**する方式。
    * ウィンドウサイズ：確認応答を待たずに送信できるデータの大きさ

## 累積ACKの仕組み
* 累積 ACK とは、受信した最新のセグメントに対するシーケンス番号ではなく、**連続して正しく受信された最後尾のセグメントに対するシーケンス番号**をACK内に含めて、受信端末から送信端末に通知する方式
## TCP の輻輳制御（ネットワークの混雑解消）
* **スロースタート**
    * ウィンドウサイズを最初は1セグメントに設定し送信。そこから確認応答されるたびに１セグメントずつウィンドウサイズを大きくしていく。(指数関数的に増加)
* **輻輳回避**
    * ウィンドウサイズがスロースタート閾値を超えると、ウィンドウサイズが線形的に増加するようになる。
* **タイムアウト再送**
    * 一定時間内に確認応答が返ってこない場合、データが喪失したと判断して行われる再送処理
* **早期再送**
    * 送信側が、⼀度受信した確認応答と同じ確認応答をさらに3回受信した場合、セグメントが失われたと判断し、タイムアウトを待たずに再送処理を⾏う。
* **早期回復**
    * 重複確認応答による再送制御が⾏われた場合、スロースタート閾値の⼤きさをそのとこのウィンドウの半分の⼤きさにする。そして、ウィンドの⼤きさを、求めた閾値に3セグメントを加えた⼤きさにする。

## UDP ヘッダーフォーマット
![Screen Shot 2022-07-31 at 15.55.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/888576/0d78f721-99a1-5680-81ab-76c78baad977.png)
https://www.infraexpert.com/study/tcpip12.html
より引用

## UDPに適した利用シーン

* **高速性**や**リアルタイム性**が必要な通信で利用される。
* DNS
    * TCP, UDP共に使えるが主にUDPを使用
        * 512bite以内はUDP

## クライアント・サーバモデルと P2P モデル
* クライアント・サーバモデル
    * サーバ1台にクライアントN台が接続。クライアントからの要求にサーバが応える
* P2Pモデル
    * 各クライアントがサーバを介さずに1対1で直接接続。

## プロセス間通信の基本シーケンス（ソケット通信による）
* サーバ
    1. ソケットの生成: socket
    2. 属性付与（ポート番号、IPアドレス）: bind
    3. 接続受付準備: listen
    4. 接続待ち、接続受理: accept
    5. クライアントとやりとり:  send, recv
    6. 接続解除: close
* クライアント
    * ソケットの生成: socket
    * 接続受付: connect
    * サーバとのやりとり: send, recv

## アプリケーション要求とサービスとの関係
## DNSの概要と動作手順（含：再帰クエリ、反復クエリ）
* DNSの概要
    * ホスト名及びドメイン名からIPアドレスへの変換処理をしてくれるネットワークアプリケーション。
* 動作手順
    * ローカルNS→ルートNS→中間NS→オーソリティNS の順に名前解決を行う。その際、**再帰クエリ**による探索が行われる。ただし、ローカルNS→ルートNSでは**反復クエリ**による探索行われる。
## Web概要
* Web
    * インターネット上の情報をハイパーテキスト形式で参照できる情報共有システム。
        * URI：URL(インターネットの資源を表現)だけなくあらゆる資源を識別。
        * HTML：Webページの記述に用いる言語
        * HTTP：Webを実現するための基盤プロトコル。トランスポートプロトコルとしてTCPを利用する。HTML文書や、画像、音声、動画などのコンテンツを送受信する際に利用する。
            * 特徴
                * クライアントがHTTPサーバに情報を要求し、HTTPサーバがクライアントに要求に対して情報を送信する。その際、サーバはクライアントの情報を保持しない（ステートレス）。故に、高いスケーラビリティを実現している。
                * ハイパーリンクと検索エンジンにより優れた情報検索が可能。
                * 操作のオンデマンド性が高い。
## HTTP動作・メッセージフォーマット
* メッセージフォーマット
    * GET(要求) → HTTP/1.1 200 OK (正常応答)
    * HTTP要求メッセージ・・・要求行、ヘッダ行、空行、エンティティボディ
        * 第1行目: 要求行。 メソッド、URL、バージョンがスペースを挟んで並ぶ
            * メソッド: GET(メイン利用)、POST(ボディ部をもつ。各種情報や添付ファイル
            を送付可)、HEAD(リソースのヘッダ情報のみ返してほしいとき) など
        * 第2行目以下: ヘッダ行。各行には“ヘッダフィールド名: ” の後にス
        ペースを空けて値が入る。
    * 空行の後 。(POSTメソッドなどで使用)
    * HTTP応答メッセージ・・・
        * 1行目: ステータス行。 バージョン、ステータスコード、ステータス文がス
        ペースを挟んで並ぶ
        * ステータスコード 要求に対する結果。 200
        * ステータス文 ステータスコードの説明文。 OK
        ![Screen Shot 2022-07-31 at 16.32.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/888576/6b3d193c-6fe8-c434-1657-7870b11180cf.png)
        https://www.infraexpert.com/study/tcpip16.html　
より引用

## WebサービスにおけるTCPの非持続的・持続的接続
* HTTP1.0
    * 非持続的
    * 個々のオブジェクトに対してTCPの接続・解放処理を行う
* HTTP1.1
    * 持続的(Keep-Alive)
    * **一回のTCPコネクションで複数のHTTPリクエストとレスポンスを送受信すること**

## HTTPにおけるアクセス認証とCookie
* **アクセス認証**
    1. クライアントからサーバにget
    2. サーバはクライアントに401 Authentication Requiredを返す
    3. クライアントは、ID, passwordをbase64エンコードしたものをAuthenticationヘッダに入れ、サーバに送信
* **Cookie**
    * **webサーバがユーザの利用履歴を保存するための方法。**
    1. ユーザがサイトにアクセスした際、サーバ側はSet-cookieヘッダに自身が発行した認証番号を付与してユーザ側に返す。
    2. 認証番号を受け取ったユーザは、クッキーファイルに（サーバ名、認証番号）の対を記憶
    3. サイトにアクセスするたびに、ブラウザはクッキーファイルを参照し、Cookieヘッダに認証番号を付与。
    4. サーバ側はCookieヘッダの認証番号をもとに、ユーザの閲覧履歴などを取り扱う。

## SMTP概要・処理手順
* SMTP概要
    * 電子メール送信で使用されるプロトコル。TCPの**25番ポート**を利用。
    * クライアントは**テキストコマンド**で要求し、サーバは3桁の数字で表現される文字列で応答を返す。

## ftp、telnet概要
* ftp
    * ローカルホストとリモートホストとの間でネットワークを介して**ファイルを送受信**するためのプロトコル
    * 制御コマンドの通信とデータの通信に対して別々のコネクションを利用（out band方式）
        * 制御コマンド通信：port 21
    * **ステートフル**(転送のステータスやディレクトリの位置などを維持)
    * **anonymous ftp**: 誰もが取得できるサイトへのftp(暗号化されない)
* データ通信：port 20
* TELNET
    * **SSH(port 22)** の下位互換
    * port 23
    * **ネットワーク経由**で**遠隔**(リモート)に位置するサーバを**手元の(ローカル)端末**から操作できるようにする仮想端末プログラムtelnetを実現するプロトコル
    * 仮想端末(Network Virtual Terminal): ローカルホストからリモートホストを覗
    くための窓



# 参考文献
* マスタリングTCP/IP
* OHM 大学テキスト 情報ネットワーク