TCP 연결을 종료하려면 3 개의 핸드 셰이크가 필요하다는 것을 읽었습니다 : FIN, FIN ACK 및 ACK. 그러나 연결을 닫을 때 Wireshark는 FIN ACK, FIN ACK, ACK를 표시하며 FIN 자체는 표시하지 않습니다.
그러나 연결을 설정할 때 Wireshark는 SYN, SIN ACK의 세 가지 핸드 셰이크를 명확하게 표시합니다. , ACK.
그래서 연결을 닫을 때 세 개의 핸드 셰이크가 그렇게 표시되지 않는 이유가 다소 혼란 스럽습니다.
Answer
TCP 구현은 첫 번째 닫는 세그먼트에서 독립 실행 형 FIN을 보낼 수 있지만 대신 FIN ACK를 보낼 수도 있습니다 .
후자 구현시 FIN 세그먼트와 함께 “free”ACK를 더 이상 만들지 않고 번들로 묶을 수 있습니다. 이는 ACK를 수행하지 않으면 세그먼트에 ACK 번호를위한 공간이 남아 있기 때문입니다. 대역폭 낭비. 따라서 마지막으로 전송 된 ACK는 수신자가 놓친 경우를 대비하여 단순히 다시 전송됩니다.
이것은 모든 TCP 세그먼트에 해당됩니다. 따라서 발신자가 ACK 번호에 대한 정보가없는 첫 번째 SYN 세그먼트를 제외하고 다른 모든 세그먼트에는 일반적으로 ACK 플래그가 설정됩니다.