TCP/IPは、IPで通信したりする際の取り決め(プロトコル)の総称です。他にも、TCP/IPプロトコルスタックやインターネットプロトコルスイートとも呼ばれます。
#1. TCP/IPを用いた通信の流れ
TCP/IPによる通信ではデータの先頭にヘッダと呼ばれる情報を付けられます。ヘッダは各階層で付けられ、その階層で必要な情報が組み込まれています。送信側では上位の階層から順にデータが処理され、それぞれのプロトコルに応じたヘッダが付けられます。また、データリンク層ではヘッダに加えて、フレームが壊れていないかチェックするFCS(Frame Check Sequence)が付けられます。そして、ヘッダが付けられたパケットはデータリンクを通して受信側へ届けられます。受信側では、そのパケットのヘッダを順に処理し、データをアプリケーションが読み取り、受信側は情報を得ることができます。
##1.1 プロトコルとは
プロトコルとはコンピュータ同士が通信するために決めた取り決めです。メーカーやCPU、OSが違うコンピュータ同士でもプロトコルが一緒であれば通信することが出来ます。
TCP/IPはIETF(Internet Engineering Task Force)という団体によって標準化されています。標準化しようとするプロトコルは全てRFCというドキュメントとしてインターネット上に公開されています。RFCにはプロトコルの仕様書だけでなくプロトコルの実装や運用に関すること、プロトコルの実験に関する情報が含まれています。
##1.2 TCP/IPの階層モデル
TCP/IPは機能ごとに分けて考えられており階層化されています。階層化をすることで、各階層を独立なものとして扱うことが出来ます。これによりある階層を変更しても、それがシステム全体へ影響を与えないため、拡張性や柔軟性を持ったシステムの構築を行うことが出来ます。また、各階層での役割を明確にすることで、その役割に特化したプロトコルの定義が出来ます。これによりプロトコルの実現や実装が容易となります。
各階層はそれぞれネットワークインタフェース層、インターネット層、トランスポート層、アプリケーション層と呼ばれます。
ネットワークインタフェース層(データリンク層)
⇒データリンクを利用して通信をするためのインタフェースとなる層です。
NICを動かすためのデバイスドライバとして考えることが出来ます。
インターネット層
⇒パケットを転送する機能が実装される層です。
TCP/IPの階層モデルでは、インターネット層とトランスポート層がホストのOSに組み込まれることを想定しています。
(IP、ICMP、ARP、etc.)
トランスポート層
⇒通信の実現を担い、両ノード間のデータ転送の管理を行う層です。
通信を行う両端のノードでだけ処理され、通信する際に通る途中にあるルータなどのネットワーク機器などでは処理されないです。
(TCP、UDP、etc.)
アプリケーション層
⇒アプリケーションの動作を実現する層です。
TCPおよびUDPを用いたアプリケーションに相当します。
(HTTP、HTML、SMTP、POP、etc.)
#2. IP(Internet Protocol)
IPはインターネット層に含まれるプロトコルで、エンドツーエンドの通信を実現する役割を担います。機能の簡略化および高速化のために、IPはコネクションレス型の通信方式を採用しています。
主な機能は以下となります。
アドレッシング
⇒送信元のホストと宛先のホストはIPアドレスによって判別されます。
ルーティング
⇒宛先IPアドレスから経路を決定します。
フォワーディング
⇒決定した経路においての次のホストへデータを転送します。
フラグメンテーション
⇒パケットのサイズが大きいために次のホストへ転送できない場合、送信側はパケットを小さいフラグメントに分割します。そして、受信側はこれを元のパケットへ戻します。
##2.1 IPアドレス
IPによる通信では、NICごとにIPアドレスと呼ばれる識別子が割り当てられます。IPアドレスは言わば住所のようなものです。この住所を全世界で割り当てて、設定、管理、運用を行うことで、IPによる通信を実現します。
IPアドレスは32ビットで表すことが出来ます。一般的には8ビットずつに区切られた4つの10進数で表記します。
IPアドレスは、ネットワーク部(ネットワークアドレス)とホスト部(ホストアドレス)に分けることが出来ます。ネットワーク部はセグメントごとに割り振られています。そのため、接続されているセグメント同士では重複しないです。ホスト部は、セグメント内にあるホストを識別するために割り振られます。ホスト部も同様にセグメント内では重複しないです。さらに、ホスト部がすべて0のものをネットワークアドレス、すべて1のものをブロードキャストアドレスと呼びます。
ネットワーク部とホスト部を区別するために使用するものがサブネットマスクです。サブネットマスクを考えるときには2進数で考えます。上位ビットからネットワーク部を表す部分を1、それ以下のホスト部を表す部分を0として表現します。これをIPアドレスと同じく8ビットずつに区切られた4つの10進数で表記します。
#3. TCP(Transmission Control Protocol)
TCPはトランスポート層に含まれるプロトコルで、コネクション型プロトコルです。そのため、エンドツーエンドで信頼性の高い通信を実現することが出来ます。TCPは、チェックサムやシーケンス番号、確認応答、コネクション管理、再送制御、輻輳制御などの仕組みを持ちます。
チェックサム
⇒データが壊れていないかを確認する方法です。
シーケンス番号
⇒届いたパケットが何バイト目のデータなのかを示す番号です。
確認応答
⇒データが届いた際に、受信側が送信側へデータを受け取ったことを送信します。
再送制御
⇒受信側から送信側へ確認応答が届かなかった際に、送信側がもう一度データを送信する制御です。
輻輳制御
⇒受信側でネットワークが混雑している際に、送信側でデータの送る量を調整する制御です。