RSS RSS feed | Atom Atom feed

ネットワークの基礎

はじめに

「何について話すか」の前に。

 

     ネットワークレイヤ

お馴染みOSI階層モデルと対応するTCP/IPモデル

 

OSI(Open Systems InterconnectionISOにより制定された規格) によるレイヤ構造

第7層 アプリケーション層

文字通り

第6層 プレゼンテーション層

データ表現の統一(文字種、改行)

第5層 セッション層

telnet, ftp, http

第4層 トランスポート層

TCP, UDP

第3層 ネットワーク層

IP

第2層 データリンク層

イーサネット(802.2), PPP

第1層 物理層

イーサネット(802.3), ケーブル、コネクタ


 

TCP/IPにおける階層構造モデル

 

TCP/IPを用いたアプリケーションによる通信によってデータが伝播する様子を示します。

 

 

 

 

 

 

 

 


 

さて、この文書は…

 

何について書かれていないか

     ネットワーク全般の話(TCP/IPでないもの)

     ネットワークの設定の話(「正しいプログラムを書けば通信出来る状態」が前提)

     ftphttp など特定のセッション層~アプリケーション層の話

     イーサネット、HLDC/PPP以下の物理層~データリンク層の話

     セキュリティ、過負荷攻撃に関する話

何について書かれているか

TCP/IPにおける通信内部の話

     IPUDPTCPの話

それぞれの役割分担と特徴

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

汎用的なプロトコルで各プロトコルをwrap してやると…。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


ネットワーク間の仲介役を果たすので 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/replytraceroute TTLexpireによる応答を用いています。この文書ではこれ以上取り上げません。

 


 

 

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