전송(Transport)계층에서 서버와 클라이언트간에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜로, 데이터를 전송하기 전에 데이터 전송을 위한 연결을 만드는 연결지향적인 특성이 있다.
Why?
장치들 사이에 논리적인 접속(session)을 성립하기 위해!
SYN 패킷
을 보낸다. (sequence : x)ACK
와 SYN 패킷
을 보낸다. (sequence : y, ACK : x + 1)ACK(y+1)
를 서버로 보내면 연결이 이루어진다.SYN
: synchronize sequence numbersACK
: acknowledgmentWhy?
세션을 종료하기 위해!
FIN 플래그
를 보낸다.FIN
을 받고, 확인했다는 ACK
를 클라이언트에게 보낸다. (이때 모든 데이터를 보내기 위해 CLOSE_WAIT 상태가 된다)FIN 플래그
를 클라이언트에게 보낸다.FIN
을 받고, 확인했다는 ACK
를 서버에게 보낸다. (단, 아직 서버로부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT을 통해 기다린다)ACK
를 받은 이후 소켓을 닫는다 (Closed)TIME_WAIT
: Client가 Server로부터 FIN을 수신하더라도 일정시간(디폴트 240초)동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정https://bangu4.tistory.com/74
https://github.com/haewon-park/csStudy/blob/main/Network/TCP%203-way%20%26%204-way%20Handshake.md