3 way handshake, 4 way handshake
3 way handshake
TCP 연결은 정확한 전송을 보잔해야하기 때문에 통신 전에 3 way handshake 작업을 통하여 논리적인 접속을 성립한다.
3 way handshake의 절차는 다음과 같다. (3번의 통신이기 때문에 3way)
Client가 Server에게 SYN 패킷을 보냄 (seq: x)
Server가 SYN(x)을 받고, Client로 받았다는 신호인 ACK와 SYN을 보냄 (seq: y, ACK: x + 1)
Client는 Server의 응답인 ACK(x + 1)와 SYN(y) 패킷을 받고 ACK(y + 1)를 서버로 보냄.
4 way handshake
연결이 성립된 후, 모든 통신이 끝났다면 TCP 연결을 해제한다.
4 way handshake의 절차는 다음과 같다. (4번의 통신이기 때문에 4way)
Client는 Server에게 연결을 종료한다는 FIN 플래그를 보냄.
Server는 FIN을 받고, FIN을 확인했다는 ACK를 Client에게 보냄. (이때 모든 데이터를 보내기 위해 CLOSE_WAIT 상태가 됨)
데이터를 모두 보냈다면, 연결이 종료되었다는 FIN 플래그를 Client에게 보냄.
Client는 FIN을 받고, 확인했다는 ACK를 Server에게 보냄. (아직 Server로부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT을 통해 기다림)
Server는 ACK를 받은 후 소켓을 닫음.(Closed)
Client는 TIME_WAIT 시간이 끝난 후 소켓을 닫음.(Closed)