短時間で TCP 一時ポートの獲得と解放が行われると同一ポートを一時ポートとして再度割り当てる場合がある

Last Update: feedback 共有

こんにちは、Windows プラットフォーム サポートです。
今回は短時間で TCP 一時ポートの獲得と解放が行われると同一ポートを一時ポートとして再度割り当てる場合がある事象についてご説明いたします。

現象

以下のシナリオを想定します。

  1. 複数のプロセスやスレッドが同時に並行して TCP 送信元の一時ポートの獲得を要求
    1. で割り当てられた一時ポートを即座に解放し、再度一時ポートの獲得を要求

このシナリオでは、割り当てられた一時ポートを解放した後、即座に一時ポートの獲得を要求すると、直前に解放された一時ポートと同じ番号の一時ポートが割り当てられることがあります。
このとき、通信相手のソケットの状態によって、通信がタイムアウトすることがあります。

原因

複数のプロセスやスレッドが同時に並行して一時ポートの獲得を要求したときに、ポートの割り当て順序が途中で入れ替わることがあります。
このとき、割り当てた一時ポートが解放されると、その一時ポートを未使用のポートとして次回の割り当て時に利用します。
このため、複数のプロセスやスレッドに同時に複数の一時ポートを獲得した後、それらが即座に解放されると、短時間の間に直前に解放された一時ポートが再度割り当てられることがあります。

回避策

一時ポート割り当ての動作を変更する方法はありません。

状況

この動作は仕様です。

対象 OS

  • Windows Server 2012 R2 Datacenter
  • Windows Server 2012 R2 Standard
  • Windows Server 2012 Datacenter
  • Windows Server 2012 Standard
  • Windows Server 2008 R2 Datacenter
  • Windows Server 2008 R2 Enterprise
  • Windows Server 2008 R2 Standard
  • Windows Server 2008 Datacenter
  • Windows Server 2008 Enterprise
  • Windows Server 2008 Standard
  • Windows 7 Enterprise
  • Windows 7 Home Basic
  • Windows 7 Home Premium
  • Windows 7 Professional
  • Windows 7 Ultimate
  • Windows 8
  • Windows 8.1
  • Windows Vista Business
  • Windows Vista Enterprise
  • Windows Vista Home Basic
  • Windows Vista Home Premium
  • Windows Vista Ultimate

更新履歴
2022/05/02 : 本 Blog の公開

[特記事項]
本情報の内容 (添付文書、リンク先などを含む) は、作成日時点でのものであり、予告なく変更される場合があります。