Problemen met poortuitputting oplossen

Van toepassing op: Windows 10

TCP- en UDP-protocollen werken op basis van poortnummers die worden gebruikt voor het tot stand brengen van de verbinding. Voor elke toepassing of service die een TCP/UDP-verbinding tot stand moet brengen, is een poort aan de zijkant vereist.

Er zijn twee typen poorten:

  • Tijdelijke poorten, die dynamische poorten zijn, zijn de set poorten die elke computer standaard een uitgaande verbinding moet maken.
  • Bekende poorten zijn de gedefinieerde poorten voor een bepaalde toepassing of service. De bestandsserverservice bevindt zich bijvoorbeeld op poort 445, HTTPS is 443, HTTP is 80 en RPC is 135. Aangepaste toepassingen hebben ook hun eigen gedefinieerde poortnummers.

Wanneer een verbinding tot stand wordt gebracht met een toepassing of service, gebruiken clientapparaten een tijdelijke poort van het apparaat om verbinding te maken met een bekende poort die is gedefinieerd voor die toepassing of service. Een browser op een clientcomputer gebruikt een tijdelijke poort om verbinding te https://www.microsoft.com maken met op poort 443.

In een scenario waarin dezelfde browser veel verbindingen maakt met meerdere websites, wordt voor elke nieuwe verbinding die de browser probeert, een tijdelijke poort gebruikt. Na enige tijd ziet u dat de verbindingen beginnen te mislukken en een grote kans op deze fout is dat de browser alle beschikbare poorten heeft gebruikt om verbindingen buiten te maken en elke nieuwe poging om een verbinding tot stand te brengen mislukt omdat er geen poorten meer beschikbaar zijn. Wanneer alle poorten op een computer worden gebruikt, wordt dit aangeduid als poortuitputting.

Standaard dynamisch poortbereik voor TCP/IP

Om te voldoen aan IANA-aanbevelingen (Internet Assigned Numbers Authority), heeft Microsoft het dynamische clientpoortbereik voor uitgaande verbindingen vergroot. De nieuwe standaardstartpoort is 49152 en de nieuwe standaardeindpoort is 65535. Deze toename is een wijziging ten opzichte van de configuratie van eerdere versies van Windows die een standaardpoortbereik van 1025 tot en met 5000 gebruikten.

U kunt het dynamische poortbereik op een computer weergeven met behulp van de volgende netsh opdrachten:

  • netsh int ipv4 show dynamicport tcp
    
  • netsh int ipv4 show dynamicport udp
    
  • netsh int ipv6 show dynamicport tcp
    
  • netsh int ipv6 show dynamicport udp
    

Het bereik wordt afzonderlijk ingesteld voor elk transport (TCP of UDP). Het poortbereik is nu een bereik met een begin- en eindpunt. Microsoft-klanten die servers implementeren waarop Windows Server wordt uitgevoerd, kunnen problemen ondervinden die de RPC-communicatie tussen servers beïnvloeden als firewalls worden gebruikt op het interne netwerk. In deze situaties raden we u aan de firewalls opnieuw te configureren om verkeer tussen servers in het dynamische poortbereik van 49152 tot en met 65535 toe te staan. Dit bereik is een aanvulling op bekende poorten die worden gebruikt door services en toepassingen. Of het poortbereik dat door de servers wordt gebruikt, kan op elke server worden gewijzigd. U kunt dit bereik als volgt aanpassen met behulp van de opdracht netsh. Met de bovenstaande opdracht wordt het dynamische poortbereik voor TCP ingesteld.

netsh int <ipv4|ipv6> set dynamic <tcp|udp> start=number num=range

De beginpoort is nummer en het totale aantal poorten is bereik. Hieronder ziet u voorbeeldopdrachten:

  • netsh int ipv4 set dynamicport tcp start=10000 num=1000
    
  • netsh int ipv4 set dynamicport udp start=10000 num=1000
    
  • netsh int ipv6 set dynamicport tcp start=10000 num=1000
    
  • netsh int ipv6 set dynamicport udp start=10000 num=1000
    

Met deze voorbeeldopdrachten wordt het dynamische poortbereik ingesteld op beginnen bij poort 10000 en eindigen op poort 10999 (1000 poorten). Het minimale bereik van poorten dat kan worden ingesteld, is 255. De minimale startpoort die kan worden ingesteld, is 1025. De maximale eindpoort (op basis van het bereik dat wordt geconfigureerd) mag niet groter zijn dan 65535. Als u het standaardgedrag van Windows Server 2003 wilt dupliceren, gebruikt u 1025 als de startpoort en gebruikt u vervolgens 3976 als het bereik voor zowel TCP als UDP. Dit gebruikspatroon resulteert in een beginpoort van 1025 en een eindpoort van 5000.

Met name voor uitgaande verbindingen als binnenkomende verbindingen is geen tijdelijke poort vereist voor het accepteren van verbindingen.

Omdat uitgaande verbindingen beginnen te mislukken, ziet u veel exemplaren van de onderstaande gedragingen:

  • Kan zich niet aanmelden bij de computer met domeinreferenties, maar aanmelden met een lokaal account werkt wel. Voor domeinaanmelding moet u contact opnemen met de DC voor verificatie. Dit is ook weer een uitgaande verbinding. Als u referenties in de cache hebt ingesteld, werkt het aanmelden bij het domein mogelijk nog steeds.

    Schermopname van de fout voor NETLOGON in Logboeken.

  • groepsbeleid updatefouten:

    Schermopname van gebeurteniseigenschappen voor groepsbeleid fout.

  • Bestandsshares zijn niet toegankelijk:

    Schermopname van het foutbericht dat Windows geen toegang heeft.

  • RDP van de betrokken server mislukt:

    Schermopname van de fout wanneer Extern bureaublad geen verbinding kan maken.

  • Elke andere toepassing die op de computer wordt uitgevoerd, begint fouten te geven

Opnieuw opstarten van de server lost het probleem tijdelijk op, maar u ziet dat alle symptomen na een bepaalde periode terugkomen.

Als u vermoedt dat de machine zich in een status van poortuitputting bevindt:

  1. Probeer een uitgaande verbinding te maken. Ga vanaf de server/computer naar een externe share of probeer een RDP naar een andere server of telnet naar een server op een poort. Als de uitgaande verbinding voor al deze opties mislukt, gaat u naar de volgende stap.

  2. Open Logboeken en zoek onder de systeemlogboeken naar de gebeurtenissen die duidelijk de huidige status aangeven:

    1. Gebeurtenis-id 4227

      Schermopname van gebeurtenis-id 4227 in Logboeken.

    2. Gebeurtenis-id 4231

      Schermopname van gebeurtenis-id 4231 in Logboeken.

  3. Verzamel een netstat -anob uitvoer van de server. In de netstat-uitvoer ziet u een groot aantal vermeldingen voor TIME_WAIT status voor één PID.

    Schermopname van uitvoer van netstate-opdracht.

    Na een goede afsluiting of een abrupte afsluiting van een sessie, na een periode van 4 minuten (standaard), wordt de poort die door het proces of de toepassing wordt gebruikt, weer vrijgegeven aan de beschikbare pool. Gedurende deze 4 minuten is de STATUS van de TCP-verbinding TIME_WAIT. In een situatie waarin u vermoedt dat de poort uitgeput is, kan een toepassing of proces niet alle poorten vrijgeven die zijn verbruikt en blijft deze in de TIME_WAIT status.

    Mogelijk ziet u ook CLOSE_WAIT statusverbindingen in dezelfde uitvoer; CLOSE_WAIT status is echter een status wanneer de ene kant van de TCP-peer geen gegevens meer heeft om te verzenden (FIN verzonden), maar wel gegevens van het andere uiteinde kan ontvangen. Deze status duidt niet noodzakelijkerwijs op poortuitputting.

    Opmerking

    Het hebben van grote verbindingen in TIME_WAIT status geeft niet altijd aan dat de server momenteel geen poorten heeft, tenzij de eerste twee punten zijn geverifieerd. Veel TIME_WAIT verbindingen geeft aan dat het proces veel TCP-verbindingen maakt en uiteindelijk kan leiden tot poortuitputting.

    Netstat is bijgewerkt in Windows 10 met de toevoeging van de -Q switch om poorten weer te geven die zijn overgeschakeld uit de wachttijd zoals in de status GEBONDEN. Er is een update uitgebracht voor Windows 8.1 en Windows Server 2012 R2 die deze functionaliteit bevat. De PowerShell-cmdlet Get-NetTCPConnection in Windows 10 toont ook deze GEBONDEN poorten.

    Tot 10/2016 was netstat onnauwkeurig. Oplossingen voor netstat, back-ported naar 2012 R2, toegestaan Netstat.exe en Get-NetTcpConnection om tcp- of UDP-poortgebruik correct te rapporteren in Windows Server 2012 R2. Zie hotfixes voor Windows Server 2012 R2: tijdelijke poorten voor meer informatie.

  4. Open een opdrachtprompt in de beheermodus en voer de onderstaande opdracht uit.

    Netsh trace start scenario=netconnection capture=yes tracefile=c:\Server.etl
    
  5. Open het bestand server.etl met Network Monitor en pas in de filtersectie het filter Wscore_MicrosoftWindowsWinsockAFD.AFD_EVENT_BIND.Status.LENTStatus.Code == 0x209toe. U ziet nu vermeldingen met de tekst STATUS_TOO_MANY_ADDRESSES. Als u geen vermeldingen vindt, is de server nog steeds niet buiten de poorten. Als u deze vindt, kunt u controleren of de server poortuitputting heeft.

Problemen met poortuitputting oplossen

De sleutel is om te bepalen welk proces of welke toepassing alle poorten gebruikt. Hieronder vindt u enkele hulpprogramma's die u kunt gebruiken om te isoleren tot één proces

Methode 1

Kijk eerst naar de netstat-uitvoer. Als u Windows 10 of Windows Server 2016 gebruikt, kunt u de opdracht netstat -anobq uitvoeren en controleren op de proces-id met maximale vermeldingen als GEBONDEN. U kunt ook de onderstaande PowerShell-opdracht uitvoeren om het proces te identificeren:

Get-NetTCPConnection | Group-Object -Property State, OwningProcess | Select -Property Count, Name, @{Name="ProcessName";Expression={(Get-Process -PID ($_.Name.Split(',')[-1].Trim(' '))).Name}}, Group | Sort Count -Descending 

De meeste poortlekken worden veroorzaakt door processen in de gebruikersmodus die de poorten niet correct sluiten wanneer er een fout is opgetreden. Op het niveau van de gebruikersmodus zijn poorten (eigenlijk sockets) ingangen. Zowel TaskManager als ProcessExplorer kunnen het aantal ingangen weergeven, zodat u kunt bepalen welk proces alle poorten verbruikt.

Voor Windows 7 en Windows Server 2008 R2 kunt u uw PowerShell-versie bijwerken met de bovenstaande cmdlet.

Methode 2

Als methode 1 u niet helpt bij het identificeren van het proces (voorafgaand aan Windows 10 en Windows Server 2012 R2), raadpleegt u Taakbeheer:

  1. Voeg een kolom toe met de naam 'handles' onder details/processen.

  2. Sorteer de kolomgrepen om het proces te identificeren met het hoogste aantal ingangen. Meestal kan het proces met ingangen groter dan 3000 de oorzaak zijn, met uitzondering van processen zoals Systeem, lsass.exe, store.exe ,sqlsvr.exe.

    Schermopname van de kolom ingangen in Windows Taakbeheer.

  3. Als een ander proces dan deze processen een hoger aantal heeft, stopt u dat proces en probeert u zich aan te melden met behulp van domeinreferenties en kijkt u of het lukt.

Methode 3

Als Taakbeheer u niet heeft geholpen bij het identificeren van het proces, gebruikt u Procesverkenner om het probleem te onderzoeken.

Stappen voor het gebruik van Process Explorer:

  1. Download Process Explorer en voer deze uit met verhoogde bevoegdheid.

  2. Alt + selecteer de kolomkop, selecteer Kolommen kiezen en voeg op het tabblad Procesprestatieshet aantal grepen toe.

  3. Selecteer Weergave>Onderste deelvenster weergeven.

  4. Selecteer Weergavegrepen>onderste deelvenster> weergeven.

  5. Selecteer de kolom Ingangen om op die waarde te sorteren.

  6. Bekijk de processen met een hoger aantal ingangen dan de rest (waarschijnlijk meer dan 10.000 als u geen uitgaande verbindingen kunt maken).

  7. Klik om een van de processen met een hoog aantal ingangen te markeren.

  8. In het onderste deelvenster zijn de grepen die hieronder worden vermeld, sockets. (Sockets zijn technisch gezien bestandsgrepen).

    Bestand \Device\AFD

    Schermopname van Process Explorer met de processen gesorteerd op ingangen.

  9. Sommige zijn normaal, maar grote aantallen niet (honderden tot duizenden). Sluit het proces in kwestie. Als hiermee de uitgaande connectiviteit wordt hersteld, hebt u verder bewezen dat de app de oorzaak is. Neem contact op met de leverancier van die app.

Als de bovenstaande methoden u niet hebben geholpen bij het isoleren van het proces, raden we u aan een volledige geheugendump van de computer in de probleemstatus te verzamelen. De dump geeft aan welk proces het maximum aantal ingangen heeft.

Als tijdelijke oplossing: als u de computer opnieuw opstart, krijgt deze weer de normale status en kunt u het probleem voorlopig oplossen. Wanneer opnieuw opstarten echter onpraktisch is, kunt u ook overwegen het aantal poorten op de computer te verhogen met behulp van de onderstaande opdrachten:

netsh int ipv4 set dynamicport tcp start=10000 num=1000

Met deze opdracht wordt het dynamische poortbereik ingesteld op start op poort 10000 en eindigt op poort 10999 (1000 poorten). Het minimale bereik van poorten dat kan worden ingesteld, is 255. De minimale startpoort die kan worden ingesteld, is 1025. De maximale eindpoort (op basis van het bereik dat wordt geconfigureerd) mag niet groter zijn dan 65535.

Opmerking

Houd er rekening mee dat het vergroten van het dynamische poortbereik geen permanente oplossing is, maar slechts tijdelijk. U moet achterhalen welk proces/welke processors het maximum aantal poorten gebruiken en problemen oplossen vanuit het oogpunt van het proces waarom het zo'n groot aantal poorten verbruikt.

Voor Windows 7 en Windows Server 2008 R2 kunt u het onderstaande script gebruiken om de netstat-uitvoer met een gedefinieerde frequentie te verzamelen. In de uitvoer ziet u de trend van het poortgebruik.

@ECHO ON
set v=%1
:loop
set /a v+=1
ECHO %date% %time% >> netstat.txt
netstat -ano >> netstat.txt
 
PING 1.1.1.1 -n 1 -w 60000 >NUL
 
goto loop

Meer informatie

  • Poortuitputting en jij! - dit artikel bevat informatie over netstat-statussen en hoe u netstat-uitvoer kunt gebruiken om de poortstatus te bepalen
  • Tijdelijke poortuitputting detecteren: dit artikel bevat een script dat in een lus wordt uitgevoerd om de poortstatus te rapporteren. (Van toepassing op Windows 2012 R2, Windows 8, Windows 10 en Windows 11)