ネットワーク(5)


IP (Internet Protocol)

IP Header

                     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                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               Options (may exist)                             |
                 ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Data                                          |
                  ...
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
ネットワーク上を流れるデータの Byte Order (= Network Byte Order)は Big Endian である。 すなわち、32ビット幅のデータは、0〜7, 8〜15, 16〜23, 24〜31の順で流れる。

(注) 32ビットのデータ 0x12345678 をメモリの0番地〜3番地に記憶する場合、 Archtectureによって以下のように異なる。ちなみに、MC68000やSPARCは Big Endian, Intel の 80486, Pentium などは Little Endian である。

Endian0番地1番地2番地3番地
Big Endian0x120x340x560x78
Little Endian0x780x560x340x12

(例)renoir(133.99.10.7) から vermeer (133.99.10.3) にtelnetしていて'a'と
タイプしたときのIPパケット
tcpdump -c 1 -x 'port 23'
vermeer# tcpdump -c 1 -x 'port 23'
tcpdump: listening on le0
11:08:13.973330 renoir.tsuda.ac.jp.1024 > vermeer.tsuda.ac.jp.telnet: P 2716420308:2716420309(1) ack 243695523 win 17520 (DF) [tos 0x10]
                         4510 0029 7099 4000 4006 ab55 8563 0a07
                         8563 0a03 0400 0017 a1e9 48d4 0e86 7fa3
                         5018 4470 6e8c 0000 6161 6161 6161

133.99.10.7 = 0x85630a07, 133.99.10.3 = 0x85630a03

IP routing

通信の際に、目的地までIPパケットを届ける責任はIP層にある。 IPパケットの目的地への届け方を決定する仕事を routing (ルーティング、 経路制御)と呼ぶ。同一のネットワーク(PPPなどのPoint-to-Point、 またはEthernetなどの共有ネットワーク)上のマシンが目的地である場合は、 相手に直接送る(たとえば、Ethernet経由の場合は、そのマシンの Ethernet AddressをARPで調べて直接送りつける)。 しかし、他のネットワーク上のマシンが目的地である場合は、経路制御は router に委ねられる。

routerとは、複数のネットワーク上に接続されたシステムであり、 他のネットワークへのデータグラムは、まずrouterに送られる。

経路制御表(Routing Table)

各計算機は個々の目的地への経路を示す、routing table(経路制御表)を 持っている。routing tableを見るには "netstat -n -r" を使う

経路制御の手順

  1. 経路制御表を見て、送り先のアドレスが特定のホスト経路に合致すれば、 その経路が使われる。
  2. 送り先のアドレスが、ネットワーク経路に合致すれば、その経路が使われる。
  3. 上の2つに当てはまらなければ、default経路を使う。
  4. default経路もなければ、エラーとなる。
例1. Fig.3.3 同じネットワーク上の計算機に送る
例2. Fig.3.4 ルータを経由して他のネットワーク上の計算機に送る

subnet mask (サブネット・マスク)

IP Address をネットワーク部(ネットID+サブネットID)とホスト部にわけて考える。 ネットワーク部を表わすビットを1にした32ビットのパターンをsubnet maskと呼ぶ。
    ホスト部 all 0 --- ネットワーク・アドレス
    ホスト部 all 1 --- ブロードキャスト・アドレス
特殊なIPアドレスも存在する(Fig.3.9)。
IP AddressAvailable?説明
NetIDSubnetIDHostIDSRCDST
00OKNGこのネット上のこのホスト自身(制限あり)(*1)
0hostidOKNGこのネット上の特定のホスト(制限あり)(*1)
127AnyOKOKloopback address
-1-1NGOK limited broadcast (転送されない)(*2)
NetID-1NGOKNetIDのnet direct broadcast (*3)
NetIDSubnetID-1NGOKsubnet direct boradcast to netid.subnetid
NetID-1-1NGOKall subnet direct broadcast to netid (*4)
(*1) ... bootpなどでホストのIPアドレスを取得する際に使う
(*2) ... 255.255.255.255
(*3) ... subnetを使わない場合
(*4) ... 本来は全てのサブネットに転送すべきだが、現在の多くの実装では転送しない

karel.tsuda.ac.jp# ifconfig -a
le0: flags=63
        inet 133.99.194.1 netmask ffffff00 broadcast 133.99.194.255
        ether 8:0:20:19:e7:b1 
le1: flags=63
        inet 133.99.10.1 netmask ffffff00 broadcast 133.99.10.255
        ether 8:0:20:19:e7:b1 
lo0: flags=49
        inet 127.0.0.1 netmask ff000000 

karel.tsuda.ac.jp# netstat -in
Name  Mtu  Net/Dest      Address        Ipkts  Ierrs Opkts  Oerrs Collis Queue 
le0   1500 133.99.194.0  133.99.194.1   2149806 0    2033336 0    113552 0     
le1   1500 133.99.10.0   133.99.10.1    1697755 0    2045358 29   59620  0     
lo0   1536 127.0.0.0     127.0.0.1      152766  0    152766  0    0      0     

 karel.tsuda.ac.jp# netstat -nr
Routing tables
Destination          Gateway              Flags    Refcnt Use        Interface
133.99.161.121       133.99.194.250       UGH      0      0          le0
127.0.0.1            127.0.0.1            UH       3      1279       lo0
133.99.161.126       133.99.194.250       UGH      0      0          le0
133.99.161.127       133.99.194.250       UGH      0      0          le0
default              133.99.194.250       UG       1      281896     le0
133.99.144.0         133.99.194.250       UG       0      1722       le0
133.99.128.0         133.99.194.250       UG       0      19633      le0
133.99.160.0         133.99.194.250       UG       0      1484       le0
133.99.192.0         133.99.194.250       UG       0      712        le0
133.99.145.0         133.99.194.250       UG       0      0          le0
133.99.161.0         133.99.194.250       UG       0      3469       le0
133.99.193.0         133.99.194.250       UG       0      0          le0
133.99.162.0         133.99.194.250       UG       0      19         le0
133.99.10.0          133.99.10.1          U        6      71977      le1
133.99.194.0         133.99.194.1         U        24     151456     le0
133.99.195.0         133.99.194.250       UG       0      520        le0
133.99.196.0         133.99.194.250       UG       0      0          le0
133.99.102.0         133.99.194.250       UG       0      0          le0
133.99.198.0         133.99.194.250       UG       0      1015       le0