2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

TCP/IPの基礎の基礎!

TCP/IPっていったいなんぞや?

TCP/IPは、これで一つのプロトコルであるように、勘違いされてる方が多く見られる。
しかし、実は TCPとIPは別物で両方のプロトコル(規約)から成り立っている。狭義の意味でとらえるとTCPはOSI7階層のプロトコル層から言うと、第4層であるトランスポート層に位置しており、一方IPは第3層であるネットワーク層に位置している。
インターネット上の通信では、トランスポート層でTCP、UDPを使っており、ネットワーク層でIPを、ネットワーク制御にはICMPを使用している。


1) ネットワークアドレスとホストアドレス

インターネットで使われているIPアドレスはコンピュータの「電話番号」、または「住所」に相当する。TCP/IPで通信する全てのコンピュータには、「IPアドレス」が割り当てられている。
IPアドレスは、4バイトのバイナリデータであり、通常使っているIPアドレスは、1バイトずつを10進数にし、4つに区切って表現している。つまり、例えばIPアドレス 210.145.140.146 を2進数で表現すると 11010010.10010001.10001100.10010010 となる。IPアドレスにより世界中に散在しているホストを特定できるが、実はこのIPアドレスには2つの意味が隠されている。それは、ネットワークIDをホストID(TCP/IPでは全てのコンピュータのことをホストと呼んでいる)である。ネットワークIDでは、何処のネットワークに所属しているかを表現しており、ホストIDでそのコンピュータ自身を表現している。
ネットワークIDとホストIDの境目を示しているのが サブネットマスク である。


2) クラスとCIDR

ネットワークの規模によって、IPアドレスは三つのクラスに分けられている。

■ クラスA
クラスAでは、先頭の1バイトをネットワークアドレスとして使用し、残りの3バイトをホストIDとして使用することが出来る。つまり、24ビットが使用できるので、2の24乗=約1600万台のコンピュータを一つのネットワークに接続することが出来る。クラスAは、ネットワークIDの先頭ビットを0とする。

■ クラスB
クラスBでは、先頭2バイトがネットワークアドレスとして使用し、残り2バイトをホストアドレスとして使用することが出来る。16ビットが使用できるので、2の16乗=約65000台のコンピュータを一つのネットワークに接続することが出来る。クラスBは、ネットワークIDの先頭2ビットを10とする。

■ クラスC
クラスCでは、先頭3バイトをネットワークアドレスとして使用し、残り1バイトをホストIDとして使用することが出来る。8ビットが使用できるので、2の8乗=約250台のコンピュータを一つのネットワークに接続することが出来る。クラスCは、ネットワークIDの先頭3ビットを110とする。

■ CIDR
最近は、クラスでネットワークを表現するより、 /24などのCIDR(Classless Inter-Domain Routing)表記をすることが多い。 CIDRの採用は、インターネットサイトが近年爆発的に増えていることにその理由がある。現在のネットワーク数は、当初IPを設計した時の想定を大幅に上回り、サイトひとつに対してクラスCを発行していてはアドレスが足りなくなってしまう事態となっている。このため、日本のIPアドレス管理団体であるJPNICもCDIRでのIPの割り当てを推奨している。

サブネットマスクが「255.255.255.240」で有るのなら、これを2進で表記すると「11111111.11111111.11111111.11110000」となり、28ビットがネットワークIDとして指定されていることになる。これをCIDR表記にすると/28となる。


3) アプリケーションとポート番号

ポート番号とは、「どのアプリケーション(サービス)が処理すべきデータなのか」を指定した番号である。ポート番号はプロトコルヘッダに埋め込まれており、下位プロトコルから上位プロトコルに渡される時に目的のプログラムにわたるように仕分けられる。つまり、第4層のトランスポート層からその上位に位置するセッション、プレゼンテーション、アプリケーション層へと引き渡されるインターフェースがポート番号である。もし、このポート番号がなかったら何が起きるであろう?例えば、ブラウザとメーラを起動しており、ブラウザでネットサーフィンをしているとしよう。気持ちよくネットサーフィンしている真っ最中にメールが到着することは良くあることだ。この状態で、送られてくるTCP/IPパケットがどれも同じ顔をしている(メールとWebが区別できない)とすると・・・・。
ネットサーフィン中に送られてきたメールは、現在通信中のブラウザが間違って受け取ってしまい、受信中のWebデータとメールが混ざって画面がぐちゃぐちゃに化けてしまうのは想像できると思う。これを、回避するためには、受け取るべきプログラムを区別するための何かが必要となる。この受け取るべきプログラムを区別するのが「ポート番号」である。OSIの階層にあてはめると、ポート番号は第4層であるトランスポート層に位置し、上位階層に対するインターフェースの役割を持っている。


4) UDPとは

UDP(UserDatagram Protocol)はOSI参照モデルの第4層、トランスポート層に属しているプロトコルである。UDPはインターネットでデータを送信する一番シンプルな構造を持っている。 シンプルが故に、UDPではデータの信頼性に対する機能がなく、UDPを使った通信でデータの信頼性を求めるので有れば、上位層でのサービスで実現する必要がある。


5) TCPとは

TCP(Transmission Control Protocol)もOSI参照モデルの第4層であるトランスポート層に属しているプロトコルである。 UDPが「送りっぱなし」プロトコルであるのに対し、TCPは流量コントロールや、転送順序確認など高度なコントロールを実装することにより「信頼性の高い」通信を実現している。言い換えるならば、 UDPは「軽さに重きを置き信頼性をトレードオフしたプロトコル」で、TCPは「信頼性に重きを置き軽さをトレードオフしたプロトコル」で有ると言える。
TCP/UDPの選択はプログラマに一任されており、インターネットで使われるプログラム(メール、Web等)では確実に届けたいデータを送りたい場合はTCPを、たれ流しでかまわないデータを送る場合はUDPを使う傾向にある。


6) ICMPとは

TCPとUDPはデータを送信するためのプロトコルであったが、 ICMP(Internet Control Message Protocol)はネットワークをコントロールするためのプロトコルである。 例えばパケットが配送できないときの通知や、相手のコンピュータが稼働しているのかを確認すること等に使われる。通信確認の時によく使われる「ping」もICMPを使っている。
ICMPは、OSI参照モデルの第4層であるトランスポート層に該当するはずであるが、機能的に考えるとICMPはデータ転送のためのプロトコルではなく、どちらかというとネットワーク制御に深く関わってくるので、第3層にのネットワーク層に属していると言える。

■ ICMPのタイプ
ICMPパケットは「タイプ」と「コード」の組み合わせでそれぞれ意味が異なっており、「データ」部にセットされるデータはその組み合わせによって内容が変わる。データの内容の詳細は、 RFC792 を参照していただきたい。


7) IPとは

IP(InternetProtocl)はOSI参照モデルの第3層であるネットワーク層に属しているプロトコルである。TCP/UDP/ICMPなどの上位層データを、ホストアドレスに基づいて相手まで搬送するのがIPの仕事である。


8) イーサーネットとMACアドレス

多くの方がTCP/IPではIPアドレスで通信していると思っているだろう。しかし、IPはOSI参照モデルで言うところの第3層(ネットワーク層)で有ることが解れば、実際の通信には第2層であるデータリンク層プロトコルが必要であることは、お解りであると思う。

■ MACアドレス
データリンク層で使用するアドレスは、 MAC(Media Access Control)と呼ばれるハードウェアアドレスである。このハードウェアアドレスはメーカ別に割当枠が決められており、そのメーカが製作するLANカードやルータなどの製品には、必ず重複しないMACアドレスが割り振られている。つまり、あなたが使っているLANカードのMACアドレスは世界にただ一つしか存在していない。 データリンク層では、このMACアドレス(8バイト)を使って通信している。
インターネットやLANで一般的なイーサーネットの場合、データリンク層ではイーサーネットヘッダが付加される。上位層のプロトコルがIPの場合、MACアドレスに続くETYPEには16進数で0x0800がセットされる。第1層である物理層での通信は電気信号とタイミングになっているので、事実上の通信制御は、第2層であるデータリンク層でコントロールされていると言ってかまわないであろう。
コンピュータとLANとの物理的インターフェースであるLANカードは、このMACアドレスを見て自分宛で有るか否かを判断している。

以上

コメント