C#の方のスレに一度投稿したのですが、話題がこちら向けだと思うので、此方にて再度質問させてください。

現在、下記URLのC#を使ったRawSocketのサンプルを元にネットワークプログラムを勉強しています。
ttp://www.thecodeproject.com/csharp/networkmonitor.asp

上記のソースを改良し、パケット取得時にIPヘッダにてTCPプロトコルのものだけを抽出し、
その後、パケットからTCPヘッダを取り、それぞれのデータに分割し、さらにデータ部だけを取り出し、
パケットモニタのように表示するという事をしました。

そこで、今度は分割されて送信されたTCPパケットを再結成したいのですが、
どのように行えばよいのでしょうか。
やりたいことは、分割されたパケットの場合、分割パケットが全て届いた所で、
データ部を全て結合して、別の処理部に渡したいのです。

また疑問なのは、TCP/IPパケットが分割されている途中に、他のパケットが割り込む事はあるのでしょうか?

つまり、AとBというデータが共に分割されて送られたとして、
Aの分割された複数のパケットが最後まで届く前にBの分割されたパケットが割り込むといった事は
あるのでしょうか。
それとも、分割されたデータを全部受け取るまでは、他のパケットは何処かにプールされていて、
割り込む事はないのでしょうか?