ネットワークの基礎
はじめに
「何について話すか」の前に。
・ ネットワークレイヤ
お馴染みOSI階層モデルと対応するTCP/IPモデル
OSI(Open Systems Interconnection:ISOにより制定された規格) によるレイヤ構造
|
第7層 アプリケーション層 |
文字通り |
|
第6層 プレゼンテーション層 |
データ表現の統一(文字種、改行) |
|
第5層 セッション層 |
telnet, ftp, http |
|
第4層 トランスポート層 |
TCP, UDP |
|
第3層 ネットワーク層 |
IP |
|
第2層 データリンク層 |
イーサネット(802.2), PPP |
|
第1層 物理層 |
イーサネット(802.3), ケーブル、コネクタ |
TCP/IPにおける階層構造モデル
TCP/IPを用いたアプリケーションによる通信によってデータが伝播する様子を示します。
さて、この文書は…
何について書かれていないか
・ ネットワーク全般の話(TCP/IPでないもの)
・ ネットワークの設定の話(「正しいプログラムを書けば通信出来る状態」が前提)
・ ftpやhttp など特定のセッション層~アプリケーション層の話
・ イーサネット、HLDC/PPP以下の物理層~データリンク層の話
・ セキュリティ、過負荷攻撃に関する話
何について書かれているか
TCP/IPにおける通信内部の話
・ IP、UDP、TCPの話
それぞれの役割分担と特徴
IPとは?
・ UDP, TCP(トランスポート層)の話
トラディショナルなサーバ・クライアントモデル
TCPの内部構造と挙動(メインとなる予定)
→TCP/IPを用いたアプリケーションの設計などに役立ちます(多分)。
→TCP/IPのモニタリングに役立ちます(ほぼ確実に)。
その他
・ IPv6
・ NATを超える!TCP/UDP/IP?
用語など
・ RFC (Request For Comments): インターネットに関するプロトコルなどの標準化団体IETF(Internet Engineering Task Force) がまとめている文書群です。一連の番号が振られて管理されています。http://www.ietf.org/ から”rfc-index.txt” を入手し、欲しい情報の番号を調べてから該当する RFC を得るのが早道です。また、後方からサーチして更新された新しいプロトコルやオプションが無いか確認する必要があります。
・ バイト: この文書では 8bit 単位を表します。RFC ではバイトではなく「オクテット(octet)」が用いられています。
・ パケット: ネットワーク層以下におけるデータ送受信において意味を持つ、独立した塊の最小単位です。
・ データグラム: パケットに分割されない(または、される前の)一塊のデータです。
・ フラグメント: 分割された断片のパケットを表します。分割されたパケットもまたパケットです。
・ ルーティング: パケットを目的の場所まで導く経路、或いは導く動作(出力インタフェイスの選択など)を表します。経路は予め設定しておくものもあれば、通過するパケットの情報から動的に記録されるものもあります。
・ IPアドレス: この文書では特に断りの無い限りマシン固有のアドレスを表します。
・ セッション: この文書ではトランスポート層同士の通信を指します。
・ ポート番号: IPアドレスと組を為した上でセッションの一端を表す識別子です。IPアドレスで示されるマシン上の特定のサービスを表す場合があります。
・ ソケット: セッションの一端を示す識別子(=IPアドレス+ポート番号)です。一対の接続されたソケットが一つのセッションを表します。
ネットワーク層、トランスポート層の話
役割分担と特徴
ネットワーク層
・ IP (Internet Protocol)
パケットのルーティングを行います。但し到達保障はありません。
データリンク層の制限(Maximum Transmission Unit)から来るデータグラムの分割と再結合(パケット順序の保証)を行います。
伝達距離制御を行います(Time To Live: 詳しくは後述)。
トランスポート層
・ UDP (User Datagram Protocol)
基本的にIPにデータを載せただけのものです。
依然として到達保証はありません。また、データグラム到着順も保証されません。
(TCPに比べて)データ転送コストはかかりません。
・ TCP (Transmission Control Protocol)
自動的にデータの再送などを行い、データの到達順や到達性を確保します。
フローコントロール(流量制御)を行います。
転送データ以外にコネクション開始/終了その他のコストが必要となります。
各層によって扱われるデータ
以下の図は各層における分割を考慮していないので注意が必要です。
この文書では、IPヘッダ、UDPヘッダ、TCPヘッダの内容についても取り上げます。
IP (IPv4: RFC791)
IPの必要性
異なるプロトコルを用いている、離れたネットワーク同士を結合する必要から登場しました。
・プロトコル毎にケーブルを敷設するのはコスト高で拡張性に乏しい
ネットワークA ネットワークB ネットワークC ネットワークA’ ネットワークB’ ネットワークC’ ?
! ネットワークA ネットワークC’ ネットワークB’ ネットワークA’ ネットワークC ネットワークB
ネットワーク間の仲介役を果たすので Inter-Network Protocol = Internet Protocol
IPの実際
パケットヘッダの構成 (RFC791 より抜粋)
主なフィールドと意味
|
Version |
IPv4 では 4 固定 |
|
Internet Header Length |
32bit 単位でのヘッダ長で最小値 5 |
|
Total Length |
ヘッダを含むデータグラム長(パケット長ではない) |
|
Identification |
送信側で指定されるデータグラム識別子 |
|
Flags |
パケットが分割可能か/最後のフラグメントか等の情報 |
|
Fragment Offset |
分割パケット位置(8バイト単位) |
|
Time To Live |
最大データグラム生存時間 |
|
Protocol |
ICMP, TCP, UDP などの種別 |
|
Source/Destination Address |
送出元・配送先IPアドレス |
ICMP (Internet Control Message Protocol: RFC792)
“ping” や “traceroute / tracert” が用いるプロトコルです。IP ヘッダの Protocol Field が 1 であるような IP の上位プロトコルですが、IP同様ネットワーク層に分類されることが多いようです。”ping”はecho/reply、traceroute はTTLのexpireによる応答を用いています。この文書ではこれ以上取り上げません。
UDP (RFC768)
IP を利用して実装されている場合は特に UDP/IP (UDP over IP) と記します。
ポート
16bit長の識別子です。通常、サーバ側は目的に応じて意味のある値(Well-known ポート)を用いて待ち受け、クライアント側はパケットを生成するたびに新たに値を割り当てて、サーバのサービスポートへ送信します。
例>IP Messenger の場合:送信側をクライアント、受信側をサーバとみなせる。
192.168.0.1 192.168.0.10 ポート2425で待ち受ける (IP messenger 共通) IPアドレス192.168.0.10, 任意のポート16384 でソケットを作成、データ出力 192.168.0.10:16384-192.168.0.1:2425 送信元のポートへ返事を出力する。
パケットヘッダの構成
IPヘッダ以降に以下のヘッダとデータを付加します。IPヘッダにおける Protocol フィールドの値は 17です。
Source Port(送出元ポート番号)は必須ではありません(サービスの仕様に依存します)。
TCP (RFC793)
IP を利用して実装されている場合は特に TCP/IP (TCP over IP) と記します。
典型的なサーバ・クライアントモデル
例>telnet
双方向通信開始 ACK SYN+ACK