@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/tcp-port-exhaustion-time-wait/#article>
    schema:about <https://comcomponent.com/knowledge/socket-exhaustion/>, <https://comcomponent.com/knowledge/tcp-time-wait/> ;
    schema:mentions <https://comcomponent.com/knowledge/ephemeral-port/>, <https://comcomponent.com/knowledge/snat-port-exhaustion/>, <https://comcomponent.com/knowledge/socketshttphandler/>, <https://comcomponent.com/knowledge/max-connections-per-server/>, <https://comcomponent.com/knowledge/http2/>, <https://comcomponent.com/knowledge/tcptimedwaitdelay/>, <https://comcomponent.com/knowledge/netsh-dynamicport/>, <https://comcomponent.com/knowledge/azure-nat-gateway/>, <https://comcomponent.com/knowledge/get-nettcpconnection/> .

<https://comcomponent.com/knowledge/socket-exhaustion/> a skos:Concept ;
    skos:prefLabel "ソケット枯渇"@ja ;
    skos:definition "利用可能なエフェメラルポートを使い切り、新しいTCP接続を確立できなくなる状態。"@ja ;
    skos:altLabel "port exhaustion" ;
    skos:altLabel "TCP/IPポート枯渇"@ja .

<https://comcomponent.com/knowledge/tcp-time-wait/> a skos:Concept ;
    skos:prefLabel "TCPのTIME-WAIT状態"@ja ;
    skos:definition "TCP接続を先に閉じた側のソケットが、遅延到着したパケットの混入を防ぐため2×MSL(Maximum Segment Lifetime)の間だけ保持し続ける状態。"@ja ;
    skos:altLabel "TIME_WAIT" .

<https://comcomponent.com/knowledge/tcptimedwaitdelay/> a skos:Concept ;
    skos:prefLabel "TcpTimedWaitDelay"@ja ;
    skos:definition "WindowsでTCP接続がTIME_WAIT状態にとどまる時間を決めるレジストリ値。HKLM\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parametersに追加するREG_DWORDで、既定では存在しない。"@ja ;
    skos:altLabel "TcpTimedWaitDelay レジストリ値"@ja .

<https://comcomponent.com/knowledge/ephemeral-port/> a skos:Concept ;
    skos:prefLabel "エフェメラルポート(動的ポート)"@ja ;
    skos:definition "TCP接続でクライアント側が自動的に割り当てる送信元ポート番号で、Windowsの既定では49152〜65535の16384個がトランスポート・IPバージョンごとに用意される。"@ja ;
    skos:altLabel "dynamic port" ;
    skos:altLabel "動的ポート"@ja .

<https://comcomponent.com/knowledge/netsh-dynamicport/> a skos:Concept ;
    skos:prefLabel "netsh int ipv4 set dynamicport"@ja ;
    skos:definition "Windowsの動的ポート(エフェメラルポート)の範囲を、トランスポートとIPのバージョンごとに表示・変更するnetshのコマンド。開始ポートと個数を指定する。"@ja ;
    skos:altLabel "netsh int ipv4 show dynamicport" ;
    skos:altLabel "動的ポート範囲の変更"@ja .

<https://comcomponent.com/knowledge/get-nettcpconnection/> a skos:Concept ;
    skos:prefLabel "Get-NetTCPConnection"@ja ;
    skos:definition "TCP接続の状態、ローカルとリモートのアドレスとポート、所有プロセスを取得するPowerShellのコマンドレット。Windows 10以降ではTIME_WAITを抜けたBOUND状態のポートも表示する。"@ja .

<https://comcomponent.com/knowledge/socketshttphandler/> a skos:Concept ;
    skos:prefLabel "SocketsHttpHandler"@ja ;
    skos:definition ".NET Core 2.1以降でHttpClientの既定の内部実装として使われる、接続プールを管理するハンドラー。"@ja ;
    skos:broader <https://comcomponent.com/knowledge/httpclient/> ;
    ks:configuredBy <https://comcomponent.com/knowledge/max-connections-per-server/> .

<https://comcomponent.com/knowledge/max-connections-per-server/> a skos:Concept ;
    skos:prefLabel "MaxConnectionsPerServer"@ja ;
    skos:definition "SocketsHttpHandlerが同じサーバーへ同時に張るTCP接続の上限を指定するプロパティ。HTTP/1.1の同時接続数は既定で無制限である。"@ja ;
    skos:altLabel "SocketsHttpHandler.MaxConnectionsPerServer" .

<https://comcomponent.com/knowledge/http2/> a skos:Concept ;
    skos:prefLabel "HTTP/2"@ja ;
    skos:definition "1本のTCP接続で複数の要求と応答を同時に扱えるHTTPのバージョン。RFC 9113で定められ、クライアントは同じホストとポートに複数のHTTP/2接続を開かないよう求められる。"@ja ;
    skos:altLabel "RFC 9113" .

<https://comcomponent.com/knowledge/azure-nat-gateway/> a skos:Concept ;
    skos:prefLabel "Azure NAT Gateway"@ja ;
    skos:definition "仮想ネットワークからインターネットへの外向き接続を提供するAzureのサービス。サブネット内の仮想マシンにSNATポートを必要に応じて割り当てる。"@ja ;
    skos:altLabel "NAT Gateway" ;
    skos:altLabel "NATゲートウェイ"@ja .

<https://comcomponent.com/knowledge/snat-port-exhaustion/> a skos:Concept ;
    skos:prefLabel "SNATポート枯渇"@ja ;
    skos:definition "送信元アドレス変換(SNAT)をする機器やサービスで、外向きの接続に割り当てるポートを使い切り、新しい接続ができなくなったりタイムアウトしたりする状態。Azure Load Balancerでは仮想マシンごとに決まった数のSNATポートが割り当てられる。"@ja ;
    skos:altLabel "SNAT port exhaustion" ;
    skos:altLabel "SNAT枯渇"@ja .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/tcp-time-wait/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/tcptimedwaitdelay/> ;
    schema:description "Windowsでは、TIME_WAITの長さをレジストリ値TcpTimedWaitDelayで変えられる。値は既定では存在せず、設定できる範囲はWindows Server 2012 R2とWindows 8.1以降で2〜300秒である。出典のBizTalk Serverの手引きは推奨値を30秒とする一方、レジストリの変更は影響の分析後に行うよう注意しており、本文はアプリを直さずに短くすることを勧めていない。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/biztalk/technical-guides/settings-that-can-be-modified-to-improve-network-performance> ;
    ks:verifiedAt "2026-11-08" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ephemeral-port/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/netsh-dynamicport/> ;
    schema:description "Windowsでは、動的ポートの範囲をnetsh int ipv4 set dynamicport tcp start=… num=…で変えられ、IPv6の範囲はnetsh int ipv6で別に設定する。最小の個数は255、開始ポートの最小は1025で、終わりは65535を超えられない。Microsoftは範囲を広げることを一時しのぎとし、ポートを使い切っているプロセスの側で直すよう求めている。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/troubleshoot/windows-client/networking/tcp-ip-port-exhaustion-troubleshooting> ;
    ks:verifiedAt "2026-11-08" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/tcp-time-wait/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/get-nettcpconnection/> ;
    schema:description "Windowsでは、Get-NetTCPConnectionで状態とプロセスごとにTCP接続を束ね、TIME_WAITやBOUNDの数を確かめられる。TIME_WAITが多いことは接続を多く作っていることを示すだけで、いまポートが尽きている証拠にはならないので、枯渇は外向き接続の一斉失敗とイベントID 4227と4231で確かめる。TIME_WAITの接続はプロセスから切り離されているため、プロセス番号から呼び出し元を特定できないことがある。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/troubleshoot/windows-client/networking/tcp-ip-port-exhaustion-troubleshooting> ;
    ks:verifiedAt "2026-11-08" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/socketshttphandler/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/max-connections-per-server/> ;
    schema:description "SocketsHttpHandlerのMaxConnectionsPerServerで、同じサーバーへの同時接続数の上限を決められる。HTTP/1.1の同時接続数は既定で無制限である。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/api/system.net.http.socketshttphandler.maxconnectionsperserver>, <https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient> ;
    ks:verifiedAt "2026-11-08" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/max-connections-per-server/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/socket-exhaustion/> ;
    schema:description "上限のない並列送信は接続を一度に開き、使われなくなった接続がまとめて閉じられてTIME_WAITがまとめて残る。MaxConnectionsPerServerと並列度に上限を設けると、開く接続の数を抑えられる。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient>, <https://learn.microsoft.com/en-us/dotnet/api/system.net.http.socketshttphandler.pooledconnectionidletimeout> ;
    ks:verifiedAt "2026-11-08" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/http2/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/socket-exhaustion/> ;
    schema:description "HTTP/2では1本の接続で複数の要求を同時に送れ、クライアントは同じホストとポートに複数のHTTP/2接続を開かないよう求められる。HttpClientの既定はHTTP/1.1なので、相手が対応している場合にDefaultRequestVersionで指定する。"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9113.html#section-9.1>, <https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient.defaultrequestversion> ;
    ks:verifiedAt "2026-11-08" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/azure-nat-gateway/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/snat-port-exhaustion/> ;
    schema:description "Azure Load Balancerは仮想マシンごとに決まった数のSNATポートを割り当てるが、NAT Gatewayはサブネットの仮想マシンに必要に応じて割り当てる。Microsoftは多くの場合にNAT Gatewayを勧めている。アプリ側での接続の再利用と控えめなリトライも求められる。"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/troubleshoot/azure/load-balancer/troubleshoot-outbound-connection> ;
    ks:verifiedAt "2026-11-08" ;
    ks:certainty "context-dependent" .
