TCP를 공부하다보면 3-way handshake 또는 4-way handshake라는 용어를 많이 접하게 된다. TCP는 연결 지향적인 특성을 가지고 있으며, 통신하고자 하는 상대방과 세션을 연결 후 데이터를 보내게 된다. TCP 세션을 수립할때 3-way handshake 과정을 거치며, 반대로 종료할때는 4-way handshake 과정을 거친다.

 

3-Way Handshake

그림-1

1. 클라이언트가 서버와 세션 연결을 위해 SYN 신호의 패킷을 전송한다.

2. SYN 패킷을 받은 서버는 자신의 SYN와 ACK라는 응답 신호의 패킷을 다시 클라이언트로 전송한다. 이때 ACK는 상대방의 시퀀스 넘버에 +1을 하여 전송한다.

3. 마지막으로 클라이언트가 ACK 패킷을 보내면 서버와의 세션이 성립된다.(ESTABLISHED)

 

이해를 돕기위해 실습을 해보았다.

 

그림-2 (3-way handshake 패킷)

 

그림-2는 와이어샤크로 3-way handshake 과정을 캡처한 사진이다. 클라이언트(192.168.0112)가 서버(192.168.0.3)로 SYN 패킷을 보낸다. 이때 클라이언트의 시퀀스 넘버 0이라는 정보를 같이보냄. 패킷을 받은 서버도 자신의 시퀀스 넘버와 함께 ACK(클라이언트 seq+1)를 보낸다. 마지막으로 클라이언트는 ACK(서버의 seq+1) 보내면서 세션 연결을 한다.

 

4-Way Handshake

그림-3

1. 클라이언트가 서버에게 FIN 신호의 패킷을 보내고 FIN_WAIT_1 상태가 된다.

2. FIN 패킷을 받은 서버는 ACK 패킷을 보내고 CLOSE_WAIT 상태가 된다.

3. 클라이언트는 ACK 패킷을 받으면 FIN_WAIT_2 상태로 변경하고 FIN 패킷을 기다린다.

4. 서버는 FIN 패킷을 보내고 LAST_ACK 상태가 되고, FIN을 받은 클라이언트는 ACK를 서버로 보낸 후 TIME_WAIT 상태로 변경하여 잉여 패킷을 기다린다. 

5. 클라이언트에게 ACK를 받은 서버는 CLOSED 상태로 변경하고 연결을 종료한다.

 

 

그림-4 (4-way handshake 패킷)

 

+ Recent posts