TCP/IP基礎に学ぶネットワーク基礎とアプリケーション通信の仕組み

昨今のWEBアプリ開発現場におけるツール・ライブラリの重要性は増すばかり。

それ故に低レイヤー技術(メモリ構造やコンピュータ基礎)が分からずとも、それっぽいのが作れる。

TaNA
これ自体良い事ばかりではなく、急に不可解な動きをしたり、性能が悪くなった時に、基礎知識が無いと対処方法が分からずに困るし、また色んなWeb系企業のCTOの方々も低レイヤー技術の重要性を説いています。

その低レイヤー技術の1つであるネットワーク基礎。

こちらの書籍から、ネットワークの専門でなくとも最低限知るべき知識を抜粋。

いきなりスイッチ・ルータや「あプレゼントねデーブ」と言われても覚えられない。

まずは普段利用しているインターネット通信の仕組みからざっくり確認。

プロトコル

そもそもインターネットに代表されるネットワークとは何か!?

ネットワークとは「ハードウェアが同じ通信の仕組みを利用できる範囲」を指します。

このネットワーク上で相互接続し合うハードウェアが正しく通信を行うには規約が必要!!

POINTプロトコルとはデータ通信を行うための規約!!

TCPもIPもプロトコルの一つであり、この二つを中心に関わるプロトコル群をTCP/IPと総称。

Ethernet

プロトコルに従い、TCP/IPがソフト上で通信制御。

そしてハードウェア面ではEthernetで通信制御。

POINTEthernetはオフィス・家庭で一般利用されている有線LANで最も利用される技術規格。

現在のPCにはEthernetと呼ばれるネットワーク規格が標準搭載されています。

スイッチとハブ

Ethernet搭載のPCを3台以上接続する場合、スイッチ(スイッチングハブ)を利用。

POINTスイッチはLAN(限られた範囲のネットワーク)に参加するコンピュータ同士を繋ぐ機器。

インターネット接続にはスイッチ(有線or無線)に接続する必要があります。

TaNA
ただし「世界中のコンピュータをスイッチに繋ぐ」では遠隔地との通信が実現できず、遠隔地への接続を考えると、スイッチのみでは電気信号の減衰、通信の開始終了の制御、法律上の問題から限界があります。

これを解決するため、ネットワーク連携(LAN同士のデータ連携)では専用のデジタル線などを活用する必要があり、このLAN同士を相互接続するために必要なのがルータ。

スイッチでLANを構築し、ルータで相互連携させ、巨大なネットワークを形成。

TCP/IP

ネットワーク通信ではデータ形式や通信相手の識別方法、エラー時の動作などに注意が必要。

その通信を行う一連のプロトコルの組み合わせがネットワークアーキテクチャ。

ネットワーク通信を7つの階層に分けて考えるのがOSI基本参照モデル。

TaNA
ただ実際には、OSI基本参照モデルの7階層では複雑化するため、一般的には利用されておらず、4階層で考えるTCP/IPのネットワークアーキテクチャが一般的。

TCP/IPでは以下のように4階層に分類し、階層間でデータ名(PDU)をやりとり。

1.アプリケーション層:メッセージ

2.トランスポート層 / データ名:セグメント / 識別情報:ポート番号

3.インターネット層 / データ名:パケット / 識別情報:プロトコル番号

4.ネットワーク層 / データ名:フレーム / 識別情報:タイプコード

ブラウザ上でURL入力し、階層間で上から(ア→ト→イ→ネ)順に各プロトコル毎でヘッダ(制御情報)を付与され(カプセル化)、PDU(Protocol Data Unit)というバイナリデータでやり取りします。

通信の流れ

普段利用しているWebブラウザを介して、TCP/IP上でどのような通信が行われているのか確認。

まずは送信側から。

[ア] URL入力でHTTP規約通りにPDUが作成されTCP連携.

[ト] TCP規約に従いヘッダ付与後、セグメントとしてIP連携.

[イ] IP規約に従いヘッダ付与後、パケットとしてEthernet連携.

[ネ] Ethernet規約に従いヘッダ(トレーラ)を付与しフレームを通信相手に伝送.

次に受信側。

[ネ] Ethernetがトレーラをチェックし、伝送途中でのデータ破損チェック.

[イ] IPではパケット中のヘッダの処理を行い、TCPにデータ連携.

[ト] TCPも同様にヘッダの処理を行い、HTTPにデータ連携.

[ア] HTTPも同様に規約に従って処理を行う.

受信側でWebサーバがリクエストを解析し、HTTPレスポンスとしてWebブラウザから要求された情報(HTML・画像・データ等)を返却、送信側ではそのデータをブラウザ上に表示されます。

ネットワーク層

TCP/IPにおける最下層がネットワーク層。

POINTネットワーク層の役割は同一ネットワーク内でのデータ転送.

インターネットは各ネットワークがルータで相互接続されているので、同一ネットワークとは、ルータやレイヤ3スイッチによって区切られた範囲を指す。

また通信では相手を識別する必要があり、その際に利用するのがMACアドレス。

POINTMACアドレスとはLAN内で通信するために通信相手を識別するためのアドレス.

LANポートに割り当てられる48ビットのアドレスで、NIC製造時にハードウェアに書き込まれるので、原則書き換えることができず、物理アドレスとも呼ばれます。

このMACアドレスでどうデータ通信を行うか!?

◼︎ レイヤ2スイッチ

LAN内(同一ネットワーク)でデータ通信を行う場合、イーサネットヘッダ内の送信先MACアドレスとMACアドレステーブルから適切な送信先ポートにデータ転送.

◼︎ ルータ

ルータを介して相互連携しているネットワーク間でデータ転送を行う場合、ルータがIPヘッダを参照し、ルーティングテーブルから送信先にデータ転送.

◼︎ レイヤ3スイッチ

ルーティング機能を持つレイヤ3スイッチでは、同一ネットワークであればMACアドレス、別のネットワークであればIPヘッダから送信先にデータ転送.

インターネット層

ネットワーク層の上位にあたるインターネット層。

POINTインターネット層の役割はエンドツーエンドの通信を行うこと!!

エンドツーエンド通信を実現させるためのプロトコルがIP。

TaNA
TCP/IPで通信するPCやサーバ、ルータなどネットワーク機器を総称してホストと呼び、IPアドレスはホストを識別するための32ビットの識別情報。

IPアドレスは通信用途によって次の3種類に分類。

1.ユニキャストアドレス:1対1.

2.ブロードキャストアドレス:1対多.

3.マルチキャストアドレス:1対多.

一般的に利用されるのはユニキャストアドレス。

TCP/IP上では多くのネットワークが相互接続されています。

どのネットワークに属しているかホストを識別するために、IPアドレスは以下の構成になります。

POINTIPアドレス = ネットワークアドレス + ホストアドレス

ネットワーク部分は規模に応じて以下の5種類。

・クラスA:ネットワークとホストの区切り目は8ビット目.

・クラスB:ネットワークとホストの区切り目は16ビット目.

・クラスC:ネットワークとホストの区切り目は24ビット目.

・クラスD

・クラスE

トランスポート層

インターネット層の上位にあるトランスポート層。

POINTトランスポート層の主な役割はアプリケーションへのデータ受け渡し.

トランスポート層ではポート番号によって受け渡し先のアプリケーションを判別。

TCPはコネクション型プロトコルで、以下を搭載することで信頼性の高いデータ転送が可能。

・エラー発生時の再送制御機能やデータ順序制御.

・効率よく転送するためのウィンドウ制御.

・送信データ量を調整するふくそう制御機能.

データ送信時、3ウェイハンドシェイクでコネクション確立することで信頼性を確保。

ただし信頼性の高さを保証する分、様々な制御処理が必要なのでオーバーヘッドが発生。

UDPはコネクションレス型プロトコルであり、以下の用途で利用されます。

・リアルタイム性のあるデータ転送.

・複数の相手に同じ内容のデータを送信するとき.

・少量データでデータ転送の信頼性を必要としないとき.

主にIP電話等で利用されます。

アプリケーション層

ネットワーク上での主体はアプリケーション。

POINTアプリケーション層の役割はデータのやり取りでの手順やフォーマットを決めること.

主要なプロトコルはDNS、DHCP、HTTP、SMTP/POP3、FTPなど。