教科書的には OSI 参照モデルが有名ですが、実際の現場ではTCP/IPモデルを使用した通信がほとんどです。TCP/IPモデルは以下の 4 層から構成されます。
OSI参照モデルの文脈で、以下の3層におけるカプセル化されたデータには特別な名称があります。PDU はそれらの総称です。
イーサネットは OSI 参照モデルにおける (物理層および) データリンク層のプロトコルです。プロトコルは共通ですが、実際にネットワークを構築する際には通信速度や通信ケーブルに関してネットワーク管理者による選択の自由があります。自由度があるとはいえ、経験上ネットワーク規模によって好ましい選択肢があることが知られており、規格として整理されています。
10BASE-2
10BASE-T
規格名の最初の数値 10 は通信速度が 10Mbps (bps: bits per second) であることを意味します。ハイフン '-' 以降の部分はケーブルの種類と長さを示します。無印 2 は同軸ケーブル 200 メートル前後を意味します。また一部の例外はありますが、T は UTP (Unshielded Twisted Pair), F は光ファイバを意味します。その際、通信速度 100Mbps の場合をファストイーサネット、1Gbps の場合をギガビットイーサネットとよぶことがあります。通信速度が求められるイーサネットには光ファイバが採用され、求められないイーサネットには同軸ケーブルが採用されます。UTP には後述の通りカテゴリーによる品質の幅があるため一概には判断できませんが、基本的に同軸ケーブルと光ファイバの中間に位置するケーブルです。
より対線 (ついせん) ともよばれます。8本の銅線があり、以下の二種類があります。
ツイストペアケーブルには「カテゴリー」という品質を示す数値があり、その数値が大きいほど品質が高く高額になります。
ツイストペアケーブルの両端には RJ-45 コネクタがよく用いられます。コネクタに 1-8 の番号を付与したとき、両端のコネクタの同じ番号が電気的に接続されている場合をストレートケーブルとよびます。そうでない場合をクロスケーブルとよびます。これはケーブルの区分ではなく、コネクタの接続方法で決定される区分です。使用するデバイスのイーサネットインターフェイスのポートの仕様によって使い分けます。
MDIポートとMDI-Xポートの組み合わせの場合のみストレートケーブルを使用します。それ以外の組み合わせではクロスケーブルとなります。違う種類のポートならばストレートケーブルで、同じ種類のポートならばクロスケーブルとも理解できます。自動的に送信と受信の銅線を判別してくれる Auto-MDI ポートというものがあります。Auto-MDI ポートのデバイスに関しては、どちらのケーブルも使用可能です。
MACアドレスによるフィルタリングができないことから、現在はあまり使用されていません。物理層 (レイヤ 1) までのデバイスです。信号を整形増幅する機能と全ポートに送信することで 1:N 接続を可能にする機能 (集線装置) を有します。スイッチングハブ (単にスイッチともよぶ) で代用可能です。
データリンク層 (レイヤ 2) までサポートするデバイスです。レイヤ 2 スイッチやスイッチングハブともよばれます。ポートとMACアドレスの対応関係を記憶するMACアドレステーブルを持ちます。MACアドレスを学習する機能があり、データを受信するとテーブルを更新します。送信時にテーブル登録があれば該当ポートのみに送信し、なければ全ポートにフラッディングします。
コリジョンドメインはネットワークにおいて半二重通信 (受信と送信が同時にできない通信) となる範囲です。同じコリジョンドメインで異なる二つ以上の通信を同時に行うためには、例えば CSMA/CD (Carrier Sense Multiple Access/Collision Detection) といった仕組みが必要になります。ハブはネットワークすべてで一つのコリジョンドメインを共有するのに対し、スイッチは基本的にポート毎にコリジョンドメインが独立しています。よって、スイッチのバッファリングを利用できることもあり、全体として擬似的に全二重通信となります。効率のよくない CSMA/CD を使用する必要もありません。
スイッチには VLAN (Virtual LAN; 仮想LAN) という機能があり、仮想的に複数のスイッチとして機能してネットワークを分割することができます。Catalyst スイッチには既定で VLAN1 が default という名前で生成されています。スイッチの全てのポートはこの VLAN1 に属しています。
現在ではあまり使用されません。機能としてはスイッチと同じです。ポート数がスイッチよりも少なく、スイッチがハードウェアで処理することをブリッジではソフトウェアで処理するため動作も低速です。
マルチレイヤスイッチともよばれます。教科書的には、ルータはソフトウェア処理である一方でレイヤ 3 スイッチはハードウェア処理なため高速に動作します。しかしながら、現在ではルータとの違いは明確ではなく、レイヤ 2 スイッチを拡張したものであるという歴史的経緯を表現した言葉であると解することもできます。
ルータやスイッチにはボックス型とシャーシ型があります。ボックス型は備えつけられた固定のものが一つですが、シャーシ型はモジュールを複数設置できます。各モジュールには複数のインターフェイスがあり番号が付与されています。
例 FaX/Y
WAN接続などに使用されるシリアルインタフェイスは Se0/0 などと表記されます。
レイヤ2ヘッダともよばれます。
宛先MACアドレス6バイト + 送信元MACアドレス6バイト + タイプ部2バイト (合計14バイト)
タイプ部はイーサネットにだけある特別な仕組みではなく、カプセル化を基本とするプロトコルスタックの各層に備わっている仕組みです。例えば IP ヘッダにはトランスポート層のプロトコル識別子としてのプロトコルフィールドがありますし、トランスポート層のヘッダにはアプリケーション層の識別子であるポート番号フィールドがあります。
データの「後」に付与されます。トレーラはイーサネットにだけある特別な仕組みではなく、他のプロトコルでも同様の仕組みが採用されていることがあります。データリンク層のデータは壊れやすいため FCS (Frame Check Sequence) というトレーラを付与します。具体的には FCS に CRC (Cyclic Redundancy Check) という値を入れておき、受信側で壊れていないかを確認します。
IPバージョン 4bit + ヘッダ長 4bit
+ 本パケットの扱いでルータに重視してほしいサービス種別 8bit + ヘッダを含むパケット長 16bit
パケット分割で使用するパケットの識別子 16bit + パケット分割の制御フラグ 3bit
+ 同じ識別子のパケットでデータ復元する際の本パケットの断片位置 13bit
TTL 8bit + 上位プロトコルの種類 (TCP: 6, UDP: 17, ICMP: 1) 8bit + ヘッダ部用のチェックサム 16bit
送信元IPアドレス 32bit
宛先IPアドレス 32bit
TCP/IPにおいて、レイヤ 2 のプロトコルごとに最大データサイズ MTU (Maximum Transmission Unit) が規定されています。例えばイーサネットは 1500 バイトです。IPパケットのサイズが MTU を越える経路を使用する場合にパケット分割が発生します。これは IP フラグメンテーションともよばれます。分割されるのは IP パケットのデータ部分のみです。分割時には IP ヘッダ情報は可能な限りコピーされます。分割されたパケットはそれぞれ独立して宛先 IP アドレスまで転送されていき、宛先において復元されます。レイヤ 2 の通信におけるイーサネットフレームは以下のようになります。
イーサネットヘッダ + MTU以下 + イーサネットトレーラ
ICMP (Internet Control Message Protocol) は IP の上位プロトコルですが、ネットワーク層のプロトコルとして扱われます。IP に不足している機能を補うためのプロトコルであり、IP が使用できる端末では必ず ICMP も実装されています。ICMP パケットは以下のようになります。
イーサネットヘッダ + IPヘッダ + ICMPヘッダ (ICMPメッセージ) + データ + イーサネットトレーラ
大まかな通知の種類 8bit: 8 エコー要求、0 エコー応答、3 宛先到達不能、11 時間超過
+ 詳細な通知種別コード 8bit + エラー検査のためのチェックサム 16bit
各通知に必要なデータ 32bit 単位
例えば ping コマンドは ICMP を利用しています。正常時にはエコー要求に対してエコー応答を返します。到達できなければ宛先到達不能が返されます。TTL が 0 になり破棄されたならば時間超過が返されます。
ネットワーク部 + ホスト部 で 32 ビットです。IPアドレスの扱いはすべて対等ではなく、サブネットマスクを用いないデフォルトのネットワーク部の桁数によってクラス分けされています。クラスには A,B,C,D,E がありますが、一般利用されるものは A,B,C です。クラス D はすべてマルチキャスト用に使用されます。
クラス A の 127 はループバックアドレスとして使用されます。そのうちよく採用されるのは「127.0.0.1」です。TCP/IP が正常に動作していることを確認する目的や、いわゆる localhost として自分自身の PC が提供するサービスの動作確認に使用されます。「127.0.0.1」に ping が届かない場合、経路上の障害以前の問題として NIC 周辺の障害が疑われます。
DHCP クライアントは、何らかの障害によって IP アドレスの取得に失敗すると APIPA (Automatic Private IP Addressing) という機能によってクラス B の 169.254.0.0/16 範囲のリンクローカルアドレスとよばれる IP を自分で設定します。その際、重複が発生しないように他の機器の使用状況を事前に自動確認します。ルータは宛先の IP アドレスがリンクローカルアドレスのパケットを転送しません。リンクローカルアドレスは DHCP が存在しない小規模で閉じたネットワークを形成し、同一ネットワーク内での通信を行う目的で考案されました。AutoIP や自己割り当て IP ともよばれます。
グローバル IP アドレスとして確保されていないアドレスです。
可変長サブネットマスク VLSM は「サブネット毎に」異なった長さのサブネットマスクを使用できる技術です。対して、固定長サブネットマスク FLSM (Fixed Length Subnet Mask) ではサブネットマスクがすべてのサブネットで同じ長さである必要があります。VLSM で IP アドレッシングするためには、ルーティングプロトコルが対応している必要があります。対応しているものをクラスレスルーティングプロトコルとよび、対応していないものをクラスフルルーティングプロトコルとよびます。クラスレスルーティングプロトコルには RIPv1 が該当します。
IP アドレスをクラスで扱うと割り当ての際に無駄が発生する場合があります。CIDR はクラス全体ではなく部分的に IP アドレスを割り当てることで浪費を防ぐ機構です。VLSM と似た概念ですが VLSM は技術で CIDR は機構です。
クラスの概念を廃したアドレスのことをクラスレスアドレスとよびます。クラスレスアドレスにおけるネットワーク部の長さをプレフィックス長とよびます。プレフィックス長が N のアドレスは *.*.*.*/N と表記されます。これを CIDR 表記とよぶこともあります。
サブネット間通信の規定の窓口であるデフォルトゲートウェイとは別物です。ルーティングテーブルにおいて 0.0.0.0/0 が宛先となっているエントリのことです。/0であるため、任意の IP アドレスが合致します。ルーティングテーブルのエントリとは「ネットワークアドレス」と「インターフェイスおよびネクストホップの IP アドレス (または直接接続)」の組み合わせです。合致するエントリがなければパケットは破棄されますが、任意の宛先に合致するデフォルトルートをエントリに登録しておくことでパケットの破棄を回避できます。ただし、他に合致するエントリがあれば合致度合いが低いためデフォルトルートは採用されません。これをロンゲストマッチとよびます。
ルータに備えられる IP 変換のための機能です。変換の度に NAT テーブルを更新して IP アドレスの変換情報を保持します。また、NATによって IP ヘッダの送信元アドレスが書き換えられます。変換の際にポート番号の情報まで含めてテーブルに保持する場合を IP マスカレードとよびます。これは NAPT (Network Address Port Translation) や PAT (Port Address Translation) ともよばれます。ポート番号まで含めて保持することで、一つのグローバル IP と複数の LAN 内プライベート IP アドレスの変換が可能になります。
送信元ポート番号 16bit + 宛先ポート番号 16bit
シーケンス (Seq) 番号 32bit ← セグメントの識別番号
確認応答 (ACK) 番号 32bit ← 受信済みセグメントの範囲を示す
TCPヘッダ長 4bit + 将来の機能拡張用の予約 6bit + コードビット 6bit + 送信側に通知する受信側のウィンドウサイズ 16bit
エラー検査用のチェックサム 16bit + URGコードビットが有効の場合に参照される緊急ポインタ 16bit
(オプション 32bit単位で可変長 >= 0) ← ここを除くとTCPヘッダは 20 バイト
=> SYN:1,ACK:0,Seq番号:M,ACK番号:0
<= SYN:1,ACK:1,Seq番号:N,ACK番号:M+1
=> SYN:0,ACK:1,Seq番号:M+1,ACK番号:N+1
以上のやり取りによってシーケンス番号の初期値 M, N が決定されます。最初のセグメントを特に SYN パケットとよびます。それ以外のセグメントは ACK コードビットが常に 1 であり ACK パケットとよびます。初回 M, N を除く新規セグメントの Seq 番号には、受信した最後のセグメントに含まれる ACK 番号を使用します。ACK 番号はスリーウェイハンドシェイク中は相手のセグメント Seq 番号 K に「K+1」とするだけです。それ以降の通信では、受信したセグメント Seq 番号 K に受信したTCPヘッダを除くデータのバイト数 L を足して ACK 番号が「K+L」のセグメントを返します。データ量が 0 バイトのセグメントに対する返信時には相手のセグメント Seq 番号が「K+0」となり変化しないことになります。データが 0 バイトのセグメントについてはそもそもACKを待つ必要がないためこれで問題になりません。
FIN コードビットが 1 の FIN パケットをお互いに送信して通信終了の合意を取ります。
=> ACK:1,FIN:1,Seq番号:K,ACK番号:L
<= ACK:1,FIN:0,Seq番号:L,ACK番号:K+1 (通信終了の合意)
<= ACK:1,FIN:1,Seq番号:L,ACK番号:K+1
=> ACK:1,FIN:0,Seq番号:K+1,ACK番号:L+1 (通信終了の合意)
ポート番号フィールドは 16bit であるため 0-65535 の範囲になります。そのうち 1-1023 はウェルノウンポート番号です。
クライアント側のポート番号は自動設定されるのが通常です。ポート番号フィールドは 16bit であるため 0-65535 の範囲が使用可能ではありますが、そのうちランダムポートとよばれる 1025-65535 の範囲から選ばれます。
上述の MTU から IP ヘッダと TCP ヘッダを除いた値を MSS (Maximum Segment Size) とよびます。
[イーサネットヘッダ][MTU以下][イーサネットトレーラ]
における MTU 部分を MSS を用いて表現すると以下のようになります。
[イーサネットヘッダ][IPヘッダ][TCPヘッダ][MSS以下][イーサネットトレーラ]
送信元ポート番号 16bit + 宛先ポート番号 16bit
UDPヘッダとデータの合計 (データグラム) の長さ 16bit + エラー検査用のチェックサム 16bit
UDP を利用するアプリケーション層のプロトコルとしては DHCP や TFTP、NTP、ルーティングプロトコルの RIP が有名です。それぞれのポート番号はウェルノウンポートの範囲に含まれます。UDP を利用するアプリケーションは「動画や音声などのパケットロスよりもリアルタイム性を重視するもの」や「伝えたい情報量がとても小さくデータグラムにすべて含めることができるため、スリーウェイハンドシェイクを行う TCP を用いると非効率なもの」です。後者には DNS や DHCP が該当します。