ネットワーク(4)


リンク層


シリアル回線

SLIP (Serial Line IP)

シリアル回線(RS232C)上のIPデータグラムのための単純なカプセル化(RFC1055)。 欠点 IPパケットを送るためには、本来のデータ(たとえ1byteでも。 対話的な利用では1バイト毎にパケットが飛ぶことが多い)に IP ヘッダ (20byte) とTCP ヘッダ (20byte) が必要となる。 SLIPは遅い回線で使われることが多いので、このオーバーヘッドは 無視できない。 CSLIP (圧縮 SLIP) は、40バイトのヘッダを3〜5バイト程度に圧縮して送る。

PPP (Point-to-Point Protocol)

SLIPの欠点を解決したプロトコル (Fig.2.3)。

ループバック・インターフェイス

同一ホスト上のクライアントとサーバがIP通信するには loopback interface を用いる。
127.0.0.1	localhost
ループバック・インターフェイスや自ホストのIPアドレス宛の IPパケットは、ネットワークに送り出されることはない。

MTU

MTU (最大転送ユニット, Max Transfer Unit) は、そのリンク層で一度に 送ることのできる最大のデータサイズを表す(図2.5)。

MTUを調べる (Linux)
[nitta@degas ~]$ netstat -ni
Kernel Interface table
Iface   MTU Met  RX-OK RX-ERR RX-DRP RX-OVR  TX-OK TX-ERR TX-DRP TX-OVR Flags
lo     3584   0 982286      0      0      0 982286      0      0      0 BLRU
eth0   1500   0   2775      0      0      0   2223      0      0      0 BRU

MTUがIPパケットよりも小さい場合は、IPパケットは小さく分けられて (フラグメント、fragment)送られる。

2台のホストの間がネットワークで結ばれているとき、その 経路のうちの最小のMTUを、パスMTUと呼ぶ。


シリアル回線のスループット

Fig.2.5 「典型的なMTU」の 「PPP(低い遅延レベル)」ではMTUが296バイトに なっている。これはハードウェアからの要請ではなく、対話環境における 遅延時間を小さくし、かつ、大きいサイズのパケットもそれなりに 効率よく送るためにこのサイズが使われている。

MTUを小さくすると、データに対するヘッダの割合が大きくなり 転送効率が悪くなる。 しかし、MTUを大きくすると、小さいパケット(対話的な環境で 流れるパケットのほとんどがこれ)を、たとえ大きいパケット よりもキューの前につなぐとしても、その時点で転送中の 大きいパケットを待つ必要はあるので、遅延時間(期待値としては、 最大のパケットを送る時間の半分)が大きくなってしまう。

IP層は、データにIPヘッダとTCPヘッダを合計40バイト付加して、 リンク層(PPP)に渡す。 PPPは、これらのヘッダを(3〜5バイト程度に)圧縮して通信するが、 それはIP層には見えない。したがって、296バイトとなっているが、 MTUと同じサイズのデータのとき、実際に送られているのは 256バイト (+ 3〜5バイト)である。 PPPのヘッダでさらに5バイト付加されると仮定すると、 実際に送られているデータは 266バイト程度と仮定できる。

[例] 9600bps、8bitデータ長 (non-parity), 1 start bit, 1 stop bitの回線で送る場合
    1バイトのデータを送る時間    (8+1+1)/9600 秒

    266バイト送る時間は  266 * (8+1+1)/9600 = 0.277083... 秒
    このときの対話環境の平均待ち時間 = 最大サイズのパケットを送る時間/2
                                     = 0.1385... 秒

    MTUを1000と仮定すると、パケットの大きさは 1000-40+5+5=970 バイト程度。
    これを送る時間は 970 * (8+1+1)/9600 = 1.010... 秒。
    このときの対話環境の平均待ち時間 = 最大サイズのパケットを送る時間/2
                                     = 0.505... 秒 ←とても待てない