네트워크에서 TCP(Transmission Control Protocol)는 신뢰할 수 있는 데이터 전달을 보장해주는 중요한 프로토콜입니다. 이번 글에서 TCP의 세그먼트 구조와, 연결 설정 및 종료 과정, 흐름 제어와 재전송 메커니즘 등을 다뤄보겠습니다.
TCP(Transmission Control Protocol)는 연결 지향적 프로토콜로, 신뢰할 수 있는 데이터 전송을 제공합니다. 송신자와 수신자는 1대 1 연결을 통해 데이터를 주고받으며, 순서 기반의 연속 스트림을 처리하여 데이터가 정확하게 도착하도록 보장합니다.
- 전이중 데이터 흐름: 양방향 데이터 흐름이 가능합니다.
- MSS (Maximum Segment Size): TCP가 한 번에 전송할 수 있는 최대 데이터 크기입니다.
- 누적 ACK: 수신자는 받은 데이터의 마지막 위치까지 확인 응답(ACK)을 보냅니다.
- 파이프라이닝: 여러 세그먼트를 동시에 전송하고 수신 확인을 기다리지 않아도 됩니다.
- 연결 설정(3-Way Handshake): 데이터를 전송하기 전에 연결을 설정합니다.
TCP 세그먼트 구조: 데이터 전달의 기본 단위
TCP는 데이터를 작은 세그먼트 단위로 나누어 송수신하며, 이 세그먼트의 구조는 아래와 같습니다:
- Source Port / Destination Port: 송신자와 수신자의 포트를 식별합니다.
- Sequence Number: 현재 세그먼트가 데이터 스트림에서 어디서부터 시작되는지를 나타냅니다.
- Acknowledgement Number: 수신 측이 다음으로 기대하는 바이트의 번호를 전달합니다.
- Flags:
- SYN: 연결 요청을 의미합니다.
- ACK: 송신된 데이터에 대한 수신 확인입니다.
- RST, FIN: 연결 초기화 또는 종료를 나타냅니다.
- Receive Window: 흐름 제어를 위해 수신자가 수용할 수 있는 최대 데이터 양을 명시합니다.
- Checksum: 데이터 무결성 검사를 위해 사용됩니다.
- Options: 다양한 네트워크 상황에 따라 옵션 필드로 조정됩니다.
이 구조는 TCP의 핵심 요소로, 각각의 필드가 어떻게 데이터의 신뢰성과 순서를 보장하는지 이해하는 것이 중요합니다.
TCP 연결 과정 및 ACK 번호의 사용
TCP는 3-way Handshake 방식을 통해 연결을 설정합니다:
- SYN: 클라이언트가 서버에게 연결 요청을 보냅니다.
- SYN-ACK: 서버는 요청을 수락하고 응답합니다.
- ACK: 클라이언트는 응답을 확인하고 연결이 설정됩니다.
순서 번호와 ACK의 중요성
- A(클라이언트)가 문자 'c'를 입력해 서버로 보냅니다.
- B(서버)는 이 데이터를 저장한 뒤 그대로 클라이언트에게 돌려보냅니다.
- 이때, TCP를 통해 다음과 같은 순서 번호와 ACK 번호가 사용됩니다:
- A가 순서 번호 42를 가진 데이터를 보냅니다.
- B는 42번부터 시작하는 데이터를 받았다고 확인하고, ACK 번호 79(다음으로 기대하는 데이터 바이트 번호)를 응답합니다.
- 그러면 A는 ACK 번호를 통해 B가 78번까지의 데이터를 수신했음을 알게 됩니다.
- 이후 B는 79번 데이터를 전송하며, A는 이 데이터를 수신한 후 ACK 번호를 43으로 변경합니다.
- ACK 번호가 1 증가한 이유는, 수신된 데이터를 확인하고 다음에 받을 데이터의 시작 위치를 표시하기 때문입니다.
TCP의 재전송 메커니즘
TCP는 네트워크에서 데이터 손실이나 ACK 손실을 감지해 재전송합니다.
- 일반 재전송: 타임아웃이 발생하면 송신자는 데이터를 재전송합니다.
- 빠른 재전송: 동일한 ACK가 3번 반복되면, 송신자는 타임아웃 없이 즉시 재전송을 시작합니다.
예시:
- Host A가 Seq=92 데이터를 보냈으나, ACK가 손실된 경우 타임아웃 후 재전송합니다.
- 만약 ACK가 중복된 경우 빠른 재전송이 발생합니다.
TCP 타임아웃과 왕복 시간(RTT) 계산
- RTT(Round-Trip Time): 데이터 전송 후 응답을 받기까지의 시간입니다.
- EstimatedRTT와 SampleRTT의 가중 평균을 통해 네트워크 상태에 따라 동적으로 타임아웃 값을 조정합니다.
- 타임아웃 값 설정 공식:
1. TCP 세그먼트 구조에서 Sequence Number와 Acknowledgement Number의 역할은 무엇인가요?
답: Sequence Number는 해당 세그먼트의 첫 번째 바이트 위치를 나타내며, Acknowledgement Number는 수신자가 다음으로 받을 예상 바이트를 표시합니다. 이를 통해 TCP는 데이터가 정확한 순서로 전달되도록 보장합니다.
2. TCP에서 3-Way Handshake 과정에 대해 설명하세요.
답: TCP는 송신자와 수신자 간의 연결을 설정하기 위해 3-Way Handshake를 사용합니다.
- SYN: 클라이언트가 서버에게 연결을 요청합니다.
- SYN-ACK: 서버가 연결 요청을 수락하고 응답합니다.
- ACK: 클라이언트가 응답을 확인하면 연결이 설정됩니다.
3. 빠른 재전송(Fast Retransmit)이 발생하는 조건은 무엇인가요?
답: 동일한 ACK가 3번 연속 수신되면, 송신자는 타임아웃을 기다리지 않고 즉시 재전송을 수행합니다. 이는 네트워크 지연을 최소화하고 데이터 손실에 빠르게 대응하기 위함입니다.
4. RTT와 타임아웃 설정이 중요한 이유는 무엇인가요?
답: RTT는 데이터의 왕복 시간을 측정하며, 타임아웃 설정은 네트워크의 상태에 따라 동적으로 조정됩니다. 타임아웃이 너무 짧으면 불필요한 재전송이 발생하고, 너무 길면 데이터 손실에 대한 대응이 지연됩니다.
'전공 공부 > 컴퓨터네트워크' 카테고리의 다른 글
TCP 흐름 제어와 연결 관리 (0) | 2024.10.29 |
---|---|
TCP 혼잡 제어 (1) | 2024.10.03 |
혼잡 제어의 원리 (1) | 2024.10.03 |
TCP 흐름 제어 (1) | 2024.10.03 |
연결지향형 트랜스포트 : TCP (2) | 2024.10.03 |