TCP 接続の rtt を測定しようとしていますが、いくつか問題が発生しました。rtt は、 getsockoptを介してサーバー ソケットの tcp_info を見つけることによって測定されます。残念ながら、クライアントが遅延 ackを使用している場合、サーバーから送信されたパケット間の遅延が測定された rtt に追加されるため、このメトリックは大きく影響を受けます。
クライアントが遅延 ack (つまり、標準の Windows TCPAckFrequency 2) を使用していることを確認できれば、「実際の」rtt をプログラムで把握できます。ただし、これは現実的ではありません。アプリケーションは Web ブラウザー (Javascript/WebSocket) で実行される (tcp 機能の) デモであり、Web ページを機能させるためにレジストリをいじるようにユーザーに依頼したくないからです。 .
適切な測定値を得るための唯一の実際の可能性は、1: クライアントのソケット (現在は WebSocket、これは必須ではありません) に tcp ack 頻度を設定するか、2: クライアントが遅延 ack を使用しているかどうかを何らかの方法で調べることです。かどうかを判断し、それに応じて測定値を調整します。
最初の解決策は TCP_QUICKACK を設定することで可能ですが、javascript ベースの tcp ソリューション (ネイティブの WebSocket または Socket.io) でその可能性を見つけられませんでした。同様に、クライアントの設定を確認する良い方法も見つかりませんでした。何か案は?