ADSLでPSO!


 

巷では,ADSLに変えてからパイオニア2へ帰れなくなったという話を聞きます. かくいう私も喜び勇んでADSLに変えたものの,パイオニア2へ帰れなくなってしまいました.
 色々調べた結果,解決方法を見いだしたので,以下に記しておきます.


方法:

 

・DCを繋いでいるルーター(あるいはダイアルアップ共有をしているWindowsマシン)のMSS(Max Segment Size)または,MTU(Max Traansmit Unit)の値を以下のように変更.

 

『1452byte以下で,かつ4の倍数の値.』

 

 

MSS(MTU)って何?って方は,申し訳ありませんが,TCP/IPの勉強をなさるか,手近な詳しそうな人間捕まえて聞いてみてください.

 

サイズについては,大きくするほど理論上の転送効率は上がります.しかし,パケットエラーが発生した際の事を考えると,再送処理もこのサイズで行われるので,パケットのエラーやパケット消失が頻繁に起こる場合は,かえって転送効率は落ちます.
 フレッツADSLが利用しているNTTの『地域IP網』と呼ばれるネットワークは,フレッツISDNの頃から,パケット消失が時々発生するという話をよく聞きます.少し小さめのサイズに設定した方がよいかも知れません.


解説:

 そもそも,これらの不具合の原因はDCのPSOが『4の倍数のサイズのパケットしか受け取れない』という手抜き的?仕様に依るものです.

 ソニチは,PSO-Serverから返すデータサイズを,かならず4の倍数で返すようにしている様です.
 訂正:DCのTCP/IPスタックが,データの途中のパケットが必ず4の倍数で来る事しか想定していない模様です.

  だから普段はこの問題は表面化しませんでした.しかし,フレッツADSLを通すことによって,パケットが4の倍数以外のサイズで分割されることにより,問題が表面化しました.
 IPでは,Server側とcliant側との間でMSSサイズを決めることによって,大きなデータを転送するときの,分割したときのパケットサイズをどの大きさで分割するか決めています.MSSサイズはServer側のinterface・cliant側のinterface・経路上に存在するルーターのinterfaceのうち,もっとも小さい値が採用されます.
 フレッツADSLのMSSサイズは1454です.一方DCのPSO使用時の,BbAのMSSは1480になっています.ココで,ルーターのMSSサイズがフレッツADSLのMSSよりも大きければ,MSSはこの中で最小の値である1454に決定されます.1454は4の倍数でありません.ココで,DCに『サイズが4の倍数ではないパケット』が届くことになり,フリーズします.

 何故4の倍数で無いといけないのかというと,推測ですが,DreamCastが32bitプロセッサであることが理由だと思われます.32bitプロセッサでは,32bit幅,すなわち4byte単位でデータを扱うことは得意ですが,それ以下の単位のデータを扱うことは,出来なくはないですが,あまり得意ではなく,プログラムも複雑になることがあります.よって,パケットサイズを4の倍数のみしか扱わないようにすることによって,プログラムの簡略化,および通信処理速度の向上がはかれます.
  訂正:TCP/IPでは,パケットは必ず4の倍数のサイズで扱うという決まりがあります.4の倍数では無いデータを送る時には「パディング」というダミーデータを付加して4の倍数に合わせ込みます.一方受信側では,ヘッダの情報を見てパディングが存在すれば,パディングを取り去る処理が必要なのですが,どうもこのあたりがダダしく処理出来ていないっぽいようで….ベース部分はWindowsCEの筈なので,そんなに酷い作りではないと思うんですがねぇ…

 以上の内容は,各種の情報を元に個人的に実験・推測した内容です.
 もし事実と相違があるならば,加筆・訂正を行いたいと思うので,お手数ですがご連絡下さると助かります.

2001 July Written by /wata/@PSO

ルートに戻る