TCP
TCP는 전송 계층에서 신뢰성있는 데이터 전달을 담당하는 프로토콜로, 순서 보장, 재전송, 흐름 제어, 혼잡 제어 기능을 제공함.
TCP 통신이란?
전송 계층에서 사용하는 프로토콜로, 신뢰성을 보장하는 연결형 서비스.
3-way handshake 과정을 통해 연결을 설정 및 4-way handshake로 연결 해제
흐름제어와 혼잡제어를 통해 패킷을 안정적으로, 순서대로, 에러 없이 교환할 수 있게 해줌.
흐름제어란?(end-system to end-system)
송신측과 수신측의 데이터 처리 속도 처리를 해결하기 위한 기법
수신쪽(receiver)에서 packet을 지나치게 많이 받지 않도록 조절(오버플로우 방지)
흐름 제어 + 재전송 제어 기법 중 하나인 Sliding Window를 사용해 수신자의 버퍼에 남은 공간만큼 데이터를 전송 받음
혼잡제어란?
송신측의 데이터 전달과 네트워크 처리 속도 차이를 해결하기 위한 기법?
or 네트워크 내 패킷 수가 넘쳐 네트워크를 혼잡하게 만드는 것을 방지하는 기법
전송 과정
데이터 흐름
Application ↓ Socket ↓ Transport Layer (TCP) ↓ Network Layer (IP) ↓ Internet ↓ Receiver애플리케이션에서 생성된 데이터가 소켓을 통해 커널로 전달,
TCP를 거쳐 IP계층으로 내려간 뒤 네트워크를 통해 수신자에게 전달
전송 과정 상세
보내는쪽(Sender) 흐름
애플리케이션이 소켓에 write
→ 데이터는 커널의 송신 버퍼(Send Buffer)에 저장됨. 이 시점에선 아직 네트워크로 안나감
TCP 계층
데이터를 세그먼트 단위로 분할
TCP 헤더 추가(Sequence Number 포함)
네트워크 계층(IP)로 전달
TCP는 데이터를 작은 단위로 나누고, 각 세그먼트에 순서 정보와 제어 정보를 붙여 전송 준비를 함.
받는쪽(Receiver)흐름
세그먼트 수신 → 커널의 수신 버퍼(Receive Buffer)에 저장됨
애플리케이션이 read
→ 수신 버퍼에 저장된 데이터를 애플리케이션이 읽어감.
애플리케이션이 읽어가야 버퍼 공간이 다시 확보됨.
문제: 수신 버퍼가 가득 차면?만약 송신자가 계속 데이터를 보내고, 수신자가 데이터를 느리게 읽는 상황이라면?
발생 가능. 이를 방지하기 위한게 Flow Control(흐름 제어).
TCP가 신뢰성을 보장하는 방법
TCP는 다음을 통해 신뢰성을 보장합니다:
순서 보장 (Sequence Number) → Sequence Number로 순서 재정렬
손실 감지 및 재전송(ACK) → ACK 기반 확인 응답 → 일정 시간 내 ACK 없으면 재전송
흐름 제어(Flow Control) → 수신 버퍼 보호 → Receive Window 사용
혼잡 제어(Congestion Control) → 네트워크 과부하 방지 → Slow Start, AIMD 사용
AIMD(Additive Increase/Multiplicative Decrease)
: 증가할땐 더하고, 감소할땐 곱하는 방식.
가산증가: 네트워크 혼잡이 없으면 RTT마다 1MSS(Maximum Segment Size)씩 증가시킴
곱셈감소: 패킷 손실 등 혼잡이 감지되면, 송신자는 cwnd 크기를 즉시 절반으로 줄임.
Last updated