インターネットの通信プロトコル

なぜ階層に分けて考えるのか

通信機器の持つべき機能は複雑なので階層に分けて考えます。これはハードウェアやソフトウェアの開発を楽にする為です。たとえば光信号や、電気信号に変換する部分を分けておけば、電気信号が光に代わったり、電波になったりといった技術の変化があった場合にはそこだけを入れ替えることができます。

階層に分けるには、いくつかの分け方があります。

OSIモデル

国際標準化機構(ISO)のOSIモデル(Open System Interconnect Reference Model:オープンシステム相互参照モデル)です。

それぞれの役割を学ぶときに使われますが、これにぴったり準拠したシステムはありません。

階層
アプリケーション層
プレゼンテーション層
セッション層
トランスポート層
ネットワーク層
データリンク層
物理層

インターネットで使われている階層モデル

一般に下記のように4層に分けられています。(最下層をさらに2つに分ける場合もあり、2つの層にまたがる規約もあり、厳密に守られているわけではありません)

階層ごとにいろいろなプロトコルが定められています。

これらのプロトコルを総称して、TCP/IPと呼びます。TCP(トランスミッション コントロール プロトコル)と、IP(インターネット プロトコル)がインターネットの仕組みの特徴をよく表しているからでしょう。

階層プロトコル機能
アプリケーション層HTTP, FTP, SMTPアプリケーション間の通信手順
トランスポート層TCP, UDPアプリケーション間通信を保証。エラー回復や再送
インターネット層IP, ICMPアプリケーションが動いている端末同士の通信のプロトコル
ネットワークインターフェース層Ethernet, ARP隣合う端末同士の通信のプロトコル

インターネット層の「インターネット」は世界をつなぐ(the)インターネットのことではなく、ネットワークの「間」という意味ですが、その層のIPは、送信元アドレス・宛先アドレスを指定して、宛先に達するまでの最適なルートを導き出す役割なので、(the)インターネットのキモの部分と言えます。

各層でのヘッダの付加

これより下の層では、それぞれのデータにその層のプロトコルに必要なヘッダが追加される。ヘッダは郵便封筒に書かれる宛先のようなもので、封筒内のデータの処理方法が書いてある。送信時には下の層へいくたびにより大きな封筒に入れられる。

受信されると相手の同じ層がデータを処理するために使ったあと取り去られて上位の層にデータが渡される。

各層のヘッダの内容

以下はトランスポート層がTCPの場合の例である。

階層プロトコルヘッダの内容(主なもの)
アプリケーション層 アプリケーションが決めるヘッダはあるが、階層のためのヘッダではない
トランスポート層 TCP 送信元ポート番号、宛先ポート番号、シーケンス番号、チェックサム、ack
インターネット層 IP 送信元アドレス、宛先アドレス、プロトコル番号、ID、オフセット
ネットワークインターフェース層 Ethernet 送信元MACアドレス、宛先MACアドレス

PC(192.0.2.111)から SV(203.0.113.1)へ、ウェブページのデータをもらう時の通信を見てみる

PC(192.0.2.111)

アプリケーションがサーバーに送るリクエストを作る。これがサーバーに送るデータ。

データ
GET /index.html http/1.0

トランスポート層でTCPヘッダが付けられる

TCPヘッダ データ
宛先ポート80
送信元ポート50000
GET /index.html http/1.0

ウェブサーバーが通信相手なのでポートは80にする

リクエストを出したブラウザはポート50000で待っていることにする。

インターネット層でIPヘッダが付けられる

IPヘッダ インターネット層が扱うデータ
宛先アドレス 203.0.113.1
送信元アドレス 192.0.2.111
宛先ポート 80
送信元ポート 50000
GET /index.html http/1.0

通信したいウェブサーバーのIPアドレスをURLから調べて 203.0.113.1 とする。

リクエストを出したブラウザのコンピュータは 192.0.2.111 なのでここに返信してもらうように知らせる。

ネットワークインターフェース層ではさらにMACアドレスをヘッダにつけて送信する。

Ethernetヘッダ ネットワークインターフェース層が扱うデータ
中継先MACアドレス 00:04:23:cb:1d:de
送信元MACアドレス ac:22:0b:26:cc:44
宛先アドレス 203.0.113.1
送信元アドレス 192.0.2.111
宛先ポート 80
送信元ポート 50000
GET /index.html http/1.0

中継器(ルーターなど)

MACアドレスは通信を中継する機器を通過するたびに書き換えられてリレーされます。

Ethernetヘッダ ネットワークインターフェース層が扱うデータ
中継先MACアドレス 00:24:8c:63:24:f6
送信元MACアドレス 00:04:23:cb:1d:de
宛先アドレス 203.0.113.1
送信元アドレス 192.0.2.111
宛先ポート 80
送信元ポート 50000
GET /index.html http/1.0

サーバー (203.0.113.1)

最終目的地の 203.0.113.1 に届く。

Ethernetヘッダ ネットワークインターフェース層が扱うデータ
中継先MACアドレス 00:16:17:4B:20:0A
送信元MACアドレス 00:24:8c:63:24:f6
宛先アドレス 203.0.113.1
送信元アドレス 192.0.2.111
宛先ポート 80
送信元ポート 50000
GET /index.html http/1.0

ネットワークインターフェース層では Ethernetヘッダをとる。

IPヘッダ インターネット層が扱うデータ
宛先アドレス 203.0.113.1
送信元アドレス 192.0.2.111
宛先ポート 80
送信元ポート 50000
GET /index.html http/1.0

インターネット層ではIPヘッダをとり、IPヘッダに書かれているプロトコル番号に従ってTCPを扱うソフトウェアに渡す。

TCPヘッダ データ
宛先ポート 80
送信元ポート 50000
GET /index.html http/1.0

トランスポート層では宛先ポート番号に割り当てられたソフトウェアに渡す。80番はウェブサーバーです。もし、25ならメールサーバー、53ならDNSサーバーなどと決まっています。

データ
GET /index.html http/1.0