Sobes.tech
Middle

Wat kunt u vertellen over het TCP-venster?

sobes.tech AI

Antwoord van AI

TCP-venster (of TCP-ontvangstvenster) is een mechanisme voor stroomregeling in het TCP-protocol. Het bepaalt de hoeveelheid gegevens die de zender kan verzenden zonder te wachten op bevestiging van de ontvanger (ACK). De grootte van het venster past zich dynamisch aan, voorkomt bufferoverloop bij de ontvanger en regelt de verzendsnelheid.

Belangrijke punten:

  • Stroomregeling: De hoofdfunctie is voorkomen dat de zender gegevens sneller verstuurt dan de ontvanger kan verwerken.
  • Venstergrootte: Wordt door de ontvanger in elk TCP-segment aangekondigd (in het veld "Window Size") en geeft aan hoeveel bytes de ontvanger bereid is te accepteren, beginnend vanaf de volgende verwachte byte.
  • Dynamisch: De venstergrootte kan tijdens de verbinding veranderen afhankelijk van de belasting van de buffer van de ontvanger.
  • Ontvangbuffer: De werkelijke venstergrootte wordt beperkt door de grootte van de ontvangstbuffer aan de zijde van de ontvanger.
  • Vensterschaling (Window Scaling): TCP-optie die het gebruik van grotere vensters (tot 1 GB) mogelijk maakt voor high-speed netwerken of netwerken met hoge latentie, met behulp van een vermenigvuldiger die tijdens de verbinding wordt aangekondigd (SYN/SYN-ACK).
  • "Slanke venster"-syndroom: Situatie waarin de venstergrootte zeer klein wordt, wat kan leiden tot inefficiënte gegevensoverdracht.
  • Zero Window: Als de buffer van de ontvanger volledig vol is, wordt de venstergrootte aangekondigd als 0. De zender moet de gegevensoverdracht stoppen, behalve voor Keep-Alive-segmenten (indien optie ingeschakeld), en het laatste segment opnieuw verzenden om een update van de venstergrootte te vragen.
// Voorbeeld van TCP-header, waarin de venstergrootte wordt aangegeven
// (veld "Window Size")
// Bronpoort: 12345
// Doelpoort: 80
// Sequentienummer: 1000
// Bevestigingsnummer: 2000
// Data-offset: 20 bytes (5 woorden)
// Gereserveerd: 0
// Flags: [ACK, PSH]
// Venstergrootte: 65535 // Maximale venstergrootte zonder schaalvergroting
// Checksum: 0xABCD
// Urgent pointer: 0