728x90
TCP란 무엇인가?
TCP(Transmission Control Protocol)는 인터넷에서 데이터를 신뢰성 있게 전송하기 위한 트랜스포트 계층 프로토콜입니다. TCP는 연결 기반, 신뢰성 보장, 순서 보장 등을 제공하며, 데이터를 전송하기 전 송신자와 수신자 간에 핸드셰이킹 절차를 통해 연결을 설정합니다. 또한 TCP는 데이터가 손실되거나 잘못 전송된 경우 이를 복구하는 기능도 제공합니다.
TCP의 주요 기능
- 누적 ACK(Acknowledgement): TCP는 송신한 데이터가 수신자에게 정상적으로 도착했는지 확인하기 위해 누적 ACK를 사용합니다. 이때 송신자는 수신자로부터 정상 수신한 데이터에 대한 ACK 번호를 받습니다.
- 파이프라이닝: 송신자는 여러 개의 데이터 세그먼트를 연속적으로 전송할 수 있습니다. 이는 TCP가 혼잡 제어와 흐름 제어를 통해 윈도우 크기를 설정해 데이터 흐름을 제어하기 때문입니다.
- 연결 기반: 송신자와 수신자는 데이터 교환 전에 먼저 제어 메시지를 교환하는 핸드셰이킹 과정을 거쳐 연결을 설정합니다.
- 흐름 제어: 송신자는 수신자의 버퍼 크기를 넘지 않도록 데이터를 전송합니다. 수신자는 수신 가능한 데이터 양을 윈도우 크기로 설정하여 송신자에게 알려줍니다.
- 1대1 연결: TCP는 1대1 통신을 보장하며, 송신자와 수신자는 각각 한 개의 연결만 사용해 데이터를 주고받습니다.
TCP 세그먼트 크기와 구조
- TCP MSS(Maximum Segment Size): TCP가 한 번에 전송할 수 있는 최대 데이터 크기를 의미합니다. 기본값은 IPv4 기준으로 536 또는 1460바이트입니다.
- TCP MTU(Maximum Transfer Unit): IP 헤더와 TCP 헤더를 포함한 전체 데이터 전송 크기입니다. 일반적으로 1500바이트로 설정됩니다.
TCP 순서 번호와 ACK 번호
- 순서 번호: TCP는 각 세그먼트에 고유한 순서 번호를 부여합니다. 이 순서 번호는 해당 세그먼트의 시작 바이트를 나타내며, 수신자가 데이터를 올바른 순서로 재조립할 수 있도록 돕습니다.
- ACK 번호: 수신자는 정상적으로 수신된 세그먼트의 마지막 바이트 다음에 위치할 바이트의 번호를 ACK로 송신자에게 알립니다. 이때 비순차 세그먼트를 처리하는 방법은 TCP 규격에 명확히 정의되어 있지 않으므로 개발자가 임의로 처리해야 합니다.
TCP 타임아웃과 RTT
- RTT(Round Trip Time) 측정: TCP는 세그먼트를 전송한 후, 그에 대한 ACK를 수신할 때까지 걸리는 시간을 SampleRTT로 측정합니다. 이를 바탕으로 EstimatedRTT를 계산하며, 최근 RTT 값들의 평균을 사용해 변동성을 완화합니다.
- 타임아웃 설정: 타임아웃은 EstimatedRTT에 안전 마진을 더해 설정됩니다. 만약 타임아웃이 너무 짧으면 불필요한 재전송이 발생하고, 너무 길면 세그먼트 손실에 대한 대응이 늦어집니다.
TCP 송신자와 수신자 동작
- 송신자: 송신자는 응용 계층으로부터 데이터를 받아 순서 번호가 부여된 세그먼트를 생성하고, 이를 전송합니다. 송신된 세그먼트에 대해 ACK를 수신하지 못하면 타임아웃을 설정하고, 시간이 경과하면 해당 세그먼트를 재전송합니다.
- 수신자: 수신자는 세그먼트를 순차적으로 수신하고, 예상한 순서대로 도착한 세그먼트에 대해 ACK를 송신합니다. 지연된 ACK 방식은 데이터 흐름을 최적화하기 위해 사용되며, 다음 세그먼트가 도착하지 않으면 500ms 후에 ACK를 전송합니다.
TCP 재전송 메커니즘
TCP는 빠른 재전송(Fast Retransmit) 기능을 사용하여 동일한 세그먼트에 대한 중복된 ACK가 3번 연속 수신되면, 송신자는 타임아웃을 기다리지 않고 해당 세그먼트를 즉시 재전송합니다. 이를 통해 손실된 세그먼트를 빠르게 복구할 수 있습니다.
TCP는 신뢰성 있고 순서가 보장된 데이터 전송을 위해 다양한 기능을 제공합니다. 이러한 기능을 통해 인터넷 상에서 데이터가 안전하고 효율적으로 전송될 수 있으며, 혼잡 제어와 흐름 제어 같은 메커니즘을 통해 네트워크의 성능을 최적화합니다.
728x90
'전공 공부 > 컴퓨터네트워크' 카테고리의 다른 글
혼잡 제어의 원리 (1) | 2024.10.03 |
---|---|
TCP 흐름 제어 (1) | 2024.10.03 |
신뢰기반 데이터 전송의 원리 (1) | 2024.10.03 |
비연결형 트랜스포트 : UDP (1) | 2024.10.03 |
다중화와 역다중화 (0) | 2024.10.03 |