
【ネットワークの基礎】TCP/IP特訓day
⚠️こちらは改修予定です。とりあえず殴り書きを投稿しています
イントロ
学習背景
42でコンピュータサイエンスを学んでいると、そもそもコンピュータ同士の通信、つまりインターネットネットワークに関連する歴史や現在の構成・技術の潮流などに興味が湧いてきます。
そこで、現代インターネットの基礎と呼び声がたかいTCP/IPについて集中的に学ぶ時間を作りました。土曜日の午後13時半から5時間ほど大学の図書館にこもって学んだので、メモを残しておこうと思います。
注:初学者が1日学んだだけなので言葉のミス・解釈のミスなど散見されると思います。もし発見された際は、お気軽にコメントなどでお伝えください。
そもそもtcp/ipとは何か
まずTCP/IPは何者なのか。全く手触り感がないのでdeepseekに雑に聞いてみた。
TCP/IP(Transmission Control Protocol/Internet Protocol)は、インターネットや多くのプライベートネットワークで使用される通信プロトコルのセットです。データがネットワーク上でどのように送受信されるかを規定し、異なる種類のコンピュータやデバイス間での通信を可能にします。
イメージとしては、IPがデータパケットのルーティングを担当し、TCPが指定されたルーティングにおいて信頼性の高い通信を行う、という役割分担なのだろうか。ここは自分も正直理解が浅い。
ちなみに、TCP/IPと言いながらTCPとIPの2つのプロトコルのみを示しているわけではないらしい。(初学者殺しであるが)IP通信で使用するプロトコル群( IP, ICMP, TCP, UDP, HTTP, SMTP, SSH,TELNETなど )を総称してTCP/IPと呼ぶとのこと。
TCP/IP以外でよく知られているのは、IPX/SPXとAppleTalkが挙げられるらしい。
ネットワークの歴史
そもそもプロトコル(ルール)の前に、ネットワークがどのような変遷をたどってきたのか調べてみた。
基本的な流れは以下の通りである。
スニーカーネットワーク(人がデータを持ち運ぶ)
↓
LAN(ローカルのネットワーク)
↓
WAN(LAN同士を接続した広範囲のネットワーク)

1960年代
インターネットは軍事用に開発が進められた、というのは有名な話かもしれないが、1969年にアメリカの国防総省の高等研究計画局(ARPANET)を開発したのがインターネットの原型と言われているらしい。
1970年代
TCP/IPが開発されたのが1970年代半ばらしい。1960年代に確立された「データをパケットへ分割する技術」をベースに、異なるネットワークでのデータ転送を可能にしたことが主要な功績のよう。
1980年代
軍事利用の次に教育利用で発展したのも聞いたことがあった。1986年にアメリカ国立科学財団(NSF)がNSFNETを設立し、学術機関のネットワークが拡大されたとのこと。DNS(IPアドレス→ドメイン名への変換サービス)が導入され、アドレスが人間に認識しやすくなった時期らしい。
ドメイン名:example.com(human friendly!!!
IPアドレス:192.168.69.33(Machine oriented..
1990年代
World Wide Webができたのはこの時期らしい。1989年にTim Berners-Lee氏が提案し、1991年に初めてのwebサイトが公開されたらしい。WWWない生活なんて今では考えられない。
2000年代
ADSLやブロードバンド回線が普及し、高速なインターネット接続が可能になり、同時に普及したスマートフォンによるモバイルインターネットが急速に拡大した時代。web2.0と呼ばれるUGC(User Generate Contents)やSNSメディアの台頭もこの時期。
2010年代
超高速・低遅延の5Gなどの普及により動画コンテンツやオンラインゲームなどのコンテンツが爆発的に普及した。インターネットに接続されるデバイス数が急増し、IoTが注目される。この頃からAWSやGCPなどのクラウドサービスが一般的になってきた。
2020年代
もはやインフラとして完全に確立し、さまざまなアプリケーションが発展。どのような総括になる10年なのか、もうすでに楽しみ。
基礎用語
領域特有の単語をとりあえず書いていく場所とします。
プロトコル
通信で使用するルール。インターネットではTCP/IPがデファクトスタンダードとなっているが、そのほかにもIPX/SPXやNetBEUIがあるらしい。
帯域幅
使用できる周波数の幅。テレビやラジオでもよく電波法というもので規定された帯域を使用しているが、それのインターネット版だと思えば良い。道路に例えられることが多く、広ければ広いほどたくさんのデータ量を同時に通信できる。つまり、同じデータ量の場合は広い道路の方が送る時間が短くなるので、帯域幅が広い=データ転送速度が大きい、という意味で用いられることも多い。
道路の広さ狭さと同様のイメージで、ブロードバンド・ナローバンドという表現も用いられる。
OSI参照モデル
スイスのジュネーブに本部を置く非政府機関である国際標準化機構(International Organization for Standardization, ISOと略される)が策定した異なるベンダと相互通信するための最低限の決まり事リストのようなもの。その主流となっているネットワーク・モデルがISOの策定したOSI参照モデルである。
各レイヤは機能が違い、独立しているのが特徴で、それぞれのレイヤの変更は他のレイヤに影響が及ばないところも管理などにおいて大きな利点となっているらしい。
具体的には下記の7つの層に分かれており、上の層から制御データを付与していき、最下層の物理層まで到達すると電気信号化されて相手に送られる。

レイヤ7:アプリケーション層
ネットワークというサービスを提供する層。
レイヤ6:プレゼンテーション層
データの形式を決定する層。
レイヤ5:セッション層
名前通りセッションを管理する層。
レイヤ4:トランスポート層
信頼性の高い通信サービスを保証する層。
レイヤ3:ネットワーク層
データの転送・運ぶルート・宛先の決定などを行う層。
レイヤ2:データリンク層
データの伝送制御を行う層。
レイヤ1:物理層
電気・機械的なルールを決めた層。
カプセル化 / 非カプセル化
上記の通り、アプリケーション層から物理層までデータ送受信のためのさまざまな情報をパケットに付加して送ることになるが、その付加情報を増やすプロセスと、逆にその情報を削ぎ落としていく受信のプロセスはカプセル化 / 非カプセル化と呼ばれているらしい。最終的に作られるパケットは「フレーム」とも呼ばれる。

TCP/IPの制御モデル
基本的に上記で紹介したOSI参照モデルと同様の考え方であるが、TCP/IP制御モデルでは層がまとめられている部分がある。OSI参照モデルとの対応とプロトコルの対応をまとめた表があったので下記に置いておく。

アプリケーション層
HTTP, FTP, SMTP, SSHなどのプロトコルが含まれ、直接ユーザとやりとりする。
トランスポート層(TCP)
TCP(信頼性重視)やUDP(効率重視)というプロトコルがデータの転送を管理し、主にノード間のデータ転送の信頼性を確保するための規定。
インターネット層(IP)
ネットワーク間のエンドツーエンド通信のための規定を行う。IPによりネットワーク上のノードに対して自分の位置情報となる論理アドレス(IPアドレス)を割り当てられるのでエンドツーエンドの通信が実現される。
ネットワークインターフェース層
直接的に接続されたノード間の通信のための規定を行う。主なプロトコルはイーサネットとPPP。
EthernetはLANの通信で使用され、MACアドレス(デバイスを一意に認識する識別子)を使ってローカルネットワーク内のデバイス間通信を実現している。
PPP(Point-to-Point Protocol)はWANの通信に利用され、2つのノード間の直接接続を確立する。
上記の4階層モデルは、実際にWebアプリケーションが通信を行う時を想像するとイメージしやすい。
ユーザがwebブラウザでURLを入力
HTTPリクエストが生成され、TCPに渡される
TCPがリクエストをセグメントに分割し、シーケンス番号を付与
IPがTCPセグメントをパケットにカプセル化して宛先のwebサーバに送信
webサーバがリクエストを受信してHTTPレスポンスを生成
レスポンスが同じ経路でユーザのブラウザに返され、webページが生成される
LAN・WANとネットワーキング・デバイス
LAN(Local Area Network)は自宅やオフィスなど狭いエリアでのネットワークを指す。ネットワークを構築しようとするとパソコンやプリンタなどのホスト、ネットワーキングメディアとしてのケーブル、そしてコンピュータとケーブルを接続するNIC(Network Interface Card, ニック)が必要となる。最近はネットワークに接続するのが必須になってきているので、NICは基本的には組み込まれていることが多い。
1対1の通信ではここまでの機器で問題ないが、複数のホストを接続したい場合は通信を制御するネットワーキング・デバイスが必要になる。先ほどのOSI参照モデルでのレイヤごとにそれぞれ役割が異なり、別のデバイスが必要となる。
レイヤ1(物理層):リピータ・ハブ
ケーブルを流れる電気信号を増幅したり分配したりする。
レイヤ2(データリンク層):ブリッジ・スイッチ
一言で言うと信号の役割。データを通す・通さないという制御を行なう。
レイヤ3(ネットワーク層):ルータ
宛先までのルートを決定する。
レイヤ1(物理層)
我々人間は何かしらの信号の形で情報の通信を行っている。通信には連続的なアナログ信号と非連続的なデジタル信号がある。
一般の電話回線は音波というアナログ信号を使用しているので、コンピュータが使用しているデジタル信号の情報を送受信するためには「モデム」という機器を用いてデジタルデータをアナログ信号へ変換して通信を行う必要があります。
ADSLモデムとケーブルモデムの特徴は、普通のモデムと違いパソコンとLANケーブルで接続される所であるらしい。モデムとTAはEIA/TIA-232という規格で作られたケーブルで接続する。
ISDN(Integrated Services Digital Network)は、デジタル通信を提供する電話回線技術です。音声、データ、ビデオなどの複数のサービスを統合して提供します。
CATV(Cable Television)は、ケーブルテレビのインフラを利用してインターネット接続を提供するサービスです。
ADSL(Asymmetric Digital Subscriber Line) は、既存の電話回線を使用して高速なインターネット接続を提供する技術。電話用の音声信号と通信用のデータ信号の2信号が同時に流れており、それらを電話機とADSLモデムに振り分ける機器がスプリッタである。

ネットワーキングメディアの主要規格団体
・IEEE(アイ・トリプルイー):電気電子学会
・EIA/TIA:米国電子工業会
・UL:損害保険者研究会,
→ 製品の安全性を試験する団体。
ケーブル3種類
上記3団体が規定するネットワーキングメディアは、銅線2種と光ファイバの合わせて3種類がある。

特に通信で問題になるのは、減衰・ノイズ・衝突(コリジョン)の3点。
同軸ケーブルは硬いシールドで外部からの干渉を防いでいるため長距離まで信号が届くという点があるが、硬さとその高価さのためにシールドなしのツイストペアケーブル(UTP)がLANでは推奨されている。
UTPでは銅線をペアにしてツイストし、銅線同士の磁場を打ち消し、外部からの干渉も軽減することができるキャンセレーションという技術を用いて開発されている。光ファイバは光を用いるため電磁的な干渉を受けない、かつ超高速という特徴があるが、非常に高価になってしまう。


先頭の文字はデータ転送量(Mbps),BASEはデータ伝送方式であるベースバンド伝送(直接多重化しない)方式,Tはツイストペアということを示しているらしい。
リピータ
上記表の通り、UTPは最長距離が(当時)100m程度のことが多い。それ以上は届かないのはもちろん、減衰やノイズ蓄積してしまうため信号を増幅・整形する必要がある。その増幅整形装置がリピータである。
ハブ
ハブはマルチポートリピータと呼ばれる。つまり複数機器同士を接続できるリピータなのである。
複数のメディアを複数の機器が使用している環境、つまり共有メディア環境という状態になるわけだが、ハブの内部は1つの伝送路しか持たないため、信号の衝突が起きる可能性がある。そのため、衝突が発生する可能性がある範囲、衝突ドメインをいかに狭くできるかが肝要である。そのために利用する機器が上位レイヤーのスイッチやルータである。
ネットワークトポロジ
ノードとリンクの物理的な配置のことを「物理トポロジ」、データの流れという観点から見た配置は「論理トポロジ」と言われる。
物理トポロジには以下の5種類がある。
バス型
リング型、二重リング型
スター型、拡張スター型
ツリー型
完全メッシュ型、部分メッシュ型
論理トポロジにはリング、バス型の2つがあり、データがノードを循環するのがリング型、全てノードに伝送されるのかバス型となる。
物理トポロジと論理トポロジは必ずしも一致しないので注意。

レイヤ2(データリンク層)
電気信号の伝達を行う物理層(レイヤ1)に続いて、データの伝達制御を行なうデータリンク層(レイヤ2)に進む。
レイヤ2にはIEEEによってさらに2層に分割されており、論理リンク制御副層(LLC)とメディアアクセス制御副層(MAC)の2つとなる。LLC副層では実際の機器に依存しない簡易的なエラー制御や上位サービスの指定などを行う。MAC副層ではメディアへの接続を取り決める。メディア・アクセス制御が用いられる。つまりMAC副層でどのように送るかを決定し、LLC副層でどのように扱うかを決める、という形らしい。



アドレッシング
データを送るためにはそれぞれのデバイスを認識するための記号が必要である。各デバイスにユニークなaddressを割り当てることをアドレッシング(address + ing)という。
そして、このアドレスには論理アドレスと物理アドレスの2種類があル。論理アドレスはレイヤ3で「どのネットワークの誰に届けるか」を識別するために必要となり、物理アドレスはレイヤ2で「メディアに直接接続されている誰に届けるか」を識別するために用いられる。
そして物理アドレスの代表はネットワークデバイス(NICなど)に一意に割り当てられるMACアドレス(Media Access Control Address)であり、48ビットを2桁ずつハイフンで区切る(00-90-99-32-BA-FF)や4桁ずつドットで区切る(0090.9932.BAFF)のように16進数12桁で表記する。48ビットのうち24ビットは「ベンダーコード」といい、製造ベンダにIEEEが割り当てたコードとなる。
MACアドレスは一意に割り当てられるものの、位置関係は全く情報として含んでいない。LANの場合は問題にならないが、WANの場合はある程度の位置情報を把握してから中継地点に送りたいというモチベーションが働く。
イーサネット
イーサネットは1970年代後半にXeroxが開発し、IntelとDEC社で合同で企画をまとめたEthernet-Ⅱ(DIX-Ethernet)が誕生した。非常に便利だったためIEEEが標準化したのがIEEE802.3となる。

Ethernet-Ⅱでは最小46、最大1500バイトのデータが組み込め、1フレーム全体は最小64バイト、最大1518バイトと考える。(プリアンサンブルはフレームの前触れでしかないため除かれることが一般的らしい)
プリアンサンブルが終わると、宛先MACアドレスと送信元MACアドレス、タイプがありデータの次にはエラーチェック用のFCSで1フレームが終わる。
イーサネットのフレームは前述のNICを通りメディア上を流れる。ブロード型という全てのノードに到達する特徴を持つ。つまり、データを送るときには常に全員が受け取る。全員に送っておけば、送りたい人にも必然的に届くであろうというかなり脳筋戦法。
イーサネットは当時主流であった同軸ケーブルを使用し伝送路が1本しかないため、衝突が発生しうる。それを防ぐための制御がCSMA/CDという。これは3つの行動の頭文字をとったものであり、誰も通信していなければ通信を送るというシンプルなものである。
Carrier Sense(搬送波感知): データを送信する前に、ネットワーク媒体(例: ケーブル)が使用中かどうかを確認します。
Multiple Access(多元接続): 複数のデバイスが同じネットワーク媒体を共有して通信する。未使用だったら通信可能。
Collision Detection(衝突検出): 通信速度は有限のため、データ送信中に他のデバイスとのデータ衝突(コリジョン)が発生する場合がある。その場合は通信を一旦辞めて少し待つ(バックオフ)。全ての危機が同じ時間待機すると食事する哲学者問題になるため、ランダムな時間待機する設定になっている。
そして、受信側は宛先MACアドレスと自分のMACアドレスを比較して破棄するかどうかの判断を下す。自分宛であった場合はエラーチェックを行い、問題がなければ上位のレイヤ3へ引き渡す。
CSMA/CDは非常にシンプルなアクセス制御であり、それゆえに普及しているがデメリットもある。一定時間送信が失敗し続けたエラーフレームが問答無用で破棄される点である。しかもそれは送信した側には伝達されない。このような「最大限努力するが、到達は約束できない」ようなデータ配送形式のことを「ベストエフォート型配送」というらしい。
また、イーサネットは誰かが送信中には受信しかできない、同軸ケーブルの仕様である伝送路が1つしかないということより半二重通信方式であるというところも欠点であり、これはスイッチを利用すると解消(全二重通信が可能に)できるらしい。
IEEE802.5とFDDI
IEEE802.5とFDDIはリンク型トポロジであり、トークンパッシングアクセス制御を用いている。
IEEE802.5はIBMが開発したトークンリング規格を標準化したものであり、トークンという送信権利バッジのようなものがリングの中を流れている。トークンが来た時のみ送信権利があり、送信できたかの受領印も返ってくる。つまり、衝突がおこらず送信は確実に実行される、そして送信が完了したかがわかる仕組みとなっている。しかし、送信元が送信後に故障した場合は返信受領元がいなくなることになり、トークンにバグが起きる。つまり誰も送信できないネットワークになってしまうという状態が起こり得てしまう。そのためにMSAUというトークンリング用の特殊なハブを使用し、監視するノードを配置しておく。機器の費用がかかる、データ転送速度が遅いなどの欠点から、イーサネットよりは普及していない。
そして、その光ファイバーを用いる版がFDDI版である。高い信頼性のもと、光ファイバーによる広範囲・高速なLANを構築はできるが、費用が爆増するというわかりやすいデメリットも持ち合わせる。
ブリッジ
LANとLANを接続するレイヤ2の機器であるブリッジには大きく分けて4種類ある。
ソースルートブリッジ
→IEEE802.5同士を繋げる。
トランスペアレントブリッジ
→同じアクセス制御方式のセグメントを繋ぐ。イーサネットとイーサネット、FDDIとFDDIなど。
変換ブリッジ
→異なるアクセス制御方式のセグメントを繋ぐ。
エンキャプスレーションブリッジ
→同じアクセス制御方式のセグメントを、間にWANなどを通して中継する。
ブリッジはハブ(レイヤ1)より高性能であり、MACアドレスにより通過できるかフィルタリングを行う。具体的には、ブリッジはポートごとにアドレステーブルを持ち、やり取りされるフレーム情報からそのポートと接続しているデバイスを覚えていく。フレームを受信したポートのアドレステーブルに送信先のMACアドレスが記録されている場合は通過させないという関所のような役割を果たす。
この効果により、ネットワーク全体のトラフィックが減り、衝突の確率が減る。そして、衝突の結果発生するJAM信号や壊れたデータも止められることにより、隣のセグメントの衝突を気にしなくて済む。つまり、衝突ドメイン(衝突の影響範囲)がブリッジごとに区切られるという大きな利点がある。
スイッチ
マルチポートのブリッジのようなもの。ここではレイヤ2で動作するレイヤ2スイッチを表す。スイッチもブリッジ同様にMACアドレスによるフィルタリングを行うが、どのポートに送るかどうかのスイッチングの機能も持つ。

スイッチは衝突を避けるためにStore & Forward方式を採用しており、下記図のように伝送路があくまでパケットを一時的に保持できるバッファメモリを保持している。
1ポートにつき1デバイスしか接続しなかった場合、そのメディアを独占できる。つまり、つまり、そのメディアの帯域幅を効果的に使用できる。そして上記のStore & Forward方式とスイッチは宛先が繋がっているポートだけしかフレームを送信しない、というスイッチの特性を利用すると、送信と受信が同時に行える全二重通信が可能となり、データ転送の効率が上がる。そして衝突が発生しようがないためCSMA/CDを無視できる、複数デバイスの同時送信が可能、など複数利点があり、これがハブとの大きな違いとなっている。
そして、トポロジや設定を変更せずともハブと簡単に交換可能なことから、ネットワーク効率を上げたい場合は、単にハブをスイッチに変更するだけで良いらしい。

しかし、ブリッジの欠点はそのままスイッチの欠点ともなる。フレーム読み取りの時間分だけ遅延が発生することと、ブロードキャストを止めることができないことである。
レイヤ3(ネットワーク層)
ネットワーク内での相互通信の話であったレイヤ2から、レイヤ3ではネットワーク間の相互通信、つまりインターネット通信の方法へ進んでいく。
ここで重要となるのが論理アドレスであり、どこのネットワークに属しているかを判別する識別子となる。
論理アドレス
レイヤ2で出てきたMACアドレスの欠点であるアドレスと実際の機器の場所が無関係、という問題に対して、論理アドレスは「どこの」「だれの」という二つの情報を格納する階層型アドレッシングにより対応している。階層型というのは「東京都文京区本郷7丁目3番1号」のように、日本の中でも東京都、東京都の中でも文京区、文京区の中でも7丁目。。のようにだんだんエリアを広範囲から狭めていくことが特徴である。
そもそも論理アドレスを定義する目的は、輸送経路を効率的に見つけることであるが、階層型アドレッシグにより経路探索を行いやすい状態が生まれる。
ルータ
そして、ルータは論理アドレスからルーティング(最適な経路の選択)を行う。ルータはスイッチング機能とルーティング機能を持っている機器であり、ルータによってネットワークが分離されているおかげでトラフィックの制御が可能になる。
IPヘッダ
IPパケットは以下のように20~60バイトのIPヘッダをセグメント・データの前につける。重要なのは宛先と送信元のIPアドレスがあることらしい。

読んだ教材
3分NetWorking
先生と(比較的アホな)生徒が対話型でネットワークの解説を進めてくれている。お笑い要素もあり、初学者でもスイスイ読める。書籍化しているほどの人気コンテンツらしいが、十分サイト上で楽しめるのでお気軽にぜひ。
「経営と情報」に関する教材と意見
文系大学生向けにITの教鞭を取られていた木暮先生という方が書かれた個人ブログ。個人的には
CSの基礎がかなり網羅されており、辞書的に調べるのは非常に使いやすいのではないかと感じる。
まとめ
今日はTCP/IPの基礎を学ぶ時間を作ってみた。3分間ネットワーキングという初学者にもとっつきやすいコンテンツに助けられ、かなり理解が進んだと思う。しかしまだ全81話中20話ほどまでしか進んでいないので、ここから先は隙間時間に追記していく形としていこうかと思います。
かなり誤字脱字があり、論理構成も無茶苦茶なままの公開となってしまいましたが、最後までお読みいただきありがとうございました。
学べば学ぶほど、普段使っているインターネットに感謝の気持ちが湧いてくる、人間の叡智を感じた5時間でした。
これからもコンピュータサイエンスの学習を精進していきましょう!
それではまた!
<それぞれのジャンルの記事まとめ(マガジン)>
いいなと思ったら応援しよう!
