2011-01-11 8 views
4

私はこれまでに聞いたことがない問題に固執しました。UDPパケットは、特定のPCでサイズが12バイト未満になると廃棄されます。私はそれをどう考えているのですか?

私は特定のキャラクターアクションでUDPパケットを使用するオンラインゲームを作っています。私はudpモジュールを開発した後、正常に動作するようです。私たちのチームメンバーのほとんどは問題はありませんが、私の上司である男性は、そのモジュールの何かが間違っていると私に言ったのです。

私はこの問題を調査し、最後に私は自分のPCでudpパケットサイズが12未満の場合、パケットが他のホストに配信されたことがないという事実を発見しました。 UDPパケットがドロップされ

  • 1〜11バイト、12バイト、12バイトを超えるパケットがOKである:

    以下はいくつかの追加情報です。 TRUEを返しますWSASendTo Attansic L1ギガビットイーサネット10/100/1000BASE-Tコントローラ

  • O/S:マイクロソフトのWindows Vista Businessの
  • NIC。
  • ループバックudpパケットは正常に動作します。

この問題についてどう思いますか?あなたはどう思いますか?この問題の原因は何ですか? 原因の次のステップではどうすればよいですか?

PS。私はすべてのパケットの長さを最大12バイトにするパディングをしたくありません。

+0

http://www.isoc.org/inet97/proceedings/F3/F3_1.HTM – soulseekah

+0

これは約14歳です。今日は関係がない可能性があります。 – MSalters

+2

フレームが外出している場合はwiresharkで確認しましたか? – XAder

答えて

3

非公開の回答の1つを取得するだけで、おそらくUDPチェックサムのオフロードがそのカードで壊れています。つまり、パケットは送信されますが、受信者はドロップされますか?

これはWiresharkを使用して受信したパケットを調べることで確認できます。

+0

私はエンドポイントの両側にwiresharkで間違ったパケットをチェックしました。私はUDPパケットのチェックサムを送信することが分かりました。私は、TCPオフロードエンジンが可能なNICのいくつかについて以前にチェックサムエラーがあると聞いてきました。私は最初にオンになっているTCP Offloadオプションをオフにしました。今、それは正しく動作します。ありがとうございました! – waan

+0

と残りの問題は、ユーザーがソリューションのことを知っているこの種の問題に苦しんでいるようにすることです。またはこれを回避する必要がありますか?これについて考えてみましょう... – waan

1

からPCに送信することが問題であると仮定します。まず、問題のあるPCでパケットスニッファーを実行して、NICに到着しているかどうかを確認します。 NICまたはNICドライバに問題がある可能性があります。

次に、実行中のファイアウォールソフトウェアがないかどうかを確認します。それを無効にして、何が起こるかを見てください。

これでうまくいかない場合は、netsh winsock catalog resetのWinsock Layered Service Providerをすべて削除してください。

問題が解決しない場合は、私は困惑しています:)

を最後に、あなたはおそらく、同じ問題を持つ他の顧客を見つけるつもりです。とにかくその回避策について考えてみてください。接続時にいくつかの小型UDPパケットを送信してください。一貫して通過できない場合は、パディング回避策を有効にしてください。プローブパケットが通過するホストの場合、それらをパディングする必要はありません。

2

すでにファイアウォール、ウイルス対策、ネットワークファイアウォール、ネットワーク侵入を確認している場合。ネットワークドライバの意志パッド、Linux上の64バイトまたは60よりもその少ないので、ここで42バイト
= UDPパケットethernet_header(14バイト)の場合、この

を読み取る+ IPv4_header(20バイト分)+ UDP_header(8バイト)そのパケットを(64-42 = 22)0にしてパケットを送信する前に60バイトにします。

UDPパケットの最小長です。
理論的には0データバイトのパケットを送信できますが、まだ試していません。

問題については、OSの問題である必要があります。ネットワークのドライバーのマニュアルを確認するか、メーカーに確認してください。これは起こるのが甘くないからです。

REFます:http://www.freesoft.org/CIE/Course/Section4/8.htm
REFます:http://en.wikipedia.org/wiki/User_Datagram_Protocol

1

ピュア推測 :UDPで送信するための非常に一般的なパケットであるRTPは、12 byte headerを定義します。私はネットワークソフトウェアのいくつかの層が何か小さいものが不正な形式のRTPパケットであると想定していて、それを投げ捨てているのではないかと思います。

2

自分のPCと宛先PCでWiresharkを実行します。

ログには、自分のマシンを離れるUDPパケットが表示されますか?それはそれが目的地のPCに到着していることを示していますか?

自分のPCと宛先の間にはどのような種類のルータハードウェアまたはスイッチがありますか?あなたはそれらを削除し、クロスオーバーケーブルで2つをリンクできますか? (または、ラップトップで目的地を置き換え、クロスオーバーケーブルで彼のPCにリンクしてください)

自分のマシンとWinsock LSPをインストールするものすべてを削除したか、少なくともリストしましたか?

すべての12バイト以下のパケットがドロップされるか、またはランダムなコンテンツのパケットを生成して、それが問題の原因となっているコンテンツではなくコンテンツ内にあるかどうかを確認できますか。

+1

この回答は私にとっても非常に役に立ちます。私はそれを感謝しています。しかし、より正確な答えがあります。だから、私はその答えを受け入れることはできません。申し訳ありません。 ;-) – waan

+0

十分に、問題を解決してうれしい、と私は何か新しいことを学んだ:) –

関連する問題