![[Network] TCP 3, 4 way handshake](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd9aP8x%2FbtsAXfWarpe%2F6XrEldZazVOoyrWbNqXhYk%2Fimg.png)
TCP의 3 way handshake & 4 way handshake란?
TCP(Transmission Control Protocol) : 데이터를 메시지의 형태로 송수신하기 위한 프로토콜(규약)
TCP는 신뢰적이고 연결지향적 서비스를 제공한다.
TCP 3-Way Handshake & 4-Way Handshake : TCP 통신에서 신뢰성을 보장하도록 통신을 연결과 종료하기 위한 통신 동작 방식이다.
3-Way Handshake
TCP/IP 프로토콜을 이용하여 통신하는 응용프로그램이 데이터를 전송하기 전,
먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 말한다.
Flag를 주고 받는 과정을 3번 한다.
3-Way Handshake의 역할
3-Way Handshake는 Client와 Server, 양 측 모두 데이터를 전송할 준비를 하고, 데이터 전달 시작 전에 상대방이 준비되었다는 것을 알 수 있도록 해준다.
위 그림에서의 State의 예시들은 아래와 같다.
State | Description |
---|---|
CLOSED | 포트가 닫힌 상태 |
LISTEN | 포트가 열린 상태로 연결 요청 대기 중 |
SYN_RECV | SYNC 요청을 받고 상대방의 응답을 기다리는 중 |
TIME-WAIT | Server로부터 |
ESTABLISHED | 포트 연결 상태 |
Flag
TCP의 Header에는 Control Bit(Flag Bit, 6bit)가 존재하고, 각 bit가 1이라면 해당 패킷이 어떤 내용을 담고 있는 패킷인지 나타내는 중인 것이다.
ex> URG-ACK-PSH-RST-SYN-FIN
- SYN(Synchronize Sequence Number): 연결 요청 플래그
- Connection을 생성할 때 사용
- Sequence Number를 랜덤으로 설정하여 세션 연결에 사용
- 초기에 Sequence Number를 전송
- ACK(Acknowledgement): 응답 확인 플래그
- Acknowledgement Number 필드가 유효한지 나타낸다.
- FIN(Finish): 연결 해제 플래그
- 세션 연결 종료 시 사용하며, 더 이상 전송할 데이터가 없음을 의미
- 4-Way Handshake에 사용
3-Way Handshake의 동작 방식
1. Client -> Server ( SYN Flag )
Client가 Server에게 SYN Flag를 전송하여 접속을 요청한다,
2. Server-> Client ( SYN + ACK Flag )
Server는 Listen 상태에서 SYN Flag를 받고 SYN_RECV 상태로 변경
SYN, ACK Flag Client에게 전송
Server는 다시 ACK Flag를 받기 위한 대기 상태로 변경
3. Client -> Server ( ACK Flag )
SYN + ACK Flag를 확인한 Client는 Server로 ACK Flag를 보내고, Established 상태가 되어 연결 성립이 된다.
4-Way Handshake
4-Way Handshake는 세션을 종료하기 위해 수행되는 절차이다.
Flag를 주고 받는 과정을 4번 한다.
4-Way Handshake
1. Client -> Server ( FIN Flag )
Client가 Server로 FIN Flag를 전송하여 연결 종료를 알린다.
Client는 FIN Flag 전송 이후 FIN-WAIT-1 상태로 변경한다.
2. Server -> Client ( ACK Flag )
FIN 플래그를 받은 Server는 확인 메세지로 ACK를 Client로 전송하고, CLOSE-WAIT 상태로 변한다.
Client 역시 Server로부터 FIN을 받기 위해 FIN-WAIT-2로 변경한다.
3. Server -> Client ( FIN Flag )
연결을 종료할 준비를 마친 후, Server는 Client에게 FIN Flag를 전송한다.
4. Client -> Server ( ACK Flag )
Client는 연결 종료 준비가 완료되었다는 응답을 ACK Flag에 담아 Server로 전송한다.
이 때 Cleint는 TIME-WAIT 상태로 변경된다.
TIME-WAIT : 의도치 않은 에러로 인해 연결이 DeadLock 상태가 되는 것을 방지하는 장치
만약 에러로 종료가 지연된다거나, 타임이 초과된다면 CLOSED 상태로 변경된다.
CS Question
Q1. TCP의 연결 설정 과정과 연결 종료 과정이 차이 나는 이유는?
데이터를 전송한 후, 연결을 종료하려는 과정에서 Server가 아직 보낼 데이터가 남아있을 수도 있기 때문에,
우선적으로 Client로부터 받은 FIN Flag에 대답하는 ACK Flag만 우선 전송하고, 데이터를 모두 전송한 것을 확인한 후에 Server 자신의 FIN Flag를 Client로 송신하기 때문이다.
(연결 설정 과정에서는 데이터를 보내기 전이므로 위와 같은 과정이 필요 없다.)
Q2. 만약 Server에서 FIN Flag를 전송하기 전에 전송한 패킷이 여러 이슈로 인해 FIN 패킷보다 늦게 도착한다면 어떻게 될까?
이를 방지하기 위해, TIME-WAIT State를 활용한다.
Client는 Server로부터 FIN Flag를 수신하더라도, 일정 시간 동안은 세션을 남겨두고, 혹시 모를 잉여 패킷을 기다린다.
Q3. 초기 Sequence Number인 ISN을 0부터 시작하지 않고 난수 생성을 통해 설정하는 이유는?
포트(Port)는 유한하고 재사용되기 때문에 두 통신 호스트가 과거에 사용된 포트 번호 쌍을 사용할 가능성이 있을 수 있다.
Server에서는 SYN Flag를 통해 패킷을 구분하는데, 만약 0부터 순차적인 Sequence Number가 온다면, 이전에 Connection으로부터 왔던 Packet이라고 오인식할 수 있다.
이러한 문제를 방지하기 위해 난수 생성을 통해 Sequence Number를 세팅한다.
출처
TCP와 3-Way, 4-Way Handshake란? (개념/ 동작 방식)
서론 이번 글에서는 TCP의 신뢰성있는 통신 연결과 종료를 위해 3Way, 4Way Handshake의 개념과 통신 동작 방식에 대해 알아보려한다. 이 내용을 이해하기 위해선 TCP의 개념도 알아야해서 간단히 TCP의
jeongkyun-it.tistory.com
'Computer Science > Network' 카테고리의 다른 글
[Network] 양방향 암호화 방식 (대칭키 / 비대칭키) (0) | 2023.12.15 |
---|---|
[Network] 단방향 암호화 방식(Hash, MAC) (0) | 2023.12.14 |
[Network] TCP vs UDP (0) | 2023.11.28 |
[Network] TCP/IP 흐름 제어 및 혼잡 제어 (1) | 2023.11.28 |
[Network] OSI 7 계층과 TC/ICP 4 계층 (1) | 2023.11.28 |
개발자가 되고 싶어요.