TCP 프로토콜
TCP(Transmission Control Protocol, 전송 제어 프로토콜)는 신뢰성 있는 데이터 전송을 보장하는 프로토콜로, 인터넷에서 데이터를 전송하는 데 널리 사용된다.
TCP의 주요 특징
- 연결 지향(Connection-oriented): 데이터를 전송하기 전에 연결을 설정해야 함 (3-way handshake).
- 신뢰성 보장: 데이터 손실 시 재전송 기능 제공.
- 순서 보장: 패킷이 순서대로 도착하도록 관리.
- 흐름 제어 및 혼잡 제어: 송·수신 속도를 조절하여 네트워크 과부하 방지.
- 패킷 오류 검출 및 복구: 데이터가 손상되거나 유실되면 재전송 요청(ACK, Sequence Number 사용).
TCP는 대표적으로 웹(HTTP, HTTPS), 이메일(SMTP, IMAP, POP3), 파일 전송(FTP) 등 신뢰성이 중요한 서비스에서 사용된다.
TCP 연결 과정: 3-Way Handshake
TCP에서 두 장치(클라이언트와 서버)가 데이터를 교환하기 전에 연결을 설정하는 과정이 필요하다. 이를 3-Way Handshake라고 한다.
3-Way Handshake 과정
- SYN (Synchronise) - 클라이언트 → 서버
- 클라이언트가 서버에 연결 요청을 보냄.
SYN 플래그가 설정된 패킷을 전송.
- Sequence Number(SEQ) 값을 랜덤하게 설정하여 전송.
- 예:
SYN=1, SEQ=1000
- SYN-ACK (Synchronise-Acknowledge) - 서버 → 클라이언트
- 서버가 클라이언트의 요청을 수락하고 응답.
SYN과 ACK 플래그가 설정된 패킷을 전송.
- 클라이언트가 보낸 SEQ 번호에 1을 더한 ACK(승인) 값을 보냄.
- 새로운 SEQ 값도 생성하여 포함.
- 예:
SYN=1, ACK=1001, SEQ=2000
- ACK (Acknowledge) - 클라이언트 → 서버
- 클라이언트가 서버의 응답을 확인하고 최종적으로 연결을 확립.
- 서버가 보낸 SEQ 번호에 1을 더한 ACK 값을 전송.
- 예:
ACK=2001, SEQ=1001
결과
이제 TCP 연결이 성립되어 데이터 전송이 가능한 상태가 된다.
TCP 연결 종료 과정: 4-Way Handshake
TCP 연결을 종료할 때는 4-Way Handshake를 사용한다.
1. 클라이언트 → 서버 (FIN 전송): 클라이언트가 FIN 플래그를 설정하여 연결 종료 요청.
2. 서버 → 클라이언트 (ACK 응답): 서버가 ACK를 보내 요청 확인.
3. 서버 → 클라이언트 (FIN 전송): 서버도 FIN을 전송하여 종료 요청.
4. 클라이언트 → 서버 (ACK 응답): 클라이언트가 ACK를 보내 연결 종료 확인.
이후, 일정 시간이 지나면 완전히 연결이 해제된다.
정리
- TCP는 신뢰성 있는 데이터 전송을 제공하는 프로토콜이다.
- 3-Way Handshake는 TCP 연결을 설정하는 과정이며, SYN → SYN-ACK → ACK 순서로 진행된다.
- 4-Way Handshake는 TCP 연결 종료 과정이며, FIN과 ACK 패킷이 교환된다.
- TCP는 데이터 전송 중에서 흐름 제어, 혼잡 제어, 오류 복구 등의 기능을 수행하여 안정적인 네트워크 통신을 지원한다.