そうか、どうしてこんなに遅いんだろうと思ってたけど、
実際、こういうことが起きてるのかな。
こんなページを見つけた。
おおむね、こういう内容でした。
パケットロス発生のしくみ †
PPPのパケットは、以下のような構成で送信される(らしい)。
<パケット内容>
また、連続したパケットを送信する際は、以下のどちらも許されているようだ。
冗長形式
<パケット内容>
<パケット内容>
...
省略形式
<パケット内容>
<パケット内容>
<パケット内容>
...
で、Linux kernel の ppp 実装ではデフォルトで後者(2.)を使う。しかし、一部のモデムデバイス(京セラPHSに限らないようだ)ではなぜか通信内容を監視しており、後者(2.)の方式を認識できずに捨ててしまう。
TCP接続での例:
<パケット1> → 届く
<パケット2> → 捨てられる
<パケット3> → 捨てられる
ここでタイムアウトまで待つ
<パケット2 (再送)> → 届く
<パケット3 (再送)> → 捨てられる
ここでタイムアウトまで待つ
<パケット3 (再々送)> → 届く
というわけで、異様な遅延が発生してしまう。このようなデバイスでは省略形式を使わないようにする必要がある。
↑
確認方法 †
1秒未満の間隔でpingを飛ばしてみると、以下のように50%のパケットロスが発生する。
$ ping -i 0.5 xxx.xxx.xxx.xxx
PING xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx) 56(84) bytes of data.
PING xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx) 56(84) bytes of data.
64 バイト応答 送信元 xxx.xxx.xxx.xxx: icmp_seq=1 ttl=64 時間=0.064ミリ秒
64 バイト応答 送信元 xxx.xxx.xxx.xxx: icmp_seq=3 ttl=64 時間=0.076ミリ秒
64 バイト応答 送信元 xxx.xxx.xxx.xxx: icmp_seq=5 ttl=64 時間=0.045ミリ秒
--- xxx.xxx.xxx.xxx ping 統計 ---
送信パケット数 6, 受信パケット数 3, パケット損失 50%, 時間 3033ミリ秒
参照:http://cae.best.vwh.net/irqtune/
↑
追記 †
下記のような接続になっているのではないか、という話があった。ならばWX310KがPPPを解釈して(しそこなって)いる、そしてAH-N401C(AIR EDGEカード)では問題がないことがスッキリと理解できる。
[PC/PDA] ---(PPP)--- [WX310K] ---(別のプロトコル)--- [ISP]
pppパケットロス対策
「逃げ」の解決策は http://cae.best.vwh.net/irqtune/ にあるように、
あるいは http://www.teamgedoh.net/tech/index.php?Tips%2FWX310K%20with%20Linux%28USB%29 にもあるように
static int flag_time = 0;
して drivers/net/ppp.c (linux/drivers/net/ppp_async.c)を再コンパイルか?
あるいは /etc/modules.conf で
options ppp_async flag_time=0
か。