TCPに関する統計情報を取得する

IPHLPAPIのGetTcpStatistics()を使うとTCPに関する統計情報を取得することができます。 ここでは、GetTcpStatistics()の使い方を説明します。

サンプルコード

GetTcpStatistics()を使ったサンプルコードを以下に示します。


#include <stdio.h>

#include <winsock2.h>
#include <iphlpapi.h>

int
main()
{
 MIB_TCPSTATS tcpstats;

 if (GetTcpStatistics(&tcpstats) == NOERROR) {
   printf("dwRtoAlgorithm: %ld\n", tcpstats.dwRtoAlgorithm);
   printf("dwRtoMin:       %ld\n", tcpstats.dwRtoMin);
   printf("dwRtoMax:       %ld\n", tcpstats.dwRtoMax);
   printf("dwMaxConn:      %ld\n", tcpstats.dwMaxConn);
   printf("dwActiveOpens:  %ld\n", tcpstats.dwActiveOpens);
   printf("dwPassiveOpens: %ld\n", tcpstats.dwPassiveOpens);
   printf("dwAttemptFails: %ld\n", tcpstats.dwAttemptFails);
   printf("dwEstabResets:  %ld\n", tcpstats.dwEstabResets);
   printf("dwCurrEstab:    %ld\n", tcpstats.dwCurrEstab);
   printf("dwInSegs:       %ld\n", tcpstats.dwInSegs);
   printf("dwOutSegs:      %ld\n", tcpstats.dwOutSegs);
   printf("dwRetransSegs:  %ld\n", tcpstats.dwRetransSegs);
   printf("dwInErrs:       %ld\n", tcpstats.dwInErrs);
   printf("dwOutRsts:      %ld\n", tcpstats.dwOutRsts);
   printf("dwNumConns:     %ld\n", tcpstats.dwNumConns);
 } else {
   printf("GetTcpStatistics failed : %d\n", GetLastError());
 }

 return 0;
}

サンプルコード実行例

上記コードをコンパイルして出来たものを実行すると、以下のようになります。


C:> a.exe
dwRtoAlgorithm: 4
dwRtoMin:       300
dwRtoMax:       120000
dwMaxConn:      -1
dwActiveOpens:  832
dwPassiveOpens: 10
dwAttemptFails: 0
dwEstabResets:  29
dwCurrEstab:    0
dwInSegs:       487549
dwOutSegs:      253735
dwRetransSegs:  0
dwInErrs:       0
dwOutRsts:      71
dwNumConns:     5

GetTcpStatistics()が利用する構造体

GetTcpStatistics()が利用する構造体MIB_TCPSTATSを以下に示します。


typedef struct _MIB_TCPSTATS {
  DWORD dwRtoAlgorithm;
  DWORD dwRtoMin;
  DWORD dwRtoMax;
  DWORD dwMaxConn;
  DWORD dwActiveOpens;
  DWORD dwPassiveOpens;
  DWORD dwAttemptFails;
  DWORD dwEstabResets;
  DWORD dwCurrEstab;
  DWORD dwInSegs;
  DWORD dwOutSegs;
  DWORD dwRetransSegs;
  DWORD dwInErrs;
  DWORD dwOutRsts;
  DWORD dwNumConns;
} MIB_TCPSTATS, *PMIB_TCPSTATS;

dwRtoAlgorithm RTO(Retransmission Time-Out) Algorithmの種類
MIB_TCP_RTO_CONSTANTConstant Time-out
MIB_TCP_RTO_RSREMIL-STD-1778 Appendix B
MIB_TCP_RTO_VANJVan Jacobson's Algorithm
MIB_TCP_RTO_OTHEROther
dwRtoMin RTOの最小値。msec単位です。
dwRtoMax RTOの最大値。msec単位です。
dwMaxConn 最大コネクション数。-1の場合は可変長です。
dwActiveOpens Active Openの数。コネクションを初期化している状態のコネクション数です。
dwPassiveOpens Passive Openの数。listenしている状態の数です。
dwAttemptFails コネクション確立失敗の数です。
dwEstabResets Resetされたコネクションの数です。
dwCurrEstab 現在確立されているコネクション数です。
dwInSegs 受信したセグメント数です。
dwOutSegs 送信したセグメント数です。
dwRetransSegs 再送したセグメント数です。
dwInErrs 受信したエラーの数です。
dwOutRsts RSTフラグが立った状態のセグメントを受け取った数です。
dwNumConns 現在ある全てのコネクションの数です。listenしている状態のものはカウントされません。

IPv6基礎検定

YouTubeチャンネルやってます!