Jeg har lest at for å avslutte en TCP-tilkobling kreves 3 håndtrykk: FIN, FIN ACK og ACK. Men når du lukker en forbindelse, viser Wireshark FIN ACK, FIN ACK, ACK; det viser aldri FIN av seg selv.
Når du oppretter en forbindelse, viser Wireshark imidlertid tydelig de tre håndtrykk: SYN, SIN ACK , ACK.
Så jeg er ganske forvirret hvorfor når de stenger forbindelsen, vises de tre håndtrykkene ikke slik.
Svar
En TCP-implementering kan sende en frittstående FIN i det første avsluttende segmentet. Imidlertid kan den også sende en FIN ACK, i stedet.
Sistnevnte er strengt tatt bedre: implementeringen kan pakke et «gratis» ACK med FIN-segmentet uten å gjøre det lenger. Dette er fordi, hvis du ikke ACK, er det fortsatt plass i segmentet for ACK-nummeret, som vil bli ignorert, og avfall båndbredde. Derfor sendes den sist sendte ACK bare på nytt, bare i tilfelle mottakeren savnet den.
Dette gjelder for alle TCP-segmenter. Derfor, bortsett fra det aller første SYN-segmentet, der avsenderen ikke har informasjon om ACK-nummeret, vil alle de andre segmentene vanligvis ha ACK-flagget på.