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