UDPで1500を超える32k程度のデータを送信しようと考えています。
Windows10 32bit、プログラミングは趣味の範囲です。
私の理解ではMTUを超えるサイズであるので細かいパケットに分割されて
、相手に送信され、相手方で元のデータ塊に復元されると考えています。しかし、実際は送信者によって9割方届いたり、100%失敗したり結果が二分されています。
実験
3つの拠点から(家庭用PC Windows10 MTU0?, 国内VPS Ubuntu18 MTU1500, 海外VPS Ubuntu16 MTU1500)相互に送信できるか確認してみました。データは32kbです。結果としては国内からの送信のみ失敗するようです。1500以下のフラグメンテーションを起こさないサイズは問題ありません。 How to find mtu value of network through code(in python)?
- 不成功:家庭用PC → 国内のVPS
- 不成功:家庭用PC → 海外のVPS
- 成功:海外のVPS → 家庭用PC
- 成功:海外のVPS → 国内VPS
- 成功:国内のVPS → 家庭用PC
- 成功:国内のVPS → 海外VPS
MTU(追記)
調べていくとMTUを超える大きさのパケットを送信すると途中で破棄される(ブラックホール)仕様が存在するようです(DFフラグが有効か。参考にしようにもLinuxならばMTUが取得できるのですがWindowsでは取得すると0が返されます。
質問
上手くいかない原因は何でしょうか?どうすれば上手くいくでしょうか?
何かわかる方は回答の方をよろしくお願いします。
追記
- 2020/1/15: UDPは到着性が保証されていない
UDPの性質については把握しています。9割方届いたり、100%失敗したり
のコメントの意味は”たまに届かなくても問題ないが全く届かないのが問題”という事です。
- 2020/1/15 家庭用PCのネット環境について
家庭用PCのみNAT内のローカルに設置されています。フレッツ光回線でIpv4を使用しています。VPSはUFWで全面保護してあります。