Logo

dev-resources.site

for different kinds of informations.

TCP의 3대 제어

Published at
2/9/2023
Categories
network
tcp
rfc9293
Author
joo0
Categories
3 categories in total
network
open
tcp
open
rfc9293
open
Author
4 person written this
joo0
open
TCP의 3대 제어

기본개념

  • 송신버퍼
  • 수신버퍼
  • 윈도우
    • 송신 윈도우 변수
      • 슬라이딩 윈도우
    • 수신 윈도우 변수
    • 혼잡 윈도우 변수
    • 윈도우 알고리즘
      • Go-Back-N(GBN) 알고리즘
      • Selective-Repeat(SR) 선택적 반복 알고리즘
      • GBN, SR 혼합 알고리즘

ㅇ 전송 플로우

  1. Process -> TCP 송신 버퍼(push)
  2. TCP 송신 버퍼는 수신 버퍼 윈도우와 혼잡 윈도우 변수를 통해 계산후 TCP 수신 버퍼로 확인 응답 없이 보낼 수 있을 만큼 데이터를 보낸다.
  3. TCP 수신 버퍼는 수신된 데이터를 보유하고 있다가, 프로세스에서 수신할 준비가 되면 데이터를 당김(pull)에 의해 소비, 그에 따라 수신 윈도우도 변경

흐름제어

ㅁ 소비될 수 있을 만큼만 생산자가 보내주기 위해
왜? 수신측의 버퍼 오버 플로우로 인한 패킷 손실 우려

  • 수신 윈도우 변수(rwnd)에 의해 결정
  • 수신 버퍼가 얼마나 데이터를 받을 수 있는지 알려줄때 사용하는 변수
  • DATA를 생산하는 Proc, 소비 Proc 간의 속도가 다르기 때문에, 안정적인 TCP 통신을 위해서 수신측에서 상황을 통보
  • 송신측 흐름제어를 위한 윈도우
    • rwnd(Receive Window, 수신 윈도우 변수)
    • cwnd(Congestion Window, 혼잡 윈도우 변수)
    • awnd(Actual Window, 송신 윈도우 변수) : 수신측의 확인 응답 없이, 한번에 전달 할 수 있는 바이트 사이즈
    • awnd = min(rwnd, cwnd)
  • 네이글 알고리즘 : 네트워크망의 혼잡을 피하기 위해 설계(예외적인 상황에서 오버헤드의 가능성이 있다는 단점도 존재)

혼잡제어

ㅁ 공유자원인 네트워크망의 혼잡을 악화시켜 통신에 충돌이 나게 하는 것을 줄이고, 한정된 자원을 잘 분배하여 원활히 돌아갈 수 있도록 제어
(e.g. 고속도로의 혼잡을 완화시키기 위해, 차량 5부제 등의 제도를 시행)

  • 혼잡 윈도우 변수(cwnd)를 어떻게 계산하고 설정할 것인가에 대한 고찰.
  • cwnd(Congestion Window, 혼잡 윈도우 변수)
    • 송신 윈도우를 계산하기 위한 변수
    • MSS(Maximum Segment Size)를 기준
      • 세그먼트가 데이터를 가질 수 있는 최대의 크기를 뜻함
      • MSS = MTU - (IP헤더길이 +IP옵션길이) - (TCP 헤더길이 + TCP옵션길이)
      • IPv4(1460 Bytes), IPv6(1400 Bytes) 각각 다름
      • cwnd = 1 // MSS * 1 (IPv4 기준, 1460 Bytes)
      • cwnd = 2 // MSS * 2 (IPv4 기준, 2920 Bytes)
  • 수신 윈도우가 크더라도 혼잡 윈도우 변수가 작으면 송신 윈도우 크기는 작음
  • 혼잡 윈도우 변수는 혼잡 정책에 의해 증가되고 감소됨
  • TCP Reno 혼잡제어 알고리즘(그나마 쉬움 (그래도 어려움😥))
    • 혼잡 감지 : 혼잡을 어떻게 추측하고 감지할 것인가?
    • 혼잡 윈도우 변수(cwnd)
    • 느린 시작 임계점 변수(ssthresh - Slow Start Thresold) : 느린 시작 상태에서 혼잡 상태로 변경하는 임계점 변수
    • 혼잡 정책 : 어떻게 예방하고, 발생하면 어떻게 대처할 것인가
  • 기타 알고리즘들
    • TCP Tahoe and Reno
    • TCP Vegas
    • etc..

오류 제어

ㅁ 신뢰성 프로토콜이라고 불리는 TCP의 핵심 개념
ㅇ 훼손된 패킷을 감지 및 폐기(수신자)
ㅇ 중복 수신 된 패킷은 확인 후 폐기(수신자)
ㅇ 분실 된 패킷이 도착할 때까지 순서에 맞지 않는 세그먼트를 버퍼에 저장(수신자)
ㅇ 손실 되거나 제거된 패킷을 확인 후 재 전송(송신자)

  • 검사합(CheckSums) : 훼손 여부 확인
  • 확인응답(Acknowledgment) : 세그먼트 수신을 알려주기 위해 확인 응답
  • 타임아웃(Time-Out) : 송신 TCP는 연결당 재전송 타임아웃(RTO, retransmission timeout) 타이머를 사용 하여 패킷의 재전송 시기 가늠
tcp Article's
30 articles in total
Favicon
TCP-based P2P data transmission
Favicon
4G module update for the power failure alarm device with call telephone function
Favicon
Understanding Internet Protocols
Favicon
Docker Server Certificate with SSL
Favicon
Decoding Networking Protocols: A Guide to TCP/IP, HTTP, Socket, and WebSocket
Favicon
How to Run Multiple Tokio Runtimes in a Rust Application
Favicon
Optimizing global message transit latency: a journey through TCP configuration
Favicon
Setting Up a Simple TCP Server
Favicon
Introduction
Favicon
You (probably) do not understand UDP
Favicon
Chat Server in Ruby Sockets
Favicon
Unveiling the Power of TCP: Building Apps with Node.js's net Module
Favicon
TCP vs UDP Understanding the Differences
Favicon
A Beginner's Guide to Networking Protocols: TCP, UDP, HTTP, and HTTP/3
Favicon
Understanding WebSocket and creating from Scratch with JavaScript
Favicon
Why Linux 6.8 Networking Updates are a Big Deal
Favicon
Network - socket (1)
Favicon
Understanding Mobile TCP: Enhancing Connectivity in a Dynamic World
Favicon
Unveiling IP Spoofing Attacks in TCP/IP Networks: Detection, Prevention, and Impact
Favicon
Tipos de Sockets em TCP e UDP: Escolhendo o Caminho Adequado
Favicon
Network protocol
Favicon
What Would Marco Polo Think About the WebSockets?
Favicon
Server-Sent Events Explained
Favicon
TCPDump Kullanımı
Favicon
TCP의 3대 제어
Favicon
Optimizing Large File Transfers in Linux with Go - An Exploration of TCP and Syscall
Favicon
TCPs challenger: Homa
Favicon
What happens when you type a URL into your browser: The whole story
Favicon
what happens when your type google.com in your browser and press enter
Favicon
Why does TCP stick to packets? How to solve the sticky package problem?

Featured ones: