For the first time in my career, I ran into port exhaustion. On a Windows server, our .NET 5.0 application kept exhausting the available TCP ports. The resolution, among other things, involved increasing MaxUserPorts and decreasing TcpTimedWaitDelay.

It looks like this in PowerShell:

Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters"

TcpTimedWaitDelay        : 30
MaxUserPorts             : 65534

After modifying the registry, we DO need to restart the server.

After doing that, again from PowerShell, we can see fewer active TCP connections in the TimeWait state:

$props = [System.Net.NetworkInformation.IPGlobalProperties];

$props::GetIPGlobalProperties().GetActiveTcpConnections() |
   Group-Object -Property State |
   Select-Object Count, Name;

Note how few connections have the state of TimeWait.

For more information about the various states, IBM has a useful diagram and table and this answer on StackOverflow explains how to set the TcpTimedWaitDelay value safely.  From my beginners perspective, the TIME_WAIT period helps to ensure the conversation (and its echo, so to speak) has ended before reusing the same connection.