VOS 上での loopback network の注意点 ― 2006年07月03日 11時28分42秒
今回、問題があったのが UDP。もしかしたら TCP でも同じことが当てはまるかも知れないが、実証実験はしていない。
問題は、OS TCP 実装のプログラムと Stream TCP 実装のプログラムが通信できなかったこと。
OS TCP 側が送り手で、Stream TCP 側が受け手だった。これが、ループバックを通して UDP を送る。netstat -a で試したところ、UDP を listen しているのは確認した。送り手も送っているのであるが、受信側が受け取れないのである。
ループバックを通した場合の TCP スタックフレームの実装の違いが問題だった。
外部からの接続の場合は、OS TCP も Stream TCP も関係ない。お互いに通信もできる。しかし、ループバックを使った場合は、できないらしい。普通のネットワークデバイスであれば、送信時に TCP スタックを積み、IP に分割し、物理層に電気を流す。それがループバックだと TCP 層のスタックのまま、受け取り手に渡されるらしい。
それゆえ、実装の違う OS TCP と Stream TCP はループバックを通しての通信はできないらしい。この事実を知らなかったのと、実装が入れ替わっていたのを知らなかったので、余計な時間を喰ってしまった。
なお、ループバックで listen したいときは 127.0.0.1 のアドレスを使い、外部からの接続を受けたいときは 0.0.0.0 のアドレスを使うらしい。この部分は VOS 特有らしいと聞いたが定かではない。
最近のコメント