Ik heb gelezen dat om een TCP-verbinding te beëindigen, er 3 handshakes nodig zijn: FIN, FIN ACK en ACK. Bij het sluiten van een verbinding geeft Wireshark echter FIN ACK, FIN ACK, ACK weer; het geeft zelf nooit FIN weer.

Bij het tot stand brengen van een verbinding geeft Wireshark echter duidelijk de drie handdrukken weer: SYN, SIN ACK , ACK.

Dus ik ben een beetje in de war waarom bij het sluiten van de verbinding de drie handdrukken niet zo worden weergegeven.

Antwoord

Een TCP-implementatie kan een standalone FIN verzenden in het eerste afsluitende segment. Het kan echter ook een FIN ACK verzenden.

De laatste is strikt beter: de implementatie kan een “gratis” ACK bundelen met het FIN-segment zonder het langer te maken. Dit komt omdat, als je geen ACK hebt, er nog steeds ruimte is in het segment voor het ACK-nummer, dat zal worden genegeerd, en verspilling van bandbreedte. Daarom wordt de laatst verzonden ACK gewoon opnieuw verzonden, voor het geval de ontvanger deze heeft gemist.

Dit geldt voor alle TCP-segmenten. Dus behalve het allereerste SYN-segment, waar de afzender geen informatie heeft over het ACK-nummer, zullen alle andere segmenten gewoonlijk de ACK-vlag hebben.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *