3 & 4 Way Handshake

2024. 9. 20. 15:03CS/컴퓨터네트워크

TCP는 신뢰적이고 연결지향성 서비스를 애플리케이션에게 제공한다.이를 구현하는 핵심적인 개념이 Handshaking이다.

3 - Way Handshake

 TCP의 접속 과정으로 호스트의 프로세스를 클라이언트 프로세스(Client Process) 그리고 접속하려는 주체를 서버 프로세스(Server Process)라 할때 두 프로세스에 데이터를 전송하기 전에 먼저 정확한 전송을 보장하는 과정이다.

 이때 사용하는 통신방법은 PAR(Positive Acknowledgement with Re-transmission)이다.즉,ACK를 받을 때까지 데이터 유닛을 재전송한다.3 -Way Handshaking의 작동과정은 3단계로 나뉜다.

3 - Way Handshake

1.클라이언트는 서버와 연결하기 위해 SYN을 보낸다.

 송신자가 최초로 데이터를 전송할 때. SN(Sequence Number)을 임의의 랜덤 숫자로 지정하고,SYN플래그 비트를 1로 설정한 세그먼트를 전송한다.Client의 포트상태는 Closed -> SYN_SENT로 변하고 Server의 상태는 LISTEN인 상태이다.

 

2.서버가 SYN을 받고,클라이언트한테 ACK,SYN 패킷을 보낸다.

 서버측에서 접속요청을 수락하고 클라이언트에게 포트를 열어달라는 메시지를 보낸다.이때 ACK Number필드를 SN + 1로 설정하고 SYN,ACK 플래그 비트를 1로 설정한 세그먼트를 클라이언트한테 전송한다.이때의 포트상태는 Client는 CLOSED,Server는 SYN_RCV이다.

 

3.클라이언트는 서버의 패킷을 받고 ACK을 다시 서버로 보낸다.

 클라이언트가 ACK를 다시 서버로 보냄으로서 연결을 맺는다.이 단계 이후로 본격적으로 데이터를 전송한다.이때의 포트상태는 Client는 ESTABLISED,Server는 SYN_RCV -> ESTABLISED가 된다.

4 - Way Handshake

3 - Way Handshake가 서버와 클라이언트가 연결하는 과정이라면 4 - Way Handshake는 연결을 해제하는 과정이다.이때는 FIN플래그를 이용한다.TCP에는 두 가지 연결 해제 방식이 존재한다.

  • Graceful connection release(정상적인 연결 해제) - 서로 모두 커넥션을 닫을 때까지 연결되어 있다.
  • Abrupt connection relsease(갑작스러운 연결 해제) - 갑자기 한 TCP 엔티티가 연결을 강제로 닫거나 한 사용자가 두 데이터 전송 방향을 모두 닫는 경우.

정상적인 연결 해제가 일어나는 경우는 다음과 같다.

4 -Way Handshake

1.Client가 close()를 호출함으로써 연결을 끊기 위해 시도한다.

 클라이언트는 서버에게 연결을 종료한다는 FIN플래그를 보낸다.이때 FIN패킷에는 실질적으로 ACK도 포함되어 있다.

 

2.서버가 FIN을 수신하고 ACK를 클라이언트에게 보낸다.

 서버가 FIN을 수신하고 ACK를 클라이언트에게 보낸후 자신의 통신이 끝날때까지 기다린다.이때 서버의 포트 상태는 TIME_WAIT이다.

(서버는 ACK Number필드를 SN + 1로 지정하고 ACK의 플래그 비트르 1로 설정한 세그먼트를 전송한다.)

서버에 아직 전송할 데이터가 있다면 마저 전송을 마친후 close()를 호출한다.클라이언트는 서버에서 ACK를 받은 후에 서버가 남은 데이터 처리를 끝내고 FIN패킷을 보낼 때까지 기다리고 이때의 클라이언트의 포트 상태는 FIN_WAIT_2이다.

 

3.서버가 데이터를 모두 보냈다면 서버에서 클라이언트에게 FIN패킷을 클라이언트에게 보내고 승인 번호를 보내줄 때까지 기다리는 LAST_ACK상태로 전환한다.

 

4.클라이언트 FIN을 받고 ACK를 서버에게 보낸다.

 아직 서버로부터 받지 못한 데이터가 있을 수 있기에 클라이언트의 포트 상태는 TIME_WAIT가 된다.만일 에러로 인해 종료가 지연되다가 타임이 초과되면 CLOSED상태로 전환한다.서버는 ACK를 받고 소켓를 닫는다.

 

3 - Way Handshake와 한 단계가 차이나는 이유는 클라이언트가 데이터 전송을 마쳤다고 해도 Server는 아직 보낼 데이터가 남아있을 수 있기 때문에 FIN플래그에 대한 ACK만 보내고,데이터를 모두 전송한 후에 자신도 FIN 메시지를 보내기 때문이다.

또한 4 -Way Handshake는 Half-Close기법이 적용되어있다.

 

Half-Close기법

 4 - Way Handshake에서 처음 보내는 FIN 패킷에 실질적으로 ACK가 포함되어 있다.즉,연결을 종료하려고 할 때 완전히 종료하지 않고 반만 종료하는 것으로 일단 연결을 종료하는데 수신할 여지를 남겨두는 것이다.따라서 만일 수신자가 남은 데이터를 모두 보내면 다시 요청자에게 FIN 패킷을 보냄으로써 모든 데이터가 전송됨을 알린다.이는 조금 더 안전한 연결 종료를 보장한다.

 

갑작스러운 연결 해제가 일어났다면 RST(TCP reset)플래그를 사용하여 TCP 연결을 즉시 종료한다.이때는 ACK를 보내고 기다리는 작업이 진행되지 않고 바로 연결이 종료된다.

'CS > 컴퓨터네트워크' 카테고리의 다른 글

NAT & IPv6  (0) 2024.10.01
IP(IPv4),DHCP  (0) 2024.09.28
라우터  (0) 2024.09.24
Network Layer  (0) 2024.09.21
TCP/IP  (0) 2024.09.10