Network

[Network] TCP 3, 4way handshake

HEY__ 2024. 7. 16. 10:21
728x90

이 글은 공부를 하면서 알게 된 내용들을 기록하는 글 입니다. 오류나 고쳐야 할 사항들이 있다면 지적 부탁드립니다!

✅ 3-way handshake, 4-way handshake란?

TCP(Transmossion Control Protocol)은 Transport layer에서 제공하는 프로토콜 중 하나이다.

 

TCP는 신뢰적이고 연결 지향성(Connection-oriented)한 서비스를 제공하며, Flow control(흐름 제어), Congestion control(혼잡 제어), Error control(에러 제어)등을 지원한다.

 

TCP는 Connection-oriented한 서비스이기 때문에 Connection(네트워크 연결)을 `establish`하고, `de-establish`하는 과정이 필요한데,

여기에서 바로 `3-way handshake`, `4-way handshake`를 사용한다.

 

번외) Port number란?

Transport layer에서의 식별자 역할을 담당한다.

자세한 내용은 https://m42-orion.tistory.com/152 해당 포스터를 통해 확인할 수 있다.


✅ 3-way handshake

1️⃣ 3-way handshake란?

TCP 프로토콜은 reliable한 통신을 제공해주기 때문에 데이터를 전송하려 할 때, 네트워크를 먼저 `establish(연결)`해야 한다.

클라이언트는 서버에 요청을 전송할 수 있는지, 서버는 클라이언트에게 응답을 전송할 수 있는지 확인하는 과정이다.

출처: GeeksforGeeks

 

TCP는 `PAR(Positive Acknowledgement with Re-transmission)`를 통해  안정적인(reliable) 통신을 제공하는데, `PAR`를 사용하는 장치는 `ACK`을 받을 때 까지 segment를 다시 보낸다.

💡팁!
위 도식에서 `SYN`은 Synchronize, `ACK`는 acknowledge의 약자이다.
Transport layer에서의 데이터 단위를 Segment(세그먼트)라고 부른다.

 

만일 `receiver(Client)`쪽에 전달된 data unit(segment)가 `손상`되었다면(Transport layer에서  사용되는 Error detection 기술 중 하나인 checksum을 통해 확인 가능), 수신측에서는 `해당 segment를 버린다.`

`Sender(Server)`측에서는 positive `ACK`를 수신받지 못했기 때문에 data unit(segment)를 `재전송`한다.

 

위의 과정을 통해 Sender(Client)와 Receiver(Server) 간에 3개의 segment들을 주고 받으며, TCP의 연결을 설정하는 것을 확인할 수 있다.

 


2️⃣ 3-way handshake의 과정

출처: GeeksforGeeks

1단계(SYN)

3-way handshake는 TCP 통신 이전에 연결하는 과정이며, Client가 먼저 요청한다는 특징이 있다.

client는 server와 연결을 설정하기 위해, `SYN(Synchronized Sqeuence Number)`를  `segment`와 함께 전송한다.

이는 server에게  '나 server 너랑 통신하고 싶은데, segments의 번호는 SYN으로 시작해줘!'  라고 이야기하는 것이다.

 

2단계(SYN + ACK)

Server는 `SYN-ACK` 쌍을 만들어 client의 요청에대해 응답한다.

`ACK(Acknowledgement)`는 segment가 정상적으로 수신되었다는 것을 응답하는 것을 의미라며,

`SYN(Synchronized)`는 segment가 시작하는 sequence 번호가 몇 번 인지를 의미한다.

 

3단계(ACK)

마지막으로 client가 server의 응답에 대해 확인하고, 실제 data 전송을 위해 client와 server 모두 연결을 설정(establish)하는 과정이다.

 

 


3️⃣ 정리

  • 특정 Port로 connection establishment 메세지를 수신하고 나서, socket과 Port 번호가 연동된다.
  • point-to-point 방식으로 연결된다. 즉, single sender <-> single receiver간 연결된다.
  • client process에서 먼저 요청하면, Server process에서는 해당 IP address & port에 대해 연결을 승인하는 방식이다.

 


✅ 4-way handshake

1️⃣ 4-way handshake란?

TCP 프로토콜은 reliable한 통신을 제공하며, 데이터를 전송하기 전에 `3-way handshake`를 통해`client-server`간에 connection을 establish가 이루어진다.

데이터 전송을 모두 완료한 이후에는 TCP 연결을 종료해야 하는데 이 과정에서 4개의 패킷을 주고 받으며, 이를 `4-way handshake`라고 한다.

 

4-way handshake에서는 `FIN`이라고 하는 플레그를 사용하는데, 이는 더 이상 보낼 데이터가 없음을 나타낸다.


2️⃣ 4-way handshake의 과정

출처: GeeksforGeeks

 

4-way handshake에서는 더 이상 보낼 데이터가 없음을 나타내는 `FIN`이라고 하는 플래그를 사용한다.

 

1단계

연결이 되어 있는 두 곳 중 연결을 끊고 싶어하는 쪽(client, server 어느 쪽이던 상관없으나 client로 가정)에서 `FIN` 플래그를 보내 연결 종료 요청을 한다.

 

2단계

`FIN` 플래그를 받은 쪽(server)에서 연결 종료 요청에 대해 승인의 의미로 `ACK` 플래그를 보낸다.

 

3단계

server에서 연결 종료 신호로 `FIN` 플래그를 client쪽으로 보낸다.

 

4단계

최종적으로 `FIN` 플래그를 수신한 client측은, 연결 종료에 대한 최종 승인으로 server에게 `ACK` 플래그를 보낸다.

 

 

활성화 되어 있는 연결(connection)을 닫기 위해 위의 4단계를 거치기 때문에 4-way handshake라고 이야기 한다.

 


✅  참고 자료 & 링크

- https://velog.io/@averycode/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-TCPUDP%EC%99%80-3-Way-Handshake4-Way-Handshake

- https://www.geeksforgeeks.org/tcp-3-way-handshake-process/

- https://jeongkyun-it.tistory.com/180

 

 

 

728x90