WEB WAS/미들웨어

3-way Handshake 란? (TCP 통신, 4-way Handshake)

chanstory 2023. 6. 5. 10:48
반응형

TCP 란?

=> Trasmission Control Protocol

=> 인터넷상에서 데이터를 신뢰성있게 전송하기 위해 사용되는 프로토콜

=> 패킷 기반의 통신이며 데이터 분할, 전송 순서 제어, 에러 검출 및 복구 담당 

 

 

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

3-way Handshake 란?

=> TCP 통신 시작 전 클라이언트와 서버 간 논리적 연결을 설정하기 위해 사용

 

3-way Handshake 3단계

1. 클라이언트는 서버에게 SYN (Synchronize Sequence Number) 패킷 으로 연결 요청

    - 클라이언트가 서버와 통신을 시작하고자 알리는 역할

2. 서버는 클라이언트의 연결 요청을 받고 클라이언트에게 수락의 의미인 ACK(SYN+ACK) 패킷 전송

3. 클라이언트는 서버의 ACK 패킷을 받고 이에 대한 확인 ACK를 보냅니다.

 

 

3-way Handshake 사용 이유

1. 연결의 신뢰성 보장 

    - 클라이언트와 서버 간 안정적인 연결을 설정하고 데이터의 신뢰성을 보장한다.

    - 각 단계에서 상대방이 제대로 응답하고 있는지 확인하고 통신 경로가 제대로 형성되어 있는지 확인한다.

2. 통신 경로의 설정

    - 클라이언트와 서버 사이에서 통신 경로를 설정하고 동기화 시킴

    - 서로의 초기 순차 번호 (Sequence Number)를 교환하여 데이터 전송에 필요한 순서 제어와 에러 검출을 가능하게 함

3. 네트워크 혼잡 제어 

    - TCP의 혼잡 제어 알고리즘에 필요한 초기 정보를 교환하는데 사용된다.

    - 네트워크 상황을 모니터링하고 조절함으로써 네트워크 성능을 최적화 할 수 있다.

 

단점

1. 3단계를 거치므로 연결 설정에는 추가적 시간 소요가 있다.

2. 각 단계에서 패킷 교환을 수행하므로 추가적 리소스 (네트워크 대역폭, 메모리)가 필요하다. 

3. 악의적 공격자가 대량의 SYN 패킷을 보내 서버 자원을 고갈 시키는 SYN Flood 공격에 취약할 수 있다.

 

 

3-way Handshake 의 상태 정보

1. CLOSED : 연결 설정을 시작하기 전 상태

2. SYN_SENT : 클라이언트가 서버에게 SYN패킷을 보내고 응답을 기다리는 상태

3. LISTEN : 서버 소켓이 클라이언트의 연결 요청을 기다리는 상태

4. SYN_RECEIVED : 서버가 클라이언트의 SYN 패킷을 받았으며

                                   SYN + ACK 패킷을 보내고 클라이언트의 응답을 기다리는 상태

5. ESTABLISHED : 클라이언트와 서버 간 연결이 성공적으로 설정 되었고 데이터 송수신 가능 상태

 

 

4-way Handshake 란?

=> TCP 통신 시작 전 클라이언트와 서버 간 연결 해제를 위해 사용

 

Active close - 연결 해제 요청 쪽 (요청)

Passive close - 연결 해제 요청 받은 쪽 (응답)

 

client 가 연결 해제 요청을 하였다면

1. client 는 FIN을 전송하고 FIN-WAIT-1 상태로 전환

2. server 는 FIN을 수신하고 ACK를 보낸 후 CLOSE-WAIT 상태로 전환

3. client 는 ACK를 수신하고 FIN-WAIT-2 상태로 전환

4. server는 프로세스로 부터 passive close 명령을 받으면 FIN 전송 (LAST-ACK 상태로 전환)

5. client는 FIN을 수신하면 ACK 전송 후 TIME-WAIT 상태로 전환

    (FIN-WAIT-2 상태에서 일정 시간 지난 후 TIME-WAIT 상태가 된다)

6. client는 TIME-WAIT 상태로 2MSL 동안 대기한 뒤 CLOSED 상태가 된다

    (MSL = maximum segment lifetime - TCP 구현 시 MSL 값 정해줘야 함) 

7. server는 LAST-ACK 상태로 있다가 client로 부터 온 ACK 값 수신 시 CLOSED 상태가 됨

 

 

 

 

참고

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

 

TCP와 3-Way, 4-Way Handshake란? (개념/ 동작 방식)

서론 이번 글에서는 TCP의 신뢰성있는 통신 연결과 종료를 위해 3Way, 4Way Handshake의 개념과 통신 동작 방식에 대해 알아보려한다. 이 내용을 이해하기 위해선 TCP의 개념도 알아야해서 간단히 TCP의

jeongkyun-it.tistory.com

https://smjeon.dev/etc/tcp-state/

 

TCP 상태(CLOSE_WAIT, TIME_WAIT)

트래픽을 만들어내는 어떤 툴을 사용하다가 CLOSE_WAIT 상태로 계속 유지되는 버그를 마주쳤다. 그런 의미에서 TCP 상태에 대해서 공부하고 정리한다.

smjeon.dev

 

 

 

 

 

반응형