Ethernet frame (イーサネット・フレーム) 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Ethernet destination address (first 32 bits) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Ethernet dest (last 1 6bits |Ethernet source (first 16 bits)| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Ethernet source address (last 32 bits) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type code | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | IP header, then TCP (or UDP) header, then your data ... | ... | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Ethernet Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| IHL |Type of Service| Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification |Flags| Fragment Offset | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time to Live | Protocol | Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | TCP (or UDP) header, then your data .... | ... | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(例) (16進)c0a80001 --> (2進)1100 0000 1010 1000 0000 0000 0000 0001 --> (dotted format)192.168.0.1
(例1) ネットワーク部が24bit -> 255.255.255.0 (=0xffffff00) (例2) ネットワーク部が22bit -> 255.255.252.0 (=0xfffffc00)
(例) ネットワークアドレスが192.168.0.0でsubnet mask が 255.255.255.0の場合 ネットワークアドレスを192.168.0.0/24 または 192.168.0/24 と表現する。 192 . 168 . 0 . 0 1100 0000 1010 1000 0000 0000 0000 0000 |<---- network part ------->| ^^^^ ^^^^ all 0 (24bits)
(例1) 192.168.0/24のネットワークのbroadcast addressは192.168.0.255 192 . 168 . 0 . 255 1100 0000 1010 1000 0000 0000 1111 1111 |<---- network part ------->| ^^^^ ^^^^ all 1 (例2) 192.168.128/22のネットワークのbroadcast addressは192.168.131.255 192 . 168 . 131 . 255 1100 0000 1010 1000 1000 0011 1111 1111 |<---- network part ----->|^^ ^^^^ ^^^^ all 1
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port | Destination Port | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Length | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | your data ... | ... | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port | Destination Port | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Acknowledgement Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | |U|A|P|R|S|F| | | Offset| Reserved |R|C|S|S|Y|I| Window | | | |G|K|H|T|N|N| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | Urgent Pointer | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | your data ... | ... | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
ARP/RARPパケットのフォーマット 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Hardware type | Protocol type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | H Length | P Length | Operation | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Ethernet source address (first 32 bits) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Ethernet source (last 32 bits)| Source address (first 16 bits)| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source address (last 16 bits) | Ethernet dest (first 16 bits) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Ethernet destination address (last 32 bits) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+IP AddressをEthernetアドレスに変換するのに ARP (Address Resolution Protocol) 表を用いています。ARP表は "arp -a"コマンドによって参照できます。
arp表 (Unix) Net to Media Table Device IP Address Mask Flags Phys Addr ------ -------------------- --------------- ----- --------------- le0 karel1 255.255.255.255 08:00:20:19:e7:b1 le0 praha 255.255.255.255 00:60:97:91:44:ac le0 renoir 255.255.255.255 00:20:af:17:eb:a9 le0 vermeer 255.255.255.255 SP 08:00:20:7a:1b:d3 ...
ARP表 (Windows系OS) C:\Windows> arp -a interface: 133.99.10.7 Internet Address Physical Address Type 133.99.10.1 08-00-20-19-e7-b1 dynamic 133.99.10.2 00-00-c0-10-11-78 dynamic ...ARP表にエントリのないホストと通信するときの手順は次のようになります。
以下の説明では、「ルータ (router)」と「ゲートウェイ (gateway)」 という用語を同義語として使っています。
通信の際に、データはIPを使って目的地まで送られていきます。 データを目的地へ届けるその方法を決定する仕事を routing (ルーティング、 経路制御)と呼びます。
同一のネットワーク上のマシンが目的地である場合は、 そのマシンのEthernet Addressを調べて、そのEthernet経由で 直接送ります。
しかし、他のネットワーク上に目的のマシンがある場合は、 経路制御は ルータ (router)に委ねられます。 ルータとは、複数のネットワークに接続されたシステムであり、 他のネットワークへのデータはまずルータに送られます。
次のようなネットワークを考えましょう。network 1 network 2 network3 128.6.4/24 128.6.21/24 128.121/16 ====+===========+========+= =+======+= =+========+= | | | | | | | | | | | | | | ----+---- ----+---- --+----+-- --+----+-- --+--------- 128.6.4.2 128.6.4.3 128.6.4.1 128.6.21.1 128.121.50.2 128.6.21.2 128.121.50.1 Host A Host B router R router S Host Cルータは、2つの異なるネットワークのアドレスを持っています。 Host AからHost Cへデータを転送する場合は、データは2つの ルータ R, S を経由することになります。 AはBやCへ送るデータがどのような経路を取るべきかを表 (経路制御表、routing table)にして持っています。 上の例では、経路制御表は次のようになっています。
ネットワーク | ルータ | 度数 |
128.6.4 | none | 0 |
128.6.21 | 128.6.4.1 | 1 |
128.121 | 128.6.4.1 | 2 |
経路制御表 (Unix) nitta@vermeer 3> netstat -n -r Routing Table: Destination Gateway Flags Ref Use Interface -------------------- -------------------- ----- ----- ------ --------- 127.0.0.1 127.0.0.1 UH 0 46 lo0 133.99.161.129 133.99.10.1 UGH 0 0 133.99.1.0 133.99.10.1 UG 0 23 133.99.161.0 133.99.10.1 UG 0 3 ... default 133.99.10.1 UG 0 0
経路制御表 (Windows系OS) C:\Windows> netstat -n -r Active Routes: Network Address Netmask Gateway Address Interface Metric 0.0.0.0 0.0.0.0 133.99.10.1 133.99.10.7 1 127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1 133.99.10.0 255.255.255.0 133.99.10.7 133.99.10.7 1 133.99.10.7 255.255.255.255 127.0.0.1 127.0.0.1 1 133.99.255.255 255.255.255.255 133.99.10.7 133.99.10.7 1 224.0.0.0 224.0.0.0 133.99.10.7 133.99.10.7 1 255.255.255.255 255.255.255.255 133.99.10.7 133.99.10.7 1次の行は特別なIPアドレスを表しています。
(Unixの場合) 127.0.0.1 127.0.0.1 UH 0 46 lo0 (Windows系OSの場合) 127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1127.0.0.1は loop back address (ループバック・アドレス)です。 これは、テストのためや、自分自身の計算機上にある他のアプリケーションと 通信するのに使われます (このアドレスはhostsファイルに localhost として登録されています)。
(Unixの場合) default 133.99.10.1 UG 0 0 (Windows系OS場合) 0.0.0.0 0.0.0.0 133.99.10.1 133.99.10.7 1すなわち、この経路は他のどのエントリにもマッチしない宛先への データの転送に使われます。 上の例では、他のエントリにマッチしないデータは 133.99.10.1 のルータに送られることになります。
static routeの設定例 (Unix) # route add default 133.99.10.1 1
static route(+その他)の設定例 (Windows系OS) マイコンピュータ→コントロールパネル→ネットワーク →ネットワークの設定→追加→プロトコル→Microsoft→TCP/IP →ネットワークの設定→TCP/IP →TCP/IPのプロパティ →IPアドレス→IP Addressを指定 →IP Address: 133.99.X.X →サブネットマスク: 255.255.255.0 →ゲートウェイ→133.99.X.1→追加 →DNS設定 →DNSを使う →ホスト: compXX →ドメイン: tsuda.ac.jp →DNSサーバの検索順→133.99.161.3→追加 →ドメインサフィックスの検索順 →tsuda.ac.jp→追加 →OK (TCP/IPのプロパティ) →OK (ネットワーク) →再起動しますか? →OK
「OSIのネットワーク参照モデル」とLANの拡張
アプリケーション層 | アプリケーション層 | |
プレゼンテーション層 | プレゼンテーション層 | |
セッション層 | セッション層 | |
トランスポート層 | トランスポート層 | |
ネットワーク層 | <--- router ---> | ネットワーク層 |
データリンク層 | <--- bridge ---> | データリンク層 |
物理層 | <--- repeater ---> | 物理層 |
network 1 network 2 128.6.5/24 128.6.5/24 ==+===========+== ==+========+============+===== | | | | | --+------ --+-------+-- ---+----- ---+----- 128.6.5.2 bridge 128.6.5.3 128.6.5.4 Host A Host B Host C計算機AがBへデータグラムを送る際、まずAはBのEthernet Addressを 尋ねる ARP要求 (ARP request) を broadcast します。 ブリッジはbroadcastをネットワーク2に送ります。 するとBは自分のEthernet Addressを答えます(ARP reply、ARP 応答)。 以後、AからBへの通信はBのEthernet Addressを用います。
IP Reachableの調査 (Unix) nitta@vermeer 2> ping www.netscape.com www-me1.netscape.com is alive
IP Reachableの調査 (Windows系OS) C:\Windows> ping www.netscape.com Pinging www-me1.netscape.com [204.152.167.20] with 32 bytes of data: Reply from 204.152.167.20: bytes=32 time=553ms TTL=237 Reply from 204.152.167.20: bytes=32 time=531ms TTL=237 ...あるホストへの(途中のマシンも含めて)経路を知りたい 場合は traceroute コマンドで調べることができます。
経路探索 (Unix) nitta@vermeer 2> /usr/sbin/traceroute www.netscape.com traceroute to www24.netscape.com (207.200.73.73), 30 hops max, 40 byte packets 1 karel1 (133.99.10.1) 2 ms 1 ms 1 ms 2 cisc194 (133.99.194.250) 1 ms 1 ms 1 ms 3 cisckan (133.99.144.254) 2 ms 2 ms 2 ms ... 18 h-207-200-73-73.netscape.com (207.200.73.73) 314 ms 306 ms *
経路探索 (Windows系OS) C:\Windows> tracert www.netscape.com Tracing route to www24.netscape.com [207.200.73.73] over a maximum of 30 hops: 1 1 ms <10 ms <10 ms karel.tsuda.ac.jp [133.99.10.1] 2 2 ms 1 ms 2 ms cisc194.tsuda.ac.jp [133.99.194.250] 3 2 ms 2 ms 2 ms cisckan.tsuda.ac.jp [133.99.144.254] ... 18 264 ms * 281 ms www24.netscape.com [207.200.73.73] Trace complete.
Private Address: RFC1918 (旧 RFC1597) 10.0.0.0 - 10.255.255.255 (10/8 prefix) 172.16.0.0 - 172.31.255.255 (172.16/12 prefix) 192.168.0.0 - 192.168.255.255 (192.168/16 prefix)Private Address とは、「勝手に使ってもいいが、決して そのアドレスではインターネットにパケットを流してはいけない」 IPアドレスのことです。