1. 연결 지향형 전송 프로토콜, TCP의 개요
가. TCP(Transmission Control Protocol)의 정의
OSI 7계층 중 전송 계층(Transport Layer)에 속하며, 종단 간(End-to-End) 신뢰성 있는 데이터 전송을 위해 연결 지향적(Connection-oriented) 서비스를 제공하는 프로토콜입니다.
데이터의 정확한 전달을 위해 연결 설정 시에는 3-way Handshake, 연결 종료 시에는 4-way Handshake 과정을 거칩니다.
나. 주요 특징
신뢰성: 패킷 손실 시 재전송(ARQ), 흐름 제어(Flow Control), 혼잡 제어(Congestion Control).
전이중(Full-duplex) 통신: 양방향으로 동시에 데이터 전송 가능.
2. TCP 연결 설정: 3-way Handshake
양방향 통신을 위한 준비 단계로, 시퀀스 번호(ISN)를 교환하여 동기화합니다.
| 단계 | 주체 | 메시지 (Flag) | 설명 및 상태 변화 |
| 1단계 | Client | SYN (Seq=x) | 클라이언트가 서버에 접속 요청을 보냄 (LISTEN → SYN_SENT) |
| 2단계 | Server | SYN+ACK (Seq=y, Ack=x+1) | 서버가 요청을 수락하고 본인의 ISN을 보냄 (LISTEN → SYN_RCVD) |
| 3단계 | Client | ACK (Ack=y+1) | 클라이언트가 확인 응답을 보냄 (SYN_SENT → ESTABLISHED) |
결과: 서버도 ACK를 받으면 ESTABLISHED 상태가 되어 데이터 전송이 가능한 상태가 됨.
3. TCP 연결 해제: 4-way Handshake
데이터 전송 완료 후 양쪽의 연결을 안전하게 닫는 과정입니다.
| 단계 | 주체 | 메시지 (Flag) | 설명 및 상태 변화 |
| 1단계 | Client | FIN | 클라이언트가 연결을 종료하겠다는 신호를 보냄 (FIN_WAIT_1) |
| 2단계 | Server | ACK | 서버가 확인하고 남은 데이터를 마저 보냄 (CLOSE_WAIT) / 클라이언트는 FIN_WAIT_2 |
| 3단계 | Server | FIN | 서버도 보낼 데이터가 없으면 종료 신호를 보냄 (LAST_ACK) |
| 4단계 | Client | ACK | 클라이언트가 확인 응답을 보내고 TIME_WAIT 상태로 진입 후 최종 종료 |
TIME_WAIT의 중요성: 마지막 ACK가 유실될 경우를 대비하고, 지연 패킷(Stray Packet)이 다음 연결에 혼선(Data Corruption)을 주지 않도록 일정 시간 대기합니다.
4. 3-way/4-way Handshake 비교 및 기술사적 제언
가. 주요 차이점 비교
| 항목 | 3-way Handshake | 4-way Handshake |
| 목적 | 논리적 연결 설정 및 동기화 | 안전한 연결 종료 및 자원 회수 |
| 수행 단계 | 3단계 (SYN → SYN+ACK → ACK) | 4단계 (FIN → ACK → FIN → ACK) |
| 핵심 상태 | ESTABLISHED | TIME_WAIT |
나. 기술사적 제언 (발전 및 최적화)
TCP Fast Open (TFO): 3-way 과정에서 발생하는 지연 시간(RTT)을 줄이기 위해 첫 연결 이후 쿠키를 사용하여 SYN 패킷에 데이터를 함께 실어 보내는 기법이 활용되고 있습니다.
보안 고려사항: SYN 요청만 대량으로 보내 서버 자원을 고갈시키는 SYN Flooding 공격에 대비하여 SYN Cookie 등의 방어 기구 적용이 필수적입니다.
Modern Protocol: 최근 HTTP/3에서는 TCP 대신 UDP 기반의 QUIC 프로토콜을 사용하여 Handshake 과정을 0-RTT 또는 1-RTT로 단축, 네트워크 성능을 극대화하고 있습니다.
댓글 없음:
댓글 쓰기