2009-04-18 11 views
2

アウトオブオーダーのパケットを処理する方法を誰かに教えてください。私は、パケットをキャプチャし、彼らが来るようにそれらを解析するために、生のソケットを使用していますが、それらのいくつかは間違った順序で来て、例えば:C#:アウトオブオーダーのTCPパケットを扱うには?

  1. Idは...........国旗
  2. 16390:(PSH、ACK)
  3. 16535:(PSH、ACK)
  4. 16638:(ACK)
  5. 16640:(PSH、ACK)
  6. 16639:(ACK)
  7. 16695:( PSH、ACK)

IDが16390,16535,16695のパケットは別々のパケットであり、自由に処理できます IDが16638,16640,16639のパケットは一連のパケットであり、解析する前に昇順に並べる必要があります。

私はそれらをパーザに渡すだけで、それが先行するパケットが来てパーザはそれを破棄して破棄します。

これに対処する方法はありますか?

+1

私たちはよりあなたの質問に答えることができるように何をしているのかを明確にしてください。 –

+0

rawソケットは使用しないでください。 –

+0

これは悲しいことですが、生のパケットを処理する方法を教えてくれました.3票しか得られませんでしたが、受け入れられた回答は8票あり、基本的には質問に答えませんでした... – Unknown

答えて

5

TCPは注文を保証します。だから私はあなたがIPについて話していると仮定します。

パケットを最小ヒープに入れて、次のパケットID番号が利用可能になるまで待つことができます。

プッシュパケットについては、発注の制限なしにできるだけ早く受信することになっているので、プッシュパケットを先に受信するかどうかをどのくらい待つかを決めることができます。

11

TCPセグメントは、前のACKを送信するまで次のパケットが送信されないため、順序が間違っていません。

TCP番号それらは順不同 が到着した場合、TCPエンティティは それらを並べ替えることができるように、それは、特定の宛先ポート 順次 を送信セグメント。

これは、TCPの下のトランスポート層で発生します。これは、どのTCP接続もこれが起こることを決して見ません。 TCPの点では、それらは常に順番に並んでいます。だからあなたがそれらを順番に見るならば、あなたはTCPトランスポート層で作業していません、あなたはより低いレベルにいます。

また、FYI ...

  • TCPデータは、 "セグメント"
  • IPデータである "データグラム"
  • ネットワークレベルでは、 "パケット"

です編集:あなたが提供したリンクは、IPデータグラムのストリームを提供するので、自分でTCPストリームを処理する必要があります。私はそれが簡単であるようにふりをするつもりはないし、ここでそれを説明しようとする。

+1

私はrawソケットを使ってクライアントとサーバの間でパケットを盗聴するだけなので、何もACKしません。 ここには、最初に使用されたコードがあります:http://www.codeproject.com/KB/IP/CSNetworkSniffer.aspx 申し訳ありませんが、用語を使いこなすために、私はネットワーク用語に関しては本当に新しいです。 –

4

通常のtcpソケットを使用して、順番どおりになるのはなぜですか?

+1

彼はパケットをスニッフィングしています。つまり、途中で会話を聞いているサーバー/クライアントではなく、生のソケットでのみ可能です。 –

1

シーケンス番号が順序を示します。それはあなたがそれを説明しなければならないので、4Gで包みます。また、TCPが使用するのと同じ基本ルーチンを使用する必要があります。パケットが順不同でバッファリングされ、重複が破棄されます。シーケンス番号+ペイロードのLenは、nexxtシーケンス番号です。

TCP/IP Illistrated vol 2 またはTCP.c?

関連する問題