개요
TCP는 전송 계층에서 신뢰성 있는 데이터 전송을 제공하는 프로토콜이다. 패킷을 순서대로 전송하고, 오류 발생 시 재전송을 통해 데이터의 무결성을 보장한다. 연결 기반 프로토콜로, 데이터 전송 전에 연결을 설정하며, 연결 종료 시에는 명시적으로 연결을 종료한다.
TCP의 특성
- 스트림 전송: TCP는 데이터를 연속된 바이트 스트림으로 처리하며, 데이터의 경계를 구분하지 않는다.
- 양방향 통신: TCP는 양방향 통신을 지원하여, 송신자와 수신자가 모두 데이터를 전송할 수 있다.
- 오류 제어: TCP는 오류 제어를 통해 전송 중 발생한 오류를 탐지하고, 손상된 데이터를 재전송한다.
- 흐름 제어: TCP는 수신자의 데이터 처리 능력에 맞춰 송신 속도를 조절한다.
- 혼잡 제어: 네트워크 혼잡을 방지하기 위해 송신 속도를 조절하는 메커니즘을 제공한다.
TCP 세그먼트 구조
TCP 세그먼트는 헤더와 데이터로 구성된다. 헤더는 제어 정보와 오류 검출에 필요한 정보를 담고 있으며, 데이터는 실제 전송되는 응용 프로그램의 정보이다.
헤더 필드
- 출발지 포트(Source Port): 데이터를 전송하는 호스트의 포트 번호이다.
- 목적지 포트(Destination Port): 데이터를 수신하는 호스트의 포트 번호이다.
- 순서 번호(Sequence Number): 세그먼트 내 첫 번째 바이트의 번호로, 데이터 순서를 관리한다.
- 확인 응답 번호(Acknowledgement Number): 수신한 세그먼트에 대한 응답으로, 다음에 수신할 바이트의 번호를 지정한다.
- 헤더 길이(Header Length): TCP 헤더의 길이를 나타낸다.
- 제어 플래그(Control Flags): 연결 설정, 종료, 데이터 전송 상태 등을 제어하는 플래그이다.
- 윈도우 크기(Window Size): 수신 측에서 받아들일 수 있는 데이터의 양을 나타낸다.
- 체크섬(Checksum): 오류 검출을 위한 필드이다.
- 긴급 포인터(Urgent Pointer): 긴급 데이터가 있는 경우 이를 처리하기 위한 필드이다.
흐름 제어
TCP는 흐름 제어 메커니즘을 통해 수신자가 처리할 수 있는 만큼만 데이터를 전송한다. 수신자는 윈도우 크기(Window Size) 필드를 통해 수신 가능한 데이터 양을 송신자에게 알린다.
슬라이딩 윈도우(Sliding Window)
슬라이딩 윈도우 방식은 수신자의 버퍼 크기에 맞춰 송신자가 데이터를 조절하는 방식이다. 송신자는 윈도우 크기 내에서 데이터를 전송하고, 수신자가 확인 응답(ACK)을 보내면 윈도우가 슬라이딩되어 새로운 데이터를 전송할 수 있다.
오류 제어
TCP는 오류 제어를 통해 전송 중 발생할 수 있는 데이터 손실이나 손상을 탐지하고 복구한다. 주요 메커니즘으로는 재전송과 중복 ACK가 있다.
재전송 타이머
TCP는 패킷을 전송한 후 일정 시간 내에 확인 응답(ACK)을 받지 못하면 해당 패킷을 재전송한다. 이때 타이머 값을 설정하는 것이 중요하며, 너무 짧으면 불필요한 재전송이 발생하고, 너무 길면 데이터 손실에 대한 복구가 늦어진다.
중복 ACK
수신자가 동일한 ACK를 여러 번 보낼 경우, 송신자는 해당 패킷이 손실되었다고 판단하고 빠르게 재전송을 시도한다. 이를 빠른 재전송(Fast Retransmit)이라 한다.
혼잡 제어
TCP는 네트워크 혼잡을 방지하기 위해 혼잡 제어 메커니즘을 사용한다. 혼잡 제어는 네트워크의 상태에 따라 송신 속도를 조절하여 혼잡을 예방하거나 해결하는 방식이다.
혼잡 윈도우(Congestion Window)
혼잡 윈도우는 네트워크 혼잡을 방지하기 위해 송신자가 한 번에 전송할 수 있는 데이터의 양을 제한하는 방식이다. 네트워크가 혼잡해지면 혼잡 윈도우 크기를 줄이고, 혼잡이 해소되면 윈도우 크기를 다시 늘린다.
혼잡 제어 단계
- 느린 시작(Slow Start): 처음에는 작은 크기의 혼잡 윈도우를 사용하다가 점차 크기를 늘려가며 네트워크 상태를 확인한다.
- 혼잡 회피(Congestion Avoidance): 혼잡이 발생할 가능성이 커지면 혼잡 윈도우의 증가 속도를 줄여 혼잡을 예방한다.
- 빠른 회복(Fast Recovery): 중복 ACK를 통해 혼잡 상태를 빠르게 감지하고, 혼잡 윈도우를 줄이면서 손실된 패킷을 재전송한다.
TCP 타이머와 RTT 계산
TCP는 송신 패킷에 대한 응답 시간을 측정하여 RTT(Round Trip Time)를 계산하고, 이를 기반으로 재전송 타이머를 설정한다. RTT는 송신 측에서 패킷을 전송한 후 수신 측에서 ACK를 받을 때까지 걸리는 시간을 의미한다.
RTT 계산 방식
RTT는 여러 번의 샘플을 평균 내어 계산하며, 이전 RTT 값과 새로운 RTT 샘플을 가중치로 평균을 구한다. 이를 지수 가중 이동 평균(Exponential Weighted Moving Average) 방식이라고 한다.
TCP의 성능 최적화
TCP는 네트워크 성능을 극대화하기 위해 여러 최적화 기법을 제공한다. 대표적인 방법으로는 Nagle의 알고리즘과 Delaying ACK가 있다.
- Nagle의 알고리즘: 작은 패킷의 전송을 제한하고, 충분한 데이터가 모일 때까지 기다렸다가 한꺼번에 전송하는 방식이다.
- Delaying ACK: 수신자는 즉시 ACK를 보내지 않고, 잠시 대기하여 여러 데이터에 대한 ACK를 한 번에 보낸다.
TCP와 UDP 비교
- TCP는 연결 기반 프로토콜로, 신뢰성 있는 데이터 전송과 흐름 제어, 오류 제어, 혼잡 제어를 제공한다. 대용량 데이터를 안정적으로 전송하는 데 적합하다.
- UDP는 비연결형 프로토콜로, 신뢰성 없이 빠른 전송을 제공하며, 실시간 애플리케이션에서 자주 사용된다.
'통신 > 네트워크 프로토콜' 카테고리의 다른 글
Congestion control (0) | 2024.09.29 |
---|---|
TCP(2) - 연결과 해제 (0) | 2024.09.29 |
UDP (0) | 2024.09.29 |
TransportLayer (0) | 2024.09.29 |
Routing Algorithms (0) | 2024.09.29 |