ネットワーク基礎①

プロトコルとそのまとまり

プロトコルとは

コンピュータ同士が通信を行うために決められた規約のこと。

OSI参照モデルとTCP/IP

プロトコルは当初、メーカごとに異なったものを開発していた。しかしコンピュータやネットワークの技術が広まるにつれて異なったメーカ同士のコンピュータを接続し通信するための仕組み(互換性)が重要であると認識され、標準化が行われるようになった。また、プロトコルに多くの役割を詰め込みすぎると複雑になりすぎるため、機能ごとに分割して階層化するという考えが広まっていった。階層化されたプロトコルのまとまりをプロトコルスイートという。標準化された代表的なプロトコルスイートがOSI参照モデルとTCP/IPである。

2つは別物のプロトコルスイートであるが、互いに共通点も多い。

階層 OSI参照モデル TCP/IP
第7層(レイヤ7/L7) アプリケーション層 アプリケーション層
第6層(レイヤ6/L6) プレゼンテーション層
第5層(レイヤ5/L5) セション層
第4層(レイヤ4/L4) トランスポート層 トランスポート層
第3層(レイヤ3/L3) ネットワーク層 インターネット層
第2層(レイヤ2/L2) データリンク層 ネットワークインタフェース層
第1層(レイヤ1/L1) 物理層

OSI参照モデル

OSI参照モデルはそのまま現在のネットワークに実装されているわけではないが、理論的な面で優れているためネットワークの説明などでよく用いられているモデルである。7階層に分ける。

物理層
物理的・電気的な性質を規定する。例えば、ケーブルは何を使うかなどを決める。
データリンク層
直接接続された機器間の伝送について規定する。データリンク層で伝送されるデータをフレームという。MACアドレスで機器を識別する。
ネットワーク層
エンドツーエンドの伝送について規定する。ネットワーク層で伝送されるデータをパケットと呼ぶ。IPアドレスで機器を識別する。
トランスポート層
通信品質や、コンピュータ内のどのアプリケーションと通信するかを管理するための仕組みを規定する。トランスポート層で伝送されるデータをセグメントという。ポート番号でアプリケーションを識別する。
セション層
通信するプログラム間で会話を行い、コネクションの開始・終了を管理する。
プレゼンテーション層
データ形式について管理する。
アプリケーション層
通信に使用するアプリケーション(サービス)である。

TCP/IP

TCP/IPは現在のネットワークにおいてデファクトスタンダートとして実装されている技術である。IETFによって標準化されている。主にインターネット層のIPとトランスポート層のTCPの2つのプロトコルを使用して通信を行う。

TCP/IPのプロトコル

IP

TCP/IPのインターネット層、OSI参照モデルのネットワーク層で動作するプロトコル。IPアドレスでコンピュータ同士の通信を実現する。現在のインターネットの通信の基本となる重要なプロトコルの一つである。IPは次の特徴がある。

IPアドレスで通信相手を識別する
ネットワークに接続されているすべてのホストから通信相手となるホストを探す際にIPアドレスを利用する。
パケットを伝送する
IPで伝送するデータのことをパケットと呼ぶ。
経路制御(ルーティング)を行う
パケットは、ルータによるバケツリレー方式(ルータが宛先IPアドレスを調べて次の転送先を決める)で宛先ホストまで伝送される。
ベストエフォート型のコネクションレス型の通信である
データの伝送について最大限の努力はするが、保証はされない。信頼性を向上するためには別のプロトコル(具体的には、TCP)が行う。

IPヘッダ

IPヘッダには大きくIPv4ヘッダとIPv6ヘッダの2種類がある。次に示す図はIPv4ヘッダである。

IPv4ヘッダの図

できればすべて覚えておきたいが、余力があったらでよい。以下のポイントはおさえる。

IPアドレス

IPアドレスはIPにおいて相手先ホストを特定し、通信をするために使用されるアドレス体系である。IPアドレスは32ビットからなり、8ビットごとに4等分して10進数で表記される。IPアドレスを理解し、問題を解くためには2進数と10進数の相互変換を覚える必要がある。
例:
・2進数 :1100000 10101000 00000000 00000001
・10進数:192. 168. 0. 1

IPアドレスにはネットワークアドレス部とホストアドレス部がある。

ネットワークアドレス部
ネットワークに対して付与される番号。ルータはネットワークアドレス部を見てIPの転送を行う。ホスト同士のネットワークアドレス部が同じ値の場合は同じネットワークに所属する。この場合、ルータはパケットの転送を行わない。
ホストアドレス部
同じネットワークに所属するノードを判別するための番号。ホストアドレス部がすべて0のアドレスはネットワークアドレスと呼ばれていて、ネットワークそのものを意味する。また、ホストアドレス部がすべて1のアドレスはブロードキャストアドレスと呼ばれていて、ネットワークに所属するホストすべてにデータを転送したいときに用いる特別なアドレスである。
ネットワークアドレス部とホストアドレス部の区分け

ネットワークアドレス部とホストアドレス部を分けるときの考え方は次の2方式ある。

クラスフル

IPアドレスをクラスに分ける方式で、IPが開発された当初に使われていた考え方である。IPアドレスとクラスA~Dの4つのクラスに分割して付与していく。

クラス ネットワークアドレスのビット数 先頭ビット/IP 範囲 割り当てられる目安台数
A 8ビット 0 0.0.0.0~127.0.0.0 1677万台
B 16ビット 10 128.0.0.0~191.255.0.0 6万5千台
C 24ビット 110 192.0.0.0~223.255.255.0 254台

他に、クラスD,Eの2つの特殊なクラスが存在する。

クラス ネットワークアドレスのビット数 先頭ビット/IP 範囲 用途
D 32ビット 1110 224.0.0.0~239.255.255.255 マルチキャスト用
E 32ビット 1111 240.0.0.0~255.255.255.255 IETFによる実験用
クラスレス

ネットワークアドレス部を可変とする方式。サブネットマスクやCIDR表記を用いてネットワークアドレス部を表す。

サブネットマスク
IPアドレスと同じく32ビットの2進数としたとき、1の部分をネットワークアドレス部、0の部分をホストアドレス部とする。
CIDR表記
IPアドレスを10進数表記した際に、192.168.0.1/24のように、スラッシュと10進数を書くことによってネットワークアドレス部を表記する。スラッシュの後の10進数はプレフィックスと呼ばれ、ネットワークアドレス部のビット数を表す。

TCP

TCP/IP、OSI参照モデルともにトランスポート層のプロトコル。IPとともに現在のインターネット通信の基本となる重要なプロトコルの一つである。TCPは次の特徴がある。

通信するアプリケーションにパケットを渡す。
IPアドレスは基本的にはコンピュータにパケットを渡すためのものである。コンピュータには複数のアプリケーションが動いていて、その中で目的のアプリケーションにパケットを渡すための機能を提供するのがトランスポート層のプロトコルで、その代表がTCPとなる。後述するUDPも同じ機能を持つ。アプリケーションを識別するためにポート番号を用いる。
コネクション型のプロトコルである
通信相手との間にコネクションを確立して、信頼性のある通信を行う。IPがコネクションレス型であったのでその補完を行っている。フロー制御、順番制御、再送制御など様々な制御を行うことで実現している。

ポート番号

ポート番号は通信相手のアプリケーションを識別するための番号で、16ビットの整数で定義される。次の3種類がある。

ウェルノウンポート:0~1023

アプリケーションごとに使うために予約されているポート。インターネット標準としてIANAによって管理されている。代表的なウェルノウンポートは以下。

ポート番号 プロトコル TCP/UDP 説明
20 FTP(データ転送用) TCP サーバとクライアント間のデータ転送を行うプロトコル。
21 FTP(コントロール用)
22 SSH TCP コンピュータを安全に遠隔操作するためのプロトコル。
23 Telnet TCP コンピュータを安全に遠隔操作するためのプロトコル。
25 SMTP TCP メール転送プロトコル。
53 DNS TCP/UDP ドメインとIPアドレスを紐づける仕組みを提供するプロトコル。
67 DHCP(サーバ) UDP 自動でIPアドレスを付与するための機能を提供する。
68 DHCP(クライアント)
80 HTTP TCP インターネット通信で広く使われているプロトコル
110 POP3 TCP メール受信用プロトコル。取得後はメールサーバから削除される。
123 NTP UDP 正確な時刻を取得するためのプロトコル。
143 IMAP TCP メール受信用プロトコル。取得後もメールサーバ上に保存される。
161 SNMP UDP ネットワーク監視を行うためのプロトコル。
162 SNMP(トラップ)
443 HTTPS TCP HTTP通信を安全に行うためのプロトコル。
登録済みポート:1024~49151

IANAが管理しているポートだが、ウェルノウンポートほどよく使われているものはなく厳密でもないため、非公式で使われているポート番号も存在する。

ダイナミックポート:49152~65535

だれでも自由に使えるポート。OS側で動的に割り当てる場合に使われるポート。

TCPセグメンテーション

データを転送する際に一度に送れるデータ量は限られている。そのため、TCPでは送信可能なデータ量に分割して送信し、送信先で再構成する必要がある。分割したデータの単位をセグメント、分割・送信・再構成の仕組みをTCPセグメンテーションという。

宛先・送信元のポート番号とともに、TCPセグメンテーションや後述するTCPコネクションを確立するための仕組みを提供するためのデータをTCPヘッダという。

また、TCPヘッダと上位プロトコルのヘッダとデータを足したものをTCPセグメントと呼ぶ。

TCPヘッダ

次に示す図がTCPヘッダとなる。

TCPヘッダの図
制御ビットの図

この中のSYNとACKは次で説明するコネクションの確立で使用され、特に重要なフラグである。

コネクションの確立

TCPは信頼性を確保するためにコネクションを確立してデータ通信を行うコネクション型の通信である。コネクションは3ウェイハンドシェイクという方法で行う。例えば、PC1とPC2が通信を行う場合、TCPヘッダを利用して次のような応答が行われる。

3ウェイハンドシェイクの図
  1. PC1からPC2へ接続開始要求(SYN)が行われる。TCPヘッダは、SYNフラグを1、シーケンス番号をランダムな値(ここでは0とする)を設定して送る。
  2. PC2は接続可能であれば接続がOKであることを示す応答を行う(ACK)。TCPヘッダはこの時、ACKフラグを1に、ACK番号を接続開始要求の時に送られてきたシーケンス番号に1を足した値(ここでは1)が設定される。同時に、PC1に対して接続開始要求を行う。このTCPヘッダの設定は、SYNフラグが1、シーケンス番号がランダムな値(ここでは0とする)となる。
  3. PC1は接続可能であれば接続がOKであることを示す応答を行う(ACK)。TCPヘッダはこの時、ACKフラグを1に、ACK番号を接続開始要求の時に送られてきたシーケンス番号に1を足した値(ここでは1)が設定される。

データの送信

3ウェイハンドシェイクによって確立したコネクションによってデータの送信が行われる。このときTCPセグメンテーションが行われる。データ転送の信頼性を確保しながら効率性を向上させる仕組みとして順序制御、再送制御、ウィンドウ制御、フロー制御、輻輳制御といった制御が行われる。

コネクションの開放

コネクションの開放は送信するデータがなくなった側からコネクション切断要求(FIN)を送ることで行われる。PC1が最初に送信データがなくなった場合、次の図のような手順で行われる。

FINの図

UDP

トランスポート層のプロトコル。IPと組み合わせて、TCPかUDPを選択して使用する仕組みになっている。UDPはTCPで行っていた順番制御や再送制御などを一切行わず、代わりにシンプルで高速な仕組みを提供する。UDPを使用するプロトコルとしてDNS、SNMP、NTP、DHCPなどがある。