# TCP

TCP(Transmission Control Protocol)는 인터넷 프로토콜 스위트의 핵심 프로토콜 중 하나로, 신뢰할 수 있는 데이터 전송을 보장한다. 주로 IP(Internet Protocol)와 함께 사용되어 TCP/IP라는 용어로 잘 알려져 있다. TCP는 데이터 전송을 관리하고 오류를 검출 및 수정하여, 데이터가 정확하고 순서대로 도착하도록 한다.

#### TCP의 기본 원리

TCP는 연결 지향적 프로토콜로, 데이터 전송 전에 반드시 연결을 설정해야 한다. 이를 위해 TCP는 세 가지 주요 과정을 거친다: 연결 설정, 데이터 전송, 연결 종료.

* **연결 설정 (Three-Way Handshake):** 클라이언트와 서버 간에 세 번의 패킷 교환을 통해 연결을 설정한다. **SYN:** 클라이언트가 서버에 연결 요청을 보내는 단계. **SYN-ACK:** 서버가 클라이언트의 요청을 확인하고, 응답을 보내는 단계. **ACK:** 클라이언트가 서버의 응답을 확인하고 연결을 완료하는 단계.
* **데이터 전송:** 연결이 설정된 후, 데이터는 세그먼트(segment) 단위로 전송된다. 각 세그먼트는 순서 번호(sequence number)와 확인 응답 번호(acknowledgment number)를 포함하여 데이터의 순서와 무결성을 보장한다.
* **연결 종료:** 데이터 전송이 완료되면, 연결 종료를 위해 네 번의 패킷 교환(Four-Way Handshake)이 이루어진다.

#### TCP 세그먼트 구조

TCP 세그먼트는 여러 필드로 구성되어 있으며, 주요 필드는 다음과 같다:

* **소스 포트(Source Port)와 목적지 포트(Destination Port):** 통신하는 양쪽 애플리케이션을 식별하기 위한 16비트 숫자.
* **순서 번호(Sequence Number):** 데이터 바이트의 순서를 나타내는 32비트 숫자.
* **확인 응답 번호(Acknowledgment Number):** 수신한 데이터의 다음 예상 순서 번호를 나타내는 32비트 숫자.
* **헤더 길이(Header Length):** TCP 헤더의 길이를 나타내는 4비트 숫자.
* **플래그(Flags):** 제어 플래그로, SYN, ACK, FIN, RST, PSH, URG 등이 있다.
* **윈도우 크기(Window Size):** 수신 측에서 한 번에 받을 수 있는 데이터 양을 나타내는 16비트 숫자.
* **체크섬(Checksum):** 데이터의 무결성을 확인하기 위한 16비트 값.
* **긴급 포인터(Urgent Pointer):** 긴급 데이터의 끝 위치를 나타내는 16비트 값 (긴급 플래그가 설정된 경우).

#### TCP 흐름 제어

TCP 흐름 제어는 송신 측이 수신 측의 수신 능력에 맞춰 데이터를 전송하도록 조절하는 메커니즘이다. 이를 통해 수신 측이 과부하되지 않도록 한다. 주요 기술로는 슬라이딩 윈도우(Sliding Window)가 있다.

* **슬라이딩 윈도우:** 송신 측은 수신 측이 지정한 윈도우 크기만큼의 데이터를 전송할 수 있다. 수신 측은 확인 응답(Acknowledgment)을 통해 수신된 데이터의 양을 알리고, 윈도우 크기를 조정한다.

#### TCP 혼잡 제어

TCP 혼잡 제어는 네트워크의 혼잡 상태를 감지하고, 송신 속도를 조절하여 네트워크의 혼잡을 완화하는 메커니즘이다. 주요 알고리즘으로는 다음과 같다:

* **Slow Start:** 연결 초기에는 송신 속도를 천천히 증가시키는 방법이다.
* **Congestion Avoidance:** 네트워크의 혼잡을 피하기 위해 송신 속도를 서서히 증가시키는 방법이다.
* **Fast Retransmit:** 중간에 패킷 손실이 발생했을 때, 즉시 재전송을 통해 데이터 손실을 줄이는 방법이다.
* **Fast Recovery:** 혼잡이 발생한 후 송신 속도를 빠르게 회복시키는 방법이다.

***

관련 자료:

1. Stevens, W. R., Fenner, B., & Rudoff, A. M. (2003). UNIX Network Programming, Volume 1: The Sockets Networking API. Addison-Wesley.
2. Tanenbaum, A. S., & Wetherall, D. J. (2011). Computer Networks. Prentice Hall.
3. Kurose, J. F., & Ross, K. W. (2016). Computer Networking: A Top-Down Approach. Pearson.
4. Peterson, L. L., & Davie, B. S. (2011). Computer Networks: A Systems Approach. Morgan Kaufmann.
5. Forouzan, B. A. (2012). TCP/IP Protocol Suite. McGraw-Hill.
