TCP 란?
=> Trasmission Control Protocol
=> 인터넷상에서 데이터를 신뢰성있게 전송하기 위해 사용되는 프로토콜
=> 패킷 기반의 통신이며 데이터 분할, 전송 순서 제어, 에러 검출 및 복구 담당
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
https://smjeon.dev/etc/tcp-state/
'WEB WAS > 미들웨어' 카테고리의 다른 글
Apache Tomcat vs WebLogic (0) | 2023.06.05 |
---|---|
서블릿 (Servlet)이란? (0) | 2023.06.05 |
MPM (Multi-Processing Module) 이란? (1) | 2023.06.04 |
GSLB 란? (Global Server Load Balancing) (0) | 2023.06.04 |
L4 부하 분산 - 로드밸런싱 방법 (해시, R.R, LC) (0) | 2023.06.04 |