Open66

基礎からわかるTCP/IP メモ

mochizoomochizoo

インターネット→コンピュータネットワークの一種
LAN → Local Area Networkの略。特定の範囲(会社内とか建物内)で構築されたネットワーク。
→ 逆にWANはWide Area Networkで広い範囲のネットワーク(会社同士や国同士)
LANやWANは中央集権的(?)で特定の組織が管理する意味合いが強い。

インターネッツはこれらに対して知らない人同士、知らない組織同士が繋がる公共的な中央集権的でないネットワーク。

Ethenet → ゲームをしたりするときの有線などに使われている規格。
古く歴史があり拡張性があるのが特徴

家庭・企業・データセンターなどで使用されるコンピューターネットワークにおいて、LANやWANを構成する有線ローカルエリアネットワークの主流な通信規格
https://ja.wikipedia.org/wiki/イーサネット

スマホでインターネットをする場合 Wi-Fi → 無料 3G, 4G→ 有料 なのはなぜ? → あとでわかるかも

TCP/IP → インターネットの基盤技術 インターネットはこれで動いている

mochizoomochizoo

NAS → Networkにつながったハードディスク(記憶装置?)
Protocol → 守らなければならない仕組みや手順のようなもの
代表的なネットワークプロトコルがTCP/IP 多くの機器がこれを実装してるので異なる機器同士でも通信できる?

TCP/IPは文脈や場合によって意味が少し異なる可能性
・個別プロトコルとしてのTCPプロトコルとIPプロトコル
  アプリの実装中とかに使いそうな意味合い UDPとかと対比される
・TCP/IPプロトコル群
 インターネットを動かしている技術一式を総称して呼びたい時
 多くのプロトコルが含まれた使い方
 より抽象的
・プロトコルスタックとしてのTCP/IP
 プロトコルスタック → あるプロトコル群を実装したソフトウェアやハードウェアの実装のこと
 コンピュータ上で、通信を実現するための一連の通信プロトコル群を実装しているモジュール(プログラム部品)のこと(https://japan.zdnet.com/glossary/exp/プロトコルスタック/?s=4#:~:text=プロトコルスタックとは、コンピュータ,通信が実現されてる。)
 通信するために必要な機能を実現するソフトウェアやハードウェアのこと

mochizoomochizoo

hub 複数のコンピュータ同士を接続するために必要な機器
ルーター 互いに独立したネット同士を接続する機器 
 内部ではTCP/IPプロトコルスタックが組み込まれている。ある意味インターネットワーキングを実現するコンピュータの一つ

家庭などのルーターはプロバイダ につながってる。プロバイダもまたルーターで異なるプロバイダやネットワークに繋がっているためインターネットが実現される。

ブロードバンドルーター 家庭内で使われるルーター。複数の機器をインターネットに接続したい時に使う。

よくあるテザリングはスマホをルーターにしているに過ぎない。

mochizoomochizoo

イントラネット TCP/IPを利用してある一定の範囲内で構築したネットワークのこと
日本語で内部ネット
逆にエクストラネットは企業間などの限られた範囲でのネットワークのこと
 外的驚異に晒されないために専用回線やVPN*を使う。

VPN ホンモノの専用回線ではなく仮想専用回線。ネットワークの間にVPN業者のサーバーを介して通信を行う。この際送受信するすべてのデータに暗号化プロトコルを適用される。インターネット回線に仮想的な「トンネル」を作成します。トンネルを構築して通信をする技術は、トンネリングと呼ばれる。
https://nordvpn.com/ja/what-is-a-vpn/

mochizoomochizoo

Web ついにきた!Web! World Wide Web ネットワークに散財する情報にリンクを貼れる技術(インターネットとは別物)

TCP/IPをオープンなプロトコルとして仕様を決めているのはIETF
昔はコンピュータ同士を通信する際様々なオレオレプロトコルが溢れていた→互換性がないので開発が大変だし研究などが止まるとそのプロトコルは終わるので利用者が困る
これをオープン化して規格を統一しようとしたのがTCP/IP 特定の企業などの技術に依存しない仕組み作り。

IETFがオープンなTCP/IPの仕様を策定し企業などがそれを実装することで互換性が担保される。

mochizoomochizoo

TCP/IPがネットワークの方法に依存しない(Bluetoothや3G, 4G Ethernetでもどんな方法)のはハードウェアではなくソフトウェアだから。
ハードウェアだと使用するパーツに依存する。ソフトウェアはコードを書けば柔軟に活かせる。

コンピュータがネットワークを利用するにはネットワークインターフェースとそれを制御するNIC(Network Interface Controller) が必要。ネットワークインターフェース(ハードウェア)とNIC(どちらもハードウェア)はデバイスドライバというソフトウェアで制御されている。

物理的接続 ハードウェアで通信できるようになること ケーブル接続とか
論理的接続 ソフトウェアで通信できるようになること

パケット(データの小包) データ通信において、ネットワーク経由でやりとりされる情報の伝送単位。(https://mypage.otsuka-shokai.co.jp/contents/business-oyakudachi/words/packet.html#:~:text=パケットとは,64字に相当する。)
パケットには送り先などを示す荷札のようなものがついておりこれを元にデータをやり取りする。
荷札を
ヘッダ** データ本体をペイロード

TCP/IPネットワークで利用されるデーターを特に**IPパケット(IPデータグラム)**と呼ぶ。
TCP/IPはこのIPパケット単位で送受信したりエラー処理をしている。
TCP/IPはデータをパケットに区切り転送。(パケット交換方式)

パケット交換方式のメリット → みんなで共有して効率よく回線を使えるのでムダがない。

mochizoomochizoo

TCP/IPの原点は米軍が考えた「核に耐えられるネットワーク」
分散型なので中央集権的なネットワークの様に一つがダウンしても機能が維持されやすい。

mochizoomochizoo

TCP/IPでよく使うアドレスの種類
・MACアドレス データリンクに使う 6バイト 16進数
・IPv4アドレス IPネットワーク 4バイト 10進数
・IPv6アドレス IPネットワーク 16バイト 16進数
・ホスト名 アプリ全般 文字列 www.google.comみたいな

mochizoomochizoo

MACアドレス IPv4アドレス IPv6アドレス 機器を特定したり通信相手を指定する時に使う識別子

mochizoomochizoo

LinuxやMacで自分のアドレス情報を見やすく見るコマンド

ifconfig en0
mochizoomochizoo

DNS ホスト名(Google.comなど)とIPアドレスを関連付ける仕組み 詳しくはあとでやるかも

DNSで遊ぶコマンド

nslookup ホスト名
nslookup zenn.dev
Server:		192.168.11.1
Address:	192.168.11.1#53

Non-authoritative answer:
Name:	zenn.dev
Address: 35.190.77.180
mochizoomochizoo

ping 相手までパケットが届くかどうか確認するコマンド トラブルシューティングでよく使うらしい
RTT(ラウンドトリップ時間) 通信相手までの往復時間

試しにzennで試す -cはcountでpingを送る回数

ping -c 4 zenn.dev
PING zenn.dev (35.190.77.180) 56(84) bytes of data.
64 bytes from 180.77.190.35.bc.googleusercontent.com (35.190.77.180): icmp_seq=1 ttl=57 time=6.82 ms
64 bytes from 180.77.190.35.bc.googleusercontent.com (35.190.77.180): icmp_seq=2 ttl=57 time=6.02 ms
64 bytes from 180.77.190.35.bc.googleusercontent.com (35.190.77.180): icmp_seq=3 ttl=57 time=9.47 ms
64 bytes from 180.77.190.35.bc.googleusercontent.com (35.190.77.180): icmp_seq=4 ttl=57 time=7.13 ms

--- zenn.dev ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 6.023/7.361/9.474/1.284 ms

RTTのminは最小 avgは平均 maxは最大 mdevは平均偏差(どのくらい応答時間にばらつきがあるかを示すもの)

mochizoomochizoo

traceroute 目的地までの間にある全てのルーターのIPアドレスを知れる どこで障害が起きてるか分かる。

traceroute zenn.dev                                                                                            1153ms
traceroute to zenn.dev (35.190.77.180), 30 hops max, 60 byte packets
 1  buffalo.setup (192.168.11.1)  1.347 ms  1.326 ms  1.312 ms
 2  101.143.253.58 (101.143.253.58)  4.167 ms  4.455 ms  4.444 ms
 3  101.143.253.61 (101.143.253.61)  4.630 ms  5.259 ms  5.237 ms
 4  61.205.118.109 (61.205.118.109)  6.461 ms  6.226 ms 61.205.118.101 (61.205.118.101)  5.478 ms
 5  219.122.245.9 (219.122.245.9)  6.710 ms  5.790 ms 219.122.245.1 (219.122.245.1)  12.529 ms
 6  60.56.20.198 (60.56.20.198)  7.338 ms 60.56.20.202 (60.56.20.202)  5.193 ms  5.701 ms
 7  74.125.48.226 (74.125.48.226)  4.587 ms 142.250.172.36 (142.250.172.36)  5.379 ms  4.971 ms
 8  142.250.229.5 (142.250.229.5)  5.151 ms 209.85.242.88 (209.85.242.88)  5.455 ms 142.250.229.5 (142.250.229.5)  4.667 ms
 9  72.14.239.25 (72.14.239.25)  6.201 ms 142.250.236.35 (142.250.236.35)  5.083 ms 142.250.239.221 (142.250.239.221)  4.871 ms
10  180.77.190.35.bc.googleusercontent.com (35.190.77.180)  5.672 ms  5.648 ms  6.467 ms

GCP使ってるからGoogleに繋がってるのかな🤔

mochizoomochizoo

ARPテーブル 通信したノードのMACアドレスとIPアドレスの対応関係表

arp -a
あるいは
arp -e

-aか-eはLinuxスタイルかBSDスタイルかの表示方法の違いっぽい。

mochizoomochizoo

telnet 本来は遠隔ログイン用コマンド。でもHTTP体験したりストリーム通信や動作チェックの勉強にもいいらしい。
いわばCLI上でブラウザの代わり的なものをしてくれる。(普段はブラウザがしてくれるため)

 telnet abehiroshi.la.coocan.jp 80
Trying 222.158.205.72...
Connected to abehiroshi.la.coocan.jp.
Escape character is '^]'.
GET / HTTP/1.1
host: abehiroshi.la.coocan.jp 

HTTP/1.1 200 OK
Date: Fri, 28 Oct 2022 06:28:50 GMT
Content-Type: text/html
Content-Length: 538
Connection: keep-alive
Last-Modified: Thu, 27 Feb 2020 07:10:16 GMT
ETag: "21a-59f8969af8600"
Accept-Ranges: bytes
Server: Apache

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta name="GENERATOR" content="JustSystems Homepage Builder Version 20.0.6.0 for Windows">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>�������̃z�[���y�[�W</title>
</head>
<frameset cols=18,82>
  <frame src="menu.htm" marginheight="0" marginwidth="0" scrolling="auto" name="left">
  <frame src="top.htm" marginheight="0" marginwidth="0" scrolling="auto" name="right">
  <noframes>
  <body></body>
  </noframes>
</frameset>
</html>Connection closed by foreign host.
mochizoomochizoo

コンピュータを構成する5つの基本要素
中央処理装置(CPU)
主記憶装置(メモリ)
補助記憶装置(HDD, SSD?)
入力装置(マウスキーボード)
出力装置(ディスプレイ)

USBメモリやSDカードは複数の要素を兼任してる。

機械語 CPUが理解し実行する事が出来る命令

人間が少しでも親しみやすいように16進数で表されることが多い。実際の内部では2進数で処理されている。

→ こんなものを手作業で書くのは人類には難しすぎるのでこれに翻訳される人間に親しみやすい命令が産まれた(Cやアセンブリ言語)

ざっくりプログラムの処理順序は
入力装置でプログラムを入力→いったん補助記憶装置に格納→実行するさい補助記憶装置から主記憶装置に転送されてCPUが解釈、実行

mochizoomochizoo

OS アプリがコンピュータのハードウェアを利用するときに必要になる基本的機能を提供するソフトウェア
基本ソフトウェアとも言う

一般的なソフトウェアはハードウェアを直接操作出来ない → 簡単に危険な操作が出来てしまうため
そのためOSがハードウェアとの仲介をしソフトウェアはどういう処理をしてほしいのかOSに依頼する。(システムコール?)

あってた システムコール == OSへの依頼 あるいはスーパバイザコールともいうらしい。(初耳)

プロセス管理 OSによるアプリの実行制御のこと

Kernel コンピュータが動いている間、主記憶装置に常駐し、すべてのハードウェア、ソフトウェアを管理するコンピュータの心臓とも言える部分。

mochizoomochizoo

ネットワークソフトウェア
・ネットワークハードウェア
・ネットワークOS(NOS)
・ネットワークアプリケーション

ネットワークOS = ネットワーク機器などを制御する機能を備えたOS
昨今の汎用OSはネットワークOSとしての機能も保持している。
ネットワークアプリケーション = ブラウザやメールソフトなどのネットワークを利用するアプリ
ネットワークハードウェア = NICなど 物理的な接続を担う

mochizoomochizoo

コンピュータを構成する基本要素5つはBusという信号路で結ばれる。

それぞれの要素と要素はバスで直接繋がっているわけではなく間にコントローラーが仲介している。

コントローラー 接続された装置に対する処理だけ専門に行うコンピュータ

CPUはこれらコンピュータ全体の指揮をとる。

バスに接続された機器はそれぞれアドレスを保有する。

これらはCPUからアクセスするためのもの。
単なる数字で、メモリマップドI/Oという。

厳密にはCPUがI/Oデバイスにアクセスするための命令をメインメモリへアクセスするための命令と同じメモリ空間で扱う方式らしい (別々にしないことで効率がいいから?)
https://www.sophia-it.com/content/メモリマップトI/O

mochizoomochizoo

バスの種類
・データバス データ転送専門のバス
・アドレスバス アドレスを指示する専門バス
・制御バス データのRead/Writeを指示するバス

mochizoomochizoo

バッファ データを一時的に記憶する場所

バスの転送速度は基本全て同じ。
でもゲームのグラフィック描写のような高速性が求められる場合もあればキーボード入力のような多少低速でも問題ない場合もある。
→このため全ての場合でバスを共有するのは非行率

複数のバスを用意して間にあるコントローラースイッチで切り替えをしている。(高速性が必要なら高速な専用バスへ)

mochizoomochizoo

バス内部では2進数が使用され0と1でデータのやりとりを行う。
0と1の表現は電圧の高低で表現してるらしい。すごい

この時 2進数の1桁を**ビット(binariy digit)(バイナリ単位)**と言う。

mochizoomochizoo

現在の主流
メモリは8ビット単位で区切られてアドレスが付与されている。
つまり1つのアドレスに8ビットのデータが入る。

これらのコンピュータはCPU、**CPUのレジスタ(CPU内部で演算に使用する記憶領域)**の大きさ、レジスタとメモリとを結ぶデータバスがそれぞれ8, 16, 32, 64ビット。そのサイズのデータを一度に処理している。

このデータバスの数値が大きいほど転送速度が速い。

mochizoomochizoo

機器と機器でデータを送受信するときの通信形態
・パラレル通信 一度に複数の信号線を使い並行にデータ転送する(コンピュータ内部のバスはこの方式)
 メリット
  一度にたくさんのデータを転送できる
 デメリット
  ケーブルが太い
  ケーブル間の電波干渉が大きい
  ケーブルの距離が伸ばしにくい
 →基板上の配線などの速度が求められる場所などに向いてる
・シリアル通信 1つの信号線を使って直線的にデータ転送をする
  メリット
   ケーブルを細く出来る
   ケーブルの電波干渉を小さくできる
   そのため長距離化は高周波化が向いている
  デメリット
   一度にたくさんのデータを転送できない
 →コンピュータと周辺機器などの接続に向いてる

mochizoomochizoo

全二重通信 = 同時に双方向で通信できる方式(スマホ通話みたいな)
半二重通信 = 一方が信号を送っているときにもう一方が受信する仕組み(トランシーバー的な)

Hz 周波数。1秒間に何回振動するか

クロック(同期信号) 回路の同期を取るための周期的な信号(コンピュータは電圧の高低で表現している)
https://wa3.i-3-i.info/word1980.html

**IC(集積回路)**だとクロックが速いほど性能が良いということらしい

mochizoomochizoo

タイマーとしてのクロック
OSのカーネル内部にタイマーで使用する時刻を表す変数が用意されている。
この変数は電源投入時に0に初期化。
そして定期的(BSD系UNIXでは10msごと)にハードウェア割り込みが発生すると、変数が1増加する。
この変数の値を調べることで特定の時間が経過したときに特定の処理をすることができる。

変数名はUNIXだとtick Linuxはjiffiesというらしい。

mochizoomochizoo

CPUとメインメモリの間には動作速度の差を吸収するためにキャッシュメモリが存在する。これもバッファ。
具体的には1次キャッシュ、2次キャッシュとか呼ばれるらしい。

フロー制御 バッファがいっぱいになってもデータが失われないようにする仕組み
バッファがいっぱいになったらデータがそれ以上転送されないように流れを中断し、空きがでたらデータの流れを再開する

TCP/IPだとTCPがフロー制御を担うらしい。

mochizoomochizoo

Queue(FIFO) First in first out なデータ構造
Stack(FILO) First in last out なデータ構造 プログラムの変数格納や関数呼び出しの際に戻ってくるアドレスを格納するときに使う

mochizoomochizoo

メモリ内でQueueを実現している方法として、コピーを減らすためにListRing bufferという手法が使われる。

List データに前後のつながりを表す情報を付属しそれが連なったデータ構造
Ring Buffer バッファの先頭と最後がワープしてつながってるような構造(ドーナツ?)
デバイスドライバやNICで使うらしい

キャッシュ 再度同じデータにアクセスするとき一時的に記憶してあるキャッシュから取得して効率化する仕組み

キャッシュの管理方法 = タイマーエイジングという手法が多い
これらはキャッシュにデータを格納する際に有効期限をつけておきそれが過ぎたらデータを削除する

LRU(Least Recently Used) キャッシュの管理方法の一つで最近アクセスされていないデータを消していく方法

mochizoomochizoo

Byte 1Byteで8ビット 10進数で0〜255 16進数で0〜FFまで表せる

1オクテット 8ビットのデータであることを強調

1KByte = 1024Byte = 2^10

mochizoomochizoo

2進数の基本的演算方法
論理積(AND) 2つの値がともに1のとき計算結果が1 0が一つでもあると0
論理和(OR) 2つの値のうちどちらかが1または両方1の場合計算結果が1 両方共0のとき0
排他的論理和(XOR, EOR) 2つの数字が同じ時は0 違う時は1
補数(NOT) 1のときは0 0のときは1 反転 プログラミング言語でみる!に近い

mochizoomochizoo

2Byte以上のデータの格納方法
ビッグエンディアン 上位の桁ほど下位バイトに格納
リトルエンディアン 上位の桁ほど上位バイトに格納

ネットワークバイトオーダー ネットワークを通じて複数のバイト(多バイト、マルチバイト)で構成されるデータを記録・伝送する際に、各バイトをどのような順番で記録・伝送するかを定めた順序。
TCP/IPはビッグエンディアンらしい。

https://e-words.jp/w/ネットワークバイトオーダー.html

mochizoomochizoo

ASCIIコード表 英語のアルファベットを数字に変換する規則
文字を数字化 = 符号化
数字を文字化 = 復号化

データフォーマット(形式) 決められたデータ構造(UTF-8とかMP4とか)

mochizoomochizoo

コンピュータの主なソフトウェアの種類
・アプリ まぁよくあるやつ
・OS ハードウェアを管理しアプリとハードウェアを繋ぐ心臓部分
・ライブラリルーチン アプリに共通して必要になる処理をまとめたもの(libcとか?)
・デバイスドライバ 接続したデバイスを**ドライブ(動作させる)**させるためのソフトウェア ゲーミングマウスとか繋ぐと入る
・ファームウェア OSをサポートするソフトウェア BIOS(Basic input output system) **IOCS(Input Output Control System)など これらはROM(Readonly memory)**に格納されている 電源を切っても消えない

mochizoomochizoo

コンピュータのブートの大まかな流れ

ファームウェアだけはROMに格納されている。
電源を入れるとファームウェアが実行。コンピュータ内の様々な検査や初期化が行われる
終わったらファームウェアは補助記憶装置に格納されたブートローダを主記憶装置にロードする。
ブートローダはOSのカーネルを補助記憶装置からロード
カーネルの実行。
カーネル実行後接続されたハードウェアを動かすためのデバイスドライバなどの初期化やネットワークの環境設定を行う
OS起動

mochizoomochizoo

メモリ領域の大まかな区分け
・OSのカーネル領域 OSによりメモリ保護されておりアクセス出来ない
テキストセグメント プログラムの命令を格納
データセグメント データを格納 読み込み専用(定数) 静的読み込み領域(静的変数) 動的読み込み領域(ヒープ) だいたいコードを書くとここが大きくなっていく
スタックセグメント プログラム実行中、動的に利用される領域。キャッシュやバッファ?テンポラリというらしい。FIFO構造

mochizoomochizoo

タスク or プロセス プログラムの実行単位
マルチタスク 複数のプログラムを同時に実行できるシステム

コンテキストスイッチ CPUがプロセスの切り替えをする事

mochizoomochizoo

仮想記憶装置においてプロセスは1つのアドレス空間が仮想的に割当てられえいる。
このアドレス空間は物理的なメモリ上のアドレスとは関係がない。(仮想アドレス空間 論理アドレス空間)
アプリはこの仮想アドレス空間の番地を使用してプログラムを作る。

実際に実行されるときにCPUがこの仮想アドレス番地に対応する物理アドレスに変換し、処理する。
このとき仮想アドレスと物理アドレスの対応関係をアドレス変換テーブルという。
**MMU(Memory management unit)**がこの変換処理を行う。

Swap 物理メモリに大きなプログラムやデータを読み込みすぎた際に物理メモリが足らないことある。こうならないように物理メモリに存在するプログラムやデータをHDDに待避させること

mochizoomochizoo

CPUの命令処理は1次元的。つまり一つ一つ命令を順番に読み込み解釈していく。
この実行される命令列をThreadという。

プロセスは最低1つのスレッドを持つ。 また、複数のスレッドを持つこともありマルチスレッドともいう。

マルチの場合スレッドごとにスタックセグメントが用意されているらしい。

ただしテキストセグメントは一つ。つまり命令を格納するメモリ領域は一つ。共有して使う。

排他制御(セマフォ 割り込み禁止) データセグメントは複数スレッド間で共有メモリとして使用できる。ただ読み書きする際に実行するスレッドが入れ替わってデータの整合性が崩れないようにする制御が必要。その制御のこと。

コンピュータ・プログラムの実行において、複数のプロセスが利用出来る共有資源に対し、複数のプロセスからの同時アクセスにより競合が発生する場合に、あるプロセスに資源を独占的に利用させている間は、他のプロセスが利用できないようにする事で整合性を保つ処理の事

https://ja.wikipedia.org/wiki/排他制御#:~:text=排他制御(はいたせい,処理の事をいう。

mochizoomochizoo

オーバーヘッド ある処理をしなければならないときに避けられない別の処理の事

コンテキストスイッチは結構コストがでかい(アドレス変換テーブルを入れ替えるため) → このオーバーヘッドを小さくするにはスレッドがいい。 = 1つのプロセス内部で並列動作できアドレス空間が変化しないため、

デメリットとしてスレッド間にはメモリ保護機能がない→1つのスレッドがバグると全部逝く可能性あり。 デバッグが難しい。

PHPは1リクエスト1プロセスでマルチプロセスだから安定しているみたいなのはどこかで見た。

mochizoomochizoo

CPUの大まかな動作モード
ユーザモード アプリを実行するとき。制約が結構ある。メモリの特定アドレス空間しかアクセスできないしハードウェアに割り当てられたメモリ空間にもアクセスできない。
カーネルモード(スーパバイザモード) カーネルを実行するとき。全てのハードウェアにアクセスできる。

なぜ別れているか? = アプリのバグで全体の異常動作を避けるため。

システムコールを呼び出す → CPUがカーネルモードに移行

割り込みハンドラ 割り込みサービスルーチン(ISR) ハードウェア割り込みを処理するルーティン カーネルモード

mochizoomochizoo

NIC(Network Interface Controller)がパケット受信するときの大まかな流れ
NICは常に入力されるパケットを監視している。(実際は電圧の変化や光の点滅で判断してるらしい)
パケット到着→NICのバッファに格納
OSはNICにパケットが入力されたことを感知 → 受信処理をする。
 ではどのようにOSがパケットを感知するか? = ビジーウェイト型割り込み型の大きく分けて2種
 ・ビジーウェイト型 定期的にNICの状態を検査する(ポーリング的な?)
 ・割り込み型 NICにパケットが到着した際にCPUに割り込みを入れてパケットと到着を伝える方法

多くの汎用コンピュータのネットワーク処理は割り込み型
 => ビジーウェイトは欠点が多い
   どれぐらいの間隔でチェックするばよいのか(短いとそれだけコストがかかり長いとムダが発生する)

割り込みはタイマーでも使える => 「1秒後にこの処理をしたい」 => 1秒後に割り込みを発生させればよい。(それまでは別のことにCPUが専念できる)

mochizoomochizoo

プリエンプティブ 実行中のタスクを中断しながら、別のタスクにCPUを割り当てて処理を行う方式
https://spica.co.jp/it-school/cloud-notes-it/commentary/os-27/#:~:text=プリエンプティブ方式は、プリエンプションとも,処理を行う方式です。

OSがプロセスからCPU使用権を返してもらう主な方法
・システムコール OSが提供するサービスをプロセスが要求する
・ ハードウェア割り込み 周辺機器あCPUに割り込み信号を送り実行中のプログラムの処理を一時的に中断させて特別な処理(割り込みハンドラ)に制御を強制的に移す事

CPU使用権の変更方法
イベント駆動 周辺機器への入出力が発生したときにCPUの処理を切り替える方法(イベントによって処理が変わる JavaScriptみたいな)
プリエンプティブ 上記

プリエンプティション 強制的に処理を切り替える事
UNIXだと最大処理時間0.1秒 0.1秒ごとにプリエンプティションが行われる。

この最大実行時間をタイムクォンタムと言う。

この時間が切れたら次に待っているプロセスに使用権を移す。この順番に別の処理に切り替えることをラウンドロビンという。

スケジューリング どのプロセスを実行するかを決定すること
スケジューラ スケジューリングを実行するプロセス

mochizoomochizoo

遅延実行 多少処理を送らせても問題ないハードウェア割り込みとかはまとめて処理するようにしてシステムの性能を向上させるのが遅延実行。

mochizoomochizoo

仮想化は大まかに分けて2種類
・ホスト型 よくあるタイプ。OS上に土台となるソフトウェアをインストールし、そのソフトウェア上で仮想マシンを稼働させる方式。(Virtual Boxとか?) デメリットとしてハードウェアへのアクセスにホストOS経由になるのでオーバーヘッドがある。
ゲスト型ではホストOSからは一つのアプリケーションとして動作する

・スーパバイザ型
サーバーへ直接インストールし仮想マシンを稼働させる方式。クラウドなどの主流
ホストOSを必要としないためハードウェアを直接制御することができる。
https://thinkit.co.jp/story/2012/10/17/3722

仮想化されたコンピュータ(VM)上のOSをゲストOSという。

mochizoomochizoo

第四章 ネットワークの基礎知識とTCP/IP

mochizoomochizoo

ネットワークの基本構成要素
・Node(点) 通信する機器(コンピュータ) Linkの分岐点もNode(この場合ルーターとか)
・Link(線) 通信を伝送する信号線

ホスト 末端ノード
ルータ リンクの分岐点にあり通信の中継をするノード

=> TCP/IPではホストもルータもノード

mochizoomochizoo

トポロジ ネットワークの形状(スター型やメッシュ型のような)

ネットワークの通信レベルの主な2種類
データリンク技術 リンク内通信技術
 社内LAN構築など Ethernet Wi-Fi PPPoE(Point-to-Point Protocol over ethernet)
インターネットワーキング技術 リンクを越えた通信を実現する技術
 IPなど

そもそもPPPとは? => コンピューター同士が1対1の通信を行うための規約を定めたプロトコル。電話回線などの回線を利用した通信方式の一つ。

PPPoEはそれをEthernet上でも適用できるようにEthernet上でPPPのデータをやり取りする技術?
WikipediaだとPPPoEはイーサネットフレーム上にPPPをカプセル化する通信プロトコルと書いてある。

Ethernet frame => イーサネットフレームは、イーサネットLANの通信を行う際に使用するデータのフォーマット(https://www.infraexpert.com/study/ethernet4.html)

https://ja.wikipedia.org/wiki/Point-to-Point_Protocol

https://www.ntt-west.co.jp/business/glossary/words-00120.html

mochizoomochizoo

プロパイダ同士のネットワークは**IX(Internet exchange)**経由で繋がっているらしい。

IXがハブとなる。

mochizoomochizoo

TCP/IPはクライアント/サーバーモデル。
サービスを提供する側 サーバー
サービスを受ける側 クライアント

P2P クライアント/サーバーモデルのような主従関係がない。
これは1台のコンピュータ(Node)がサーバーでありクライアントになりうる形態。

mochizoomochizoo

ネットワークの主な通信種類
・パケット交換方式
・回線交換方式

TCP/IPはパケット交換方式

mochizoomochizoo

ネットワークの通信相手から見た観点
ユニキャスト 1対1のような形式。最も一般的。インターネットのほとんどはこれ。
マルチキャスト 特定のグループ内での通信。複数の端末(ホスト)に対して同一データを一斉に送信する方法。(https://atmarkit.itmedia.co.jp/aig/06network/multicast.html#:~:text=マルチキャストとは、複数の,が期待されている。)
ブロードキャスト 特定の相手を指定せず、同じネットワークに参加するすべての機器に向けて一斉にデータなどを送信する方法(https://e-words.jp/w/ブロードキャスト.html#:~:text=ブロードキャスト 【broadcast】 ブロードキャスティング %2F,することを意味する。)
エニーキャスト 同じ宛先を持つノードのうち送る人にとって一番近いノードに届くような通信

mochizoomochizoo

ネットワークに接続された機器間の通信に利用するデータ転送放棄
CSMA ブロードキャスト型で使われる。それぞれのノードは常にネットワークを監視。回線に信号が流れてない時だけパケットを送信。 パケットは全てのノードに転送され受け取った側は送信アドレスが自分じゃないパケットは破棄する。 豪快

CSMA/CD CSMAの拡張。衝突検知機能と再送機能を追加。CSMAはコリジョンの危険がある(複数のノードが同時にパケット送信した場合パケットが破壊される)
CSMA/CSはEthernetで利用される。

スイッチ スイッチと呼ばれるネットワーク機器を利用した手法。ノードは全てスイッチに接続。このスイッチが送信先アドレスを見て送信すべきノードを判断。EthernetのスイッチングハブやATM(銀行ではない)

トークンパッシング 通信権をトークンと呼ばれるフレームで制御し一度に1つのノードしかデータを送信しないように制御する手法。
=> 衝突を防ぎやすい。ただし制御が難しいのでコストがかかる。

mochizoomochizoo

ネットワークの大まかな構造
バックボーン ネットワークとネットワークを繋ぐ要となるネットワーク。それぞれのネットワークから送られてくるパケットを転送する。 ネットワークの重要箇所なので障害が起きないように耐障害性を高める必要がある。
スタブ 出口が一つしかないネットワーク。家庭のネットワークはだいたいスタブらしい(確かに)
マルチホーム 出口が2つ以上あるネットワーク

mochizoomochizoo

TCP/IPはパケット交換方式のさまざまな技術で構成されている。
大きく4つ
アプリケーション  アプリを実行するのに必要なのはトランスポート以下のモジュール
トランスポート アプリ間で通信できるようにするためのもの。ポート番号の管理とデータエラーのチェック TCP/IPではトランスポート層にTCPとUDPが使われる。どちらもポートの管理とエラーチェック
 TCP 送り先に到達しなかったパケットを送り直してデータが到達することを保証
UDP とりあえず投げる!!
インターネット この場合のインターネットはインターネットワーキングのこと。IPが該当
  IPモジュールともいう。役割は通信相手のコンピュータまでパケットを届けること。
ネットワークインターフェース ネットワークハードウェアとインターネットモジュールを結ぶもの。

これらひとつひとつをモジュールとしてそれぞれ直列に並べた構成にするとTCP/IPが実現できる。
各モジュールで必要なヘッダがつけられる。
ヘッダにはパケット配送に関するデータや何というプロトコルによって作られたかなどの情報もある。

トレイラ  相手のコンピュータが受信したときに、情報が伝送途中に壊れていないか確認するためのチェックコードのことhttps://ascii.jp/elem/000/000/424/424788/2/

mochizoomochizoo

OSI参照モデル ISOという団体が**OSI(Open Systems Interconnection: 開放型システム間相互接続)というプロトコルを作成するときに作った階層モデル。

OSI参照モデルは通信に必要な機能を7つの階層に分けている

mochizoomochizoo

OSI参照モデルの階層
・アプリケーション層
 アプリケーションを実現するために必要になる通信手順を定める。
 HTTP, telnet, FTPなど
・プレゼンテーション層
 通信で使用するデータ・フォーマット(データの表現形式)を規定する。
 エンディアンの違うコンピュータ同士の差を吸収するのがここ?
 コンピュータ固有の表現方式ネットワーク共通の表現形式に変換する。
・セッション層
 通信する機器間でデータ通信の開始、終了、同期ポイントの管理をする。
 コネクション(通信の接続)志向だとコネクションの確立と終了の管理。
 同期ポイント どこまで通信されたか
・トランスポート層
 通信の際の両端のコンピューター間での通信制御を担う。
 トランスポート層以上のレベルで転送を中継する装置をゲートウェイという。プロキシサーバーやMTAもゲートウェイ
コンピュータネットワークをプロトコルの異なるネットワークと接続するためのネットワークノードともいうらしい( https://www.itpassportsiken.com/word/ゲートウェイ.html)
・ネットワーク層
 物理層が関節的に接続されたネットワークで終点ノード間の通信を可能にする。
 ネットワーク層レベルでネットワークを接続する機器をルータという。
・データリンク層
 物理層で直接接続されたノード間の通信を可能にする
 このデータリンク層レベルでネットワークを接続する機器をブリッジという
 スイッチングハブはブリッジの一種
・物理層
 ビットの列を電気信号や光の点滅に変換したりその逆
 物理層レベルでネットワークを接続する機器をリピータという

mochizoomochizoo

セグメント TCPによって利用するデータリンクで決められた最大のペイロード長に区切られたデータ
MTU データリンクで決められた最大のペイロード長
 Ethernet => 1500バイト
 TCPの最大セグメント長をMSSという
フレーム Ethernetにおけるパケットの呼び名

mochizoomochizoo

帯域 == 伝送速度
bpsで表す。bit per second(1秒間に何ビットのデータを転送するか)

スループット 実際のネットワークにおける転送速度 実際にデータを転送して得られた値

mochizoomochizoo

主な輻輳箇所
・帯域が狭いところ
・複数のネットワークが合流する部分
・処理能力が低いルーター箇所といった止まらなければならない箇所

ルーターのパケットキューがいっぱいだった時に起こる挙動
・キューが空くまで待つ
・パケットを捨てる
TCP/IPでは輻輳を避ける責務はルーターではなく両端のコンピューターが受け持つ。

mochizoomochizoo

IPの重要な仕事 = パケットを相手まで送り届けること

IPの欠点
・パケットが目的地まで到達する保証なし
・送信順で届くとは限らない
・1つのパケットが複数に増える可能性
・ペイロードが破損していないかの保証はない
・一度に運べるペイロードが65515バイトのみ
IPの仕様では最低556バイトのデータから送れる

これらの欠点を補うのが上位プロトコルのTCP

IPアドレスはコンピューターのネットワーク上の位置
具体的に
・どのネットワークか
・そのネットワーク内の位置

IPアドレスは大きく分けて2つ
・グローバルIPアドレス インターネットに接続されるホストやルーターにつけられる一意なアドレス
・プライベートIPアドレス 私的なネットワークで使用するためのIPアドレス