2つの異なるRed Hatマシンで実行されるサーバーアプリケーションとクライアント間のTCP接続で以下の動作を観察しています。
例1
例2
私が理解したい問題は、クライアントのウィンドウサイズが十分に大きいときに、サーバーアプリケーションまたはOSがACKまで待機する理由です。これは私がOSレベルで調整できるものですか。クライアントのウィンドウがいっぱいになるまでサーバーにすべてのバイトを送信させることができますか?
私の理解によると、2つの考えられる理由があります
すべての遅延メッセージのシナリオでは、遅延メッセージの送信前にクライアントからのACKがあります。また、アプリケーションの動作ロジックは、メッセージをTCPレイヤーに渡すことを示唆しています。
これのトラブルシューティングに焦点を当てるべき場所を提案していただけますか。
編集:複製の理由:問題がどこにあるのかわかりませんでした。 network/os。追加の詳細を追加しました。また、TCP Linuxの実装からのPOVが必要なので、この質問はここにあると思います。
これは「遅延ACK」と呼ばれ、TCPプロトコルが機能します。詳細については https://en.m.wikipedia.org/wiki/TCP_delayed_acknowledgment を参照してください。 。アプリケーションのパフォーマンスに影響する場合は、この機能を無効にできます。iSCSIがACKの遅延をデフォルトでオフにしているとします。