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)は以下のとおり。

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

トランスポート層:セグメント

インターネット層:パケット

ネットワーク層:フレーム

ブラウザ上で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対多.

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

ユニキャストIPアドレス

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

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

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

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

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

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

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

・クラスD

・クラスE

ARPの役割

ARPは同一ネットワーク内のIPアドレスに対応するMACアドレスを求めること。

TaNA
例えば同一ネットワーク上に属すPC1(IP:111 MAC:xxx)からPC2(IP:222 MAC:yyy)にデータ転送を行う場合、IPヘッダ(222)とイーサネットヘッダ(yyy)が必要。その際にIPヘッダ(222)に対応するMACアドレス(yyy)を求める為にARPを利用。

トランスポート層

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

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

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

TCP

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

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

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

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

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

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

UDP

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

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

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

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

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

アプリケーション層

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

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

主要なプロトコルは以下のとおり。

◼︎ DNS

・ホスト名とIPアドレスの対応づけ(名前解決)を行うプロトコル.

◼︎ DHCP

・TCP/IPで通信するための各種設定を自動的に行えるプロトコル.

◼︎ HTTP

・Webアクセスを行うためのプロトコル.

◼︎ SMTP/POP3

・電子メールの送受信を行うプロトコル.

◼︎ FTP

・ファイル転送を行うためのプロトコル.

WEBアプリ開発で特に大切なHTTPは以下参照。

Restful API設計でのリソース設計とHTTPステータスを考えてみる