[Network] TCP 3, 4way handshake
이 글은 공부를 하면서 알게 된 내용들을 기록하는 글 입니다. 오류나 고쳐야 할 사항들이 있다면 지적 부탁드립니다!
✅ 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(연결)`해야 한다.
클라이언트는 서버에 요청을 전송할 수 있는지, 서버는 클라이언트에게 응답을 전송할 수 있는지 확인하는 과정이다.
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의 과정
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의 과정
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://www.geeksforgeeks.org/tcp-3-way-handshake-process/
- https://jeongkyun-it.tistory.com/180