0

TCPは、IPのようにトラフィックを優先しません。データをアップロードしているTCPバックグラウンド接続が多数開かれている場合(BitTorrentがバックグラウンドでシードしている場合など)、TCPはパケットをIPレベルに送信するために一度に1つのソケットのみを選択するため、特定のソケットで遅延が発生する可能性があります。したがって、特定のソケットは、他の多くの接続に加えて、優先順位を持たずに順番を待たなければならず、遅延が発生します。

私は現在いくつかの実験を行っており、そのような輻輳状況でTCPによって生成される遅延を測定しようとしています。この遅延はトランスポート(TCP)レベルで発生するため、一部のLinuxシステムコールが使用される正確な瞬間をフックすることにより、遅延を正確に測定することを考えています。

TCPを使用してサーバーにデータをアップロードしたいと思っています(Iperfツールを使用できます)。システムコールをフックするために、 SystemTapを使用したいと思います。このツールは、特定のシステムコールが呼び出された正確な瞬間を教えてくれます。

パケットを送信するときに使用される2つのシステムコールの名前を知りたいです。

  1. パケットを要求する最初のTCPレベルの関数(それはtcp_sendmsgです)。
  2. 最後のTCPレベルの関数は、それをIPネットワークレベルに渡すパケットを要求しましたか?

これら2つのシステム関数を呼び出す瞬間の違い(デルタ)は、私が知りたい遅延です。

4

1 に答える 1

1
  1. パケットに対して呼び出される最初のTCPレベルの関数は、「net / ipv4/tcp.c」システムソースファイルの*tcp_sendmsg*です。
  2. パケットに対して呼び出される最後のTCPレベルの関数は、「net / ipv4/tcp_output.c」システムソースファイルの*tcp_transmit_skb*です。

LinuxのTCPソースファイルに関する情報を掲載している興味深いサイトは次のとおりです。tcp_output

于 2011-06-23T08:17:10.043 に答える