52455
有線 LAN ⇔ 無線 LAN で TCP 通信すると、データが送信元と受信先で順番が相違する? 謎な現象が起こっています。

無線 LAN,  
親機は BUFFALO WSR-300HP / WHR-G45S どちらでも発生  
子機は Archer T2UH

具体的には svn の使用中に気が付きました。数個ファイルを転送すると、つぎの 2 つのエラーが任意に発生します。

```

    svn: E210004: Malformed network data
    
    svn: E140001: zlib (uncompress): corrupt data: Decompression of svndiff data failed
    
```

エラーが出るので仕方なく何回も `svn cleanup && svn up` をやっています。何回でもエラーが発生します。

svnserve (Windows Server 2012) は有線 LAN で、svn は無線 LAN 側 (Windows Server 2012)
です。

そこでテストプログラムを作り、相違が発生するかどうか検証しました。16 バイトの固定長文字列を延々と送信するプログラムです。

`time is 0`  
`time is 1`  
`time is 2`  
`time is 3`  
...

有線 LAN 側ではこのような内容を延々と送信し、無線 LAN 側はそれを受信して内容確認するプログラムです。

結果、何回やっても異なる場所で順番の相違が発生しました。

`Diff! [time is 2348 ] should be [time is 589 ]`  
`Diff! [time is 2431 ] should be [time is 469 ]`  
`Diff! [time is 2247 ] should be [time is 600 ]`

無線 LAN 側でダイゼクタ… Wireshark を起動し、通信をキャプチャ。TCP Stream を追跡すると順番の相違はなく 0
から順番にキレイに並んでいることを確認しました。

TCP については詳しくないのですが、ウィンドウサイズ・シーケンス番号・ACK 番号とかそういったものの設定が関わってくるのでしょうか。

こういった現象って一般に認知されていたり回避策があったりするのでしょうか…
CC BY-SA 4.0
2019-01-31T13:17:57.243
52454
2019-01-31T14:20:09.527
10036
question
windows tcp wifi
無線 LAN 使用時の TCP データの順番の相違?
[Transmission Control Protocol -
データ転送](https://ja.wikipedia.org/wiki/Transmission_Control_Protocol#%E3%83%87%E3%83%BC%E3%82%BF%E8%BB%A2%E9%80%81)で

> TCP には以下のように User Datagram Protocol とは異なる重要な特徴がある。
>
>   * データ転送時の順序を保証 - 受信側でシーケンス番号を使って並べ替えを行う。
>   * 喪失パケットの再送 - 確認応答のないセグメントは再送する。
>   * 誤りのないデータ転送
>

と説明されているように、TCPは正しく受信できない場合は再送、並べ替えを行います。アプリケーションが読み出す段階では、データ順序が入れ替わることはありません。

使用しているPC・ハードウェアの故障を疑うべきです。メモリーエラー、ドライバ不良など。
CC BY-SA 4.0
2019-01-31T14:20:09.527
52455
2019-01-31T14:20:09.527
4236
52454
answer