Dctcp
Summary from here https://datatracker.ietf.org/doc/html/rfc8257 https://habr.com/ru/articles/474282/
DCTCP (Data Center TCP)
requires modification of 3 components: sender, receiver and device in the middle
DCTCP algorithm
- switch detects congestion -> set CE codepoint in IP header
- receiver sends to sender ECN- echo
- sender reduce TCP congestion window
Congestion Threshold
Packet arrives, the queue length > threshold -> switch use CE codepoint formula depends on switch realization K > (RTT * C) > 7 , C - link rate packets per sec
EC Echo and CWP - Congestion Window Reduced
receiver will send tcp segments with ECE flag until it gets CWR
(picture was taken form here https://slideplayer.com/slide/9447501/)
DCTCP variable - DCTCP.CE
- initialized as false
- stored in TCB (Transmission Block)
Algorithm (while DCTCP.CE is unchanged, the receiver sends normal delayed ACK)
- if receiver gets CE codepoint is set and DCTCP.CE = false -> set DCTCP = true, send ack
- if receiver gets packet without CE code point and DCTCP.CE = true -> set DCTP = false, send ack
-
otherwise ignore CE codepoint
- implementstion MAY choose to send 2 ACKs : first to normally acknowldge previous packets; second - with ECE echo
DCTCP.Alpha (process EC Echo on Sende)
- stores how many bytes has encounted collision
-
initialized as 1
DCTCP.Alpha = DCTCP.Alpha (1 - g) + g * M g - number beetween 0 and 1 M - number of bytes that had previous congestion