2011-06-22 9 views
0

パケットをネットワーク経由で送信している間に、パケットの終了位置と終了位置をどのように判断できますか?パケットがどこで終わるか、どこで始まるかはどこで決まるのですか?

これを行う方法の1つとして、送受信の承認がありますか?

+0

あなたは、パケットまたはソケットの種類について詳しく説明することはできますか?例えば。 TCPソケットを使用すると、データストリームだけがあります。パケットの境界がどこにあるかはわかりません。 UDPソケットを使用すると、recv()で1つのパケットを受信します。次に、SCTPプロトコルには、TCPストリームに似ているがパケット境界を保持するSEQPACKETがあります。 – jkj

+0

そのTCPソケットのケース@jkj –

答えて

2

ここでは、アプリケーションレベルの「パケット」を意味します。

UDPを使用している場合は、メッセージプロトコルである必要はありません。 TCPはバイトストリーミングプロトコルなので、パケットを送信することはできません。バイトだけです。 TCPを介してバイトストリームよりも複雑なものを送信する必要がある場合は、別のプロトコルを追加する必要があります.HTTPはそのようなプロトコルの1つです。行には終了文字(通常はCR/LF/CRLF)があるので、テキストはかなり簡単です。非テキストメッセージを送信するには、別のプロトコルが必要です。

TCPで頻繁に使用されるアプローチの1つは、接続してプロトコルユニットをストリーミングして切断することです。これは正常に動作しますが、TCP接続を連続的に開閉する巨大な待ち時間のゆえにゆっくりとしています。 HTTPは、通常、ページを見ている間に永続的に接続されたままになっていると、不必要にすべてのサーバーソケットを使い果たす多数のユーザーにWebページを提供するために、このように機能します。

次のメッセージが送信される前にピアの受信がわかっていることが絶対に必要な場合は、ピアからアプリケーションレベルのACKを待つ必要がありますが、接続の待ち時間のため遅くなります。 TCPはこのアプローチを考慮して設計されていませんでした。

一般的に利用可能なIPプロトコルでは、必要なものを直接提供できない場合は、自分で実装する必要があります。

どのような種類の「パケット」を送信していますか?

RGDS、 マーティン

0

TCPソケットを使用すると、バイトを送受信できるデータストリームが表示されます。パケットがどこで終了し、どこで始まるかを知る方法はありません。

これはTCPの機能(および問題)です。大部分の人は、は、改行(\ n)が表示されるまでデータをバッファに読み込みます。その後、データを処理し、次の行を待ちます。チャンクのバイナリデータを転送する場合は、まず受信側に何バイトのデータが到来しているかを知らせることができます。

パケットの境界が重要な場合は、UDPを使用できますが、パケットの順序が変わったり、途中でパケットが失われる可能性があります。

新しいSCTPプロトコルはTCPと非常によく似た働きをします(損失パケットは再送され、パケットの順序は保持されます)が、SCTPソケットでは受信者がまったく同じパケットを取得できるようにパケットを送信できます。

2

TCPはストリームベースのプロトコルです。つまり、ストリーム対パケットまたはメッセージベースのインターフェイスをアプリケーションに提供します。 TCPを使用する場合、アプリケーションはパケットまたはメッセージを判別する独自の方法を実装する必要があります。例えば、(a)すべてのメッセージが固定サイズであるか、(b)各メッセージの前にそのサイズが付いているか、(c)メッセージを示すためにデータストリームに特別な「end-of-record」シーケンスがある境界。 TCPでメッセージ境界をどのように実装できるかについて、googleで多くの情報を検索してください。

関連する問題