본문 바로가기

CS

TCP 3-way, 4-way handshake

 

3-Way HandShake

3-way handshake는 양쪽 모두 데이터를 전송할 준비가 되어있다는 것을 보장하고, 실제로 데이터 전달이 시작하기 전에 다른 한쪽이 준비되었다는 것을 알 수 있도록 한다.

 

3-Way HandShake 동작방식

 

Step1. [Client -> SYN -> Server]

Client가 Server에게 접속을 요청하는 SYN플래그를 보냄

 

Step2. [Server -> SYN + ACK -> Client]

Server는 Listen 상태에서 SYN이 들어온 것을 확인하고 SYN_RECV상태로 바뀌어 SYN + ACK플래그를 Client에게 전송

후 Server는 다시 ACK 플래그를 받기 위해 대기상태로 변경됨

 

Step3. [Client -> ACK -> Server]

SYN + ACK 상태를 확인한 Client는 서버에게 ACK를 보내고 연결 성립(Established)이 됨

위와 같이 신뢰성을 위해 3번의 핸드쉐이킹을 거쳐 연결을 맺는 것을 3-Way Handshake라고 함

4-Way HandShake

Step1. [Client -> FIN -> Server]

Client가 연결을 종료하겠다는 FIN플래그를 전송한다. 이 후 FIN-WAIT-1 상태로 변함

 

Step2. [Server -> FIN -> Client]

FIN 플래그를 받은 Server는 확인메세지인 ACK를 Client에게 보내준다. 이 후 CLOSE-WAIT상태로 변함.

Client도 마찬가지로 Server에서 종료될 준비가 됐다는 FIN을 받기위해 FIN-WAIT-2 상태가 됨

 

Step3. [Server -> FIN -> Client]

Close준비가 다 된 후 Server는 Client에게 FIN플래그를 전송함

 

Step4. [ Client -> FIN -> Server]

Client는 해지 준비가 되었다는 정상응답인 ACK를 Server에게 보내준다. 이 때, Client는 TIME-WAIT상태로 변경

 

TIME-WAIT 상태는 의도치않은 에러로 인해 연결이 데드락으로 빠지는 것을 방지하기 위해 변경되는 것으로 에러로 인해 종료가 지연되다가 타임이 초과되면 CLOSED 상태로 변경

 

State 정보

1. CLOSED : 포트가 닫힌 상태

2. LISTEN : 포트가 열린 상ㅌ태로 연결 요청 대기 중

3. SYN_RECV : SYNC 요청을 받고 상대방의 응답을 기다리는 중

4. ESTABLISHED : 포트 연결 상태

5. TIME-WAIT : Server로부터 FIN을 수신하더라도 일정시간(default: 240초)동안 세션을 남겨 놓고 잉여 패킷을 기다리는 과정

 

Flag 정보

1. TCP Header에는 CONTROL BIT(플래그 비트, 6bit)가 존재하며, 각각의 bit는 "URG-ACK-PSH-RST-SYN-FIN"의 의미를 가짐

  1-1. 해당 위치의 bit가 1이면 해당 패킷이 어떠한 내용을 담고 있는 패킷인지 나타냄

 

SYN(Synchronize Sequence Number)

1. 연결 설정. Sequence Number를 랜덤으로 설정하여 세션을 연결하는 데 사용하며, 초기에 Sequence Number를 전송

2. 따라서, Connection을 생성할 때 사용하는 flag

 

ACK(Acknowledgement)

1. 응답확인. 패킷을 받았다는 것을 의미하는 flag

2. Acknowledgement Number 필드가 유효한지 나타냄

3. 양단 프로세스가 쉬지 않고 데이터를 전송한다고 가정하면 최초 연결 설정 과정에서 전송되는 첫 번째 세그먼트를 제외한 모든 세그먼트의 ACK비트는 1로 지정된다고 생각할 수 있음

 

FIN(Finish)

1. 연결 해제. 세션 연결을 종료시킬 때 사용되며, 더 이상 전송할 데이터가 없음을 의미

2. 4way handshake에서 사용

 

 

참고

나의 과거일지

 

 

 

'CS' 카테고리의 다른 글

GET과 POST의 차이점  (0) 2025.03.08
HTTP와HTTPS  (0) 2025.03.08
HTTPS의 SSL HandShake  (0) 2025.03.07
TCP와 UDP의 차이점  (0) 2025.03.06
웹 통신의 큰 흐름  (0) 2025.03.05