TCP/IPとルーティング

15.4. TCP/IPとルーティング

ウェブを見るときのように、手元のコンピュータとドメイン名で指定した相手先との通信は、1:1で行われます。部屋での大声の会話が混ざる状況とは違って、他の人が見ているページがデータが混入したりはしません。この1:1の通信路を仮想的に実現する 技術が TCP/IP です。

ウェブをみるたびに手元とウェブサーバのあいだを専用ケーブルをあらたに敷設すれば1:1の通信ができますが、 (もちろんそれはできないので)、共用の通信設備を利用した仮想的な1:1の通信路を実現します。

パケットと通信網 #

データの送受信は、長文を何枚かの葉書に分けて送るように、パケットという単位に分割して送ります。 パケットは通常IPパケットを指しますが、TCPのセグメント、イーサネットのフレーム、IPフラグメントなども含めて、HWBでは小分けにしたデータという意味で使います。 郵便局でいろいろな宛先の葉書が取り扱われても、それぞれがきちんと届けられます。同様にインターネット通信でも、途中の機器では様々な宛先のパケットが処理されています。葉書における郵便局のように、パケットが経由する中継地点を ルータ と呼びます。 分割されて届けられたパケットも、受信後に順番に並べれば元の文章を復元することができます。

2005 年頃のルータの接続状況の可視化 (Wikimediaata Commons, original は opte.org)

近隣ネットワークとルータ #

PC等の接続情報に書かれているルーターも、ルータの一つです。

ここに書かれているルーターは、機器をつないでいるネットワークの内部と外部で分けたときに、内外の通信を中継する役割を持ちます。 内部の接続機器から相手先への通信は、次のように行われます。

  1. 相手先IPアドレスが接続ネットワーク内 (近隣) なら、直接通信する。
    逆に、直接通信できる、ケーブルにパケットを流せば受け取ってもらえる機器のみが接続ネットワーク内のIPアドレスを持つように構成します。
  2. 相手先IPアドレスが接続ネットワークの外なら、ルーターに配送を依頼する。

宛先が内部か外部かは、そのIPアドレスで判断できます。 15.2. アドレス で、IPアドレスをグループ化して管理すること、グループはネットワークアドレスで示すことを説明しました。 現在のネットワークアドレスは、図の サブネットマスク から読み取れます。 ネットマスク (netmask) あるいは、サブネットマスクは、ネットワークアドレスに含まれるビットを1他を0としたbit列です。

たとえば、IPアドレスが 172.16.12.34 で netmask が255.255.255.0 の時のネットワークは以下のようになります。 255の2進表現が11111111 なので、netmaskは、左から24bit が1で、/24 と同等の意味です。

項目 値 (2進)
IPアドレス 172.16.12.34 10101100 00010000 00001100 00100010
netmask 255.255.255.0 11111111 11111111 11111111 00000000
ネットワーク 172.16.12.0/24 10101100 00010000 00001100 00000000

CUI #

手元のコンピュータのIPアドレスとnetmaskは、CUIからも調べられます。

ifconfig en0
en0: ()
  ()
  inet 172.16.12.34 netmask 0xffffff00 broadcast 172.16.12.255
  ()
この応答は以下のように解釈します。

上記の表記 2進表現
ip address 172.16.12.34 10101100 00010000 00001100 00100010
netmask 0xffffff00 11111111 11111111 111111111 0000000
broadcast 172.16.12.255 10101100 00010000 00001100 11111111

なお、en0 はイーサネットケーブルに対応する名前で、省略すると無線など含めてすべて表示されます。Linuxなら ip a、Windowsなら ipconfig で同様の情報を入手できます。

broadcast #

broadcastは独別なIPアドレスで、ネットワークアドレスに含まれないビットをすべて1にしたものです。 このネットワークのIPアドレスを持つすべての機器に呼びかけるときに使います。 通常の機器のアドレスとしては使えません。

exercise
  1. /23に対応するnetmaskを16進数で入力してください。
  2. 172.16.12.0/23 のネットワークでのbroadcastアドレスを2進数で入力してください (32文字で回答してください)。
回答欄 1. 2.

localhost #

127.0.0.1 は、自分自身を表すアドレスとして使われます。localhostloopback とも呼びます。

経路 #

IPパケットは、バケツリレーのように、直接つながっている隣のルータに次々に送られます。 送り元から送り先までの道筋を経路、経路をつないでいる機器をルータ、次のルータに複数の候補があるときに適切に選ぶことをルーティング (経路制御) と言います。

通常の機器は、「外部」に通信するためのルータを1台設定することを冒頭で紹介しました。 この関係をルータを親とする親子とすると、多くの機器は木構造で親につながっています。 たとえば教室の端末は、部屋を管理するルータに通信を全部依頼し、部屋のルータは建物全体のルータに通信を全部依頼する、という「上流」に向かう流れです。家庭のインターネット接続でも、家中の機器は1台のルータが担っていることでしょう。木構造のネットワークでは、外部 (上流) への経路は一通りで、選択の余地がありません。

一方で、大きなインターネットプロバイダ・事業者 (専門用語では AS と呼びます) 同士は相互に接続しています。つまり、どこが上流という概念がなく、どの隣接ルータに転送するかの判断が必要になります。

経路表 は、宛先ネットワークアドレス毎に、どの隣接ルータに転送すると届くかを記録したリストです。 もしIPアドレスがそれぞれバラバラの接続先を持っているとすると、すべてのルータで \(2^{32} \) つまり20億以上の項目の表が必要となり、実現不可能です。
ネットワークアドレスの仕組みで、似たIPアドレスを持つ宛先を同一視して扱うことで、経路表の項目数を少なく抑えることが大切な工夫です。

traceroute コマンドを使うと、経路を表示することができます。 以下は、ECCSから、m.root-servers.orgwww.google.com への経路を示した例です。 1行が1つの機器で、手元から宛先の順に並び、IPアドレスや所要時間が計測されています。

traceroute m.root-servers.org
traceroute to 203.178.142.202 (203.178.142.202), 64 hops max, 52 byte packets
 1  172.19.1.254 (172.19.1.254)  2.638 ms  0.775 ms  0.667 ms
 2  172.19.0.1 (172.19.0.1)  0.684 ms  0.753 ms  0.662 ms
 3  133.11.139.73 (133.11.139.73)  22.145 ms  14.623 ms  22.016 ms
 4  ra56-vlan3013.nc.u-tokyo.ac.jp (133.11.125.137)  1.541 ms  1.527 ms  1.593 ms
 5  ra57-vlan5.nc.u-tokyo.ac.jp (133.11.127.93)  1.642 ms  1.522 ms  1.523 ms
 6  brocade1.nezu.wide.ad.jp (133.11.125.202)  1.932 ms  1.621 ms  1.729 ms
 7  rssac.wide.ad.jp (203.178.142.202)  1.854 ms  1.906 ms  1.803 ms
traceroute www.google.com
traceroute to www.google.com (142.250.196.132), 64 hops max, 52 byte packets
 1  172.19.1.254 (172.19.1.254)  2.129 ms  0.662 ms  0.386 ms
 2  172.19.0.1 (172.19.0.1)  0.930 ms  0.709 ms  0.587 ms
 3  133.11.139.73 (133.11.139.73)  20.466 ms  20.240 ms  19.360 ms
 4  ra56-vlan3013.nc.u-tokyo.ac.jp (133.11.125.137)  1.895 ms  3.263 ms  10.596 ms
 5  ra57-vlan5.nc.u-tokyo.ac.jp (133.11.127.93)  1.574 ms  1.591 ms  1.639 ms
 6  150.99.190.97 (150.99.190.97)  2.057 ms  2.083 ms  2.051 ms
 7  150.99.11.33 (150.99.11.33)  2.538 ms  2.388 ms  2.439 ms
 8  as15169.ix.jpix.ad.jp (210.171.224.96)  2.369 ms  2.400 ms  2.390 ms
 9  108.170.242.97 (108.170.242.97)  2.696 ms
    108.170.242.129 (108.170.242.129)  4.126 ms  4.055 ms
10  142.251.60.197 (142.251.60.197)  2.738 ms  2.816 ms  2.907 ms
11  nrt12s36-in-f4.1e100.net (142.250.196.132)  2.576 ms  2.936 ms  2.520 ms

5番目の ra57-vlan5.nc.u-tokyo.ac.jp までは共通で、ここが東大の出口であることが予想できます。

一部のルータは traceroute に情報を返さないこともあります。その場合 * のみの行が生じます
IX

接続に当たっては、1:1でケーブルを引くことは無駄が多いので、IX (Internet Exchange Point) と呼ばれる 場所に集合して、多対多で接続することが一般的です。上記 8番にも jpix.ad.jp が登場しています。

jpix.ad.jp IX とは (jpnic) Internet Exchange Point(IX; 相互接続点)とは (sakura.ad.jp)

IPv6 アドレス #

新しいプロトコルの IPv6 では、アドレスに 128 ビットの数値を使います。 昔から使われている IPv4 では32ビットだったのに対して、大幅に拡大しています。

IPv6 アドレスの表記法は、全体の 128 ビットを 16 ビット 8 つに区切り、各 16 ビットを 16 進数で表してコロン : で繋ぎます。たとえば 2001:200:180:0:0:0:53:10:0:0:0:0:0:0:1 が IPv6 アドレスの例です。また IPv6 アドレスを表記する際は、連続する 0 を :: で省略できます。

アドレス 略記
2001:db8:180:0:0:0:53:1 2001:db8:180::53:1
0:0:0:0:0:0:0:1 ::1

なお、::1 は IPv6 でのlocalhostです。

IPv6のアドレスは長いため、それだけでもIPv4よりも、多くの通信を必要とし高性能なハードウェアを必要とします。インターネット草創期にはアドレスは32bitで十分と考えられていたため、32bitという設計は合理的でした。 一方、現代では 32bit 約40億の種類 しかない IPv4のアドレスでは不足が顕著になり、プライベートアドレスや細切れにしたネットワークを切り売りすることで対応してきました。そのため、インターネット中心部のルータの経路表はかなり大きくなっています。 IPv6では、広いアドレス空間からネットワークアドレスをゆとりを持って管理できて、経路表はシンプルに押さえられています。また末端の機器のIPv6対応も進んでいるため、今後切り替えが進んでゆくことでしょう。

詳細は割愛しますが、IPv6 はアドレス空間の拡張以外にも、セキュリティなど重要な機能を実現しています。

ドメイン名と DNS TCP/IPとルーティング ネットワークとコマンド