Jag har läst att för att avsluta en TCP-anslutning krävs 3 handskakningar: FIN, FIN ACK och ACK. Men när en anslutning stängs visar Wireshark FIN ACK, FIN ACK, ACK; det visar aldrig FIN för sig.

När du upprättar en anslutning visar Wireshark dock tydligt de tre handskakningarna: SYN, SIN ACK , ACK.

Så jag är ganska förvirrad varför de tre handskakningarna inte visas så när jag stänger anslutningen.

Svar

En TCP-implementering kan skicka en fristående FIN i det första stängningssegmentet. Det kan dock också skicka en FIN ACK istället.

Det senare är strikt bättre: implementeringen kan bunta en ”gratis” ACK med FIN-segmentet utan att göra det längre. Detta beror på att om du inte ACK finns det fortfarande utrymme i segmentet för ACK-numret, vilket kommer att ignoreras, och avfall bandbredd. Därför skickas den senast skickade ACK helt enkelt om, bara om mottagaren missade den.

Detta gäller för alla TCP-segment. Därför, förutom det allra första SYN-segmentet, där avsändaren inte har någon information om ACK-numret, kommer alla andra segment vanligtvis att ha ACK-flaggan på.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *