8

特定のファイル記述子または特定のインターフェイスの TCP ペイロード アクティビティ (受信した合計バイト数) のカウンターを検索したいと思います。指定されたファイル記述子が望ましいですが、インターフェイスの場合は十分です。理想的には、ユーザー空間にまだ読み込んでいない (まだ?) バイトであっても、ack されたバイトについて本当に知りたいです。

TCP_INFOの機能を見てきましたgetsockopt()が、私が知る限り、「受信した合計バイト数」または「送信された合計バイト数 (ACK など)」を格納するフィールドはありません。

netlink IFLA_STATSインターフェイスの+RTNL_TC_BYTESSIOCETHTOOL+ ETHTOOL_GSTATS ioctl()(フィールド)も見ましたrx_bytesが、それらは素晴らしいですが、他のレイヤーのオーバーヘッド/ヘッダーと実際のペイロード バイトを区別できるとは思いません。

procfs持っています/proc/net/tcpが、これには私が探しているものが含まれていないようです。

この特定のデータを取得する方法はありますか?

編集:無差別モードはスループットに耐え難い影響を与えるため、それを使用するものを活用することはできません。言うまでもなく、どのパケットが適切かを判断するために IP スタックの大部分を実装することは、このソリューションの意図した範囲を超えています。

目標は、recvmsg() からどのような値を保存するかについて、包括的な/信頼できない/2 つ目の推測を行うことです。

Right Thing™ は、これらの値を正しく追跡することですが、「Hey OS?このソケットで実際に受信したバイト数は?」という単純な情報を提供することは価値があります。

4

4 に答える 4

2

これは診断用ですか、それとも開発用ですか?

診断の場合、tcpdump は、ポートとホストの詳細によってフィルタリングされた、ネットワーク上で何が起こっているかを正確に伝えることができます。

開発の場合、達成しようとしていることについてもう少し情報があれば役立つでしょう...

ifconfig は RX と TX の合計を示します。

ifconfig は、/proc/net/dev からこれらの詳細を取得します (strace ifconfig で確認できます)。

必要な値に近い場合は、netstat -t によって指定される Send/Receive-Q 値もあります。

于 2013-08-29T12:16:01.903 に答える
1

おそらく、/proc/net/dev の統計が役立つでしょう。ペイロードとヘッダーを含む完全なパケットのカウントに慣れていないため、質問に答えるのが難しくなります。

個々のファイル記述子に関する統計については、その情報を取得するための標準的な手段を知りません。

統計が必要なプログラムの起動を制御できる場合は、独自の read()、write()、sendto()、および recvfrom() 呼び出しを実装する「インターセプター」ライブラリを使用して、標準 C ライブラリへの呼び出し (またはシステム コールへの直接呼び出し) を実行し、アクティビティのカウンターを保持し、それらの値を公開する方法を見つけます。

于 2013-08-28T04:21:59.033 に答える