dev-resources.site
for different kinds of informations.
TCP의 3대 제어
Published at
2/9/2023
Categories
network
tcp
rfc9293
Author
joo0
Main Article
Author
4 person written this
joo0
open
기본개념
- 송신버퍼
- 수신버퍼
- 윈도우
- 송신 윈도우 변수
- 슬라이딩 윈도우
- 수신 윈도우 변수
- 혼잡 윈도우 변수
- 윈도우 알고리즘
- Go-Back-N(GBN) 알고리즘
- Selective-Repeat(SR) 선택적 반복 알고리즘
- GBN, SR 혼합 알고리즘
- 송신 윈도우 변수
ㅇ 전송 플로우
- Process -> TCP 송신 버퍼(push)
- TCP 송신 버퍼는 수신 버퍼 윈도우와 혼잡 윈도우 변수를 통해 계산후 TCP 수신 버퍼로 확인 응답 없이 보낼 수 있을 만큼 데이터를 보낸다.
- 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
TCP-based P2P data transmission
read article
4G module update for the power failure alarm device with call telephone function
read article
Understanding Internet Protocols
read article
Docker Server Certificate with SSL
read article
Decoding Networking Protocols: A Guide to TCP/IP, HTTP, Socket, and WebSocket
read article
How to Run Multiple Tokio Runtimes in a Rust Application
read article
Optimizing global message transit latency: a journey through TCP configuration
read article
Setting Up a Simple TCP Server
read article
Introduction
read article
You (probably) do not understand UDP
read article
Chat Server in Ruby Sockets
read article
Unveiling the Power of TCP: Building Apps with Node.js's net Module
read article
TCP vs UDP Understanding the Differences
read article
A Beginner's Guide to Networking Protocols: TCP, UDP, HTTP, and HTTP/3
read article
Understanding WebSocket and creating from Scratch with JavaScript
read article
Why Linux 6.8 Networking Updates are a Big Deal
read article
Network - socket (1)
read article
Understanding Mobile TCP: Enhancing Connectivity in a Dynamic World
read article
Unveiling IP Spoofing Attacks in TCP/IP Networks: Detection, Prevention, and Impact
read article
Tipos de Sockets em TCP e UDP: Escolhendo o Caminho Adequado
read article
Network protocol
read article
What Would Marco Polo Think About the WebSockets?
read article
Server-Sent Events Explained
read article
TCPDump Kullanımı
read article
TCP의 3대 제어
currently reading
Optimizing Large File Transfers in Linux with Go - An Exploration of TCP and Syscall
read article
TCPs challenger: Homa
read article
What happens when you type a URL into your browser: The whole story
read article
what happens when your type google.com in your browser and press enter
read article
Why does TCP stick to packets? How to solve the sticky package problem?
read article
Featured ones: