0

パケットを送信するudpベースのアプリケーションとtcpベースのアプリケーションの両方がある場合、updベースのアプリケーションがパケットを送信する速度が速すぎて帯域幅がudpパケットでほぼいっぱいになると、tcpパケットは非常に困難になるという驚くべきことがわかりました。送信します。

驚くべきことに、tcpベースのアプリケーションはいくつかのパケットを送信できますが(write()の戻り値で観察されます)、tcpパケットの受信者はそれらを受信しません。なんで?これは、tcpパケットがネットワークカードによって最終的に送信されないためですか?または、tcpパケットは実際にルーターによってドロップされますか?

ありがとう、スティーブ

4

2 に答える 2

1

まず、write() の戻り値は、パケットが送信されたかどうかの指標ではありません。データがバッファリングされたことを示しているだけです。

第 2 に、ネットワークが UDP パケットで飽和状態になると、多くのパケット損失が発生し、適応型の TCP はパケットをよりゆっくりと送信することでそれに適応します。パケット損失が大きくなりすぎると、TCP は基本的に完全に停止する可能性があります。解決策は、UDP パケットでネットワークを飽和状態にしないことです。

于 2013-01-29T12:54:40.630 に答える
0

これは簡単な答えです。読み応えのある記事がたくさんあります。

UDP は、IP 上に構築されたレイヤーです。TCPについても同様です。ネットワーク カードは IP パケットを送信するだけです。これらのパケットのさまざまな構造を調べることができます。

TCP は IP パケットを使用するプロトコルですが、メカニズムを使用して確実に配信し、パケットを正しい順序に並べ替えます。ウィキペディアの記事を参照してください。

ルーターは自由にパケットをドロップできます。これは、ネットワークが過負荷になっている場合、ネットワーク接続がダウンしている場合、または IP パケットが破損している場合に発生する可能性があります。

したがって、あなたの質問に答えるために、一方の端からもう一方の端に送信される UDP または IP の間の好みはありません。

于 2013-01-29T12:21:49.920 に答える