Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DCTCP congestion control flavour not working as intended. #816

Open
Avian688 opened this issue Sep 30, 2022 · 1 comment
Open

DCTCP congestion control flavour not working as intended. #816

Avian688 opened this issue Sep 30, 2022 · 1 comment
Assignees
Labels
Milestone

Comments

@Avian688
Copy link

The DCTCP congestion control flavour does not work as intended due to the following lines in the TcpConnectionUtil.cc file (which was updated after the release of the DCTCP flavour).
// ECN if (state->ect && state->sndCwr) { tcpHeader->setCwrBit(true); EV_INFO << "\nDCTCPInfo - sending TCP segment. Set CWR bit. Setting sndCwr to false\n"; state->sndCwr = false; }

DCTCP should only update the congestion window once every RTT. After receiving a marked packed, causing a congestion window update, state->sndCwr is set to true. This indicates that the congestion window has changed, which makes sure the congestion window is not again updated if another marked packed arrives. The code snipped above is in the TcpConnection::sendSegment(uint32_t bytes) method, meaning that, when ecn is used, the state-sndCwr will be reset to false for every sent segment. This breaks the behaviour of DCTCP.

@kalsasdf
Copy link

kalsasdf commented Feb 7, 2023

The ECE bit of the ACK in DCTCP is not affected by the CWR bit of received packets because DCTCP has its own state machine, which is one cumulative ACK(marked with ECE bit) for every m consecutively received packets, where m is 2 typically. And this algorithm has also been overrided in INET4.4. The following code is in the DcTcp.cc file.
bool DcTcp::shouldMarkAck()
{
// RFC 8257 3.2 page 6
// When sending an ACK, the ECE flag MUST be set if and only if DCTCP.CE is true.
return state->dctcp_ce;
}
So I think DCTCP will behave normally under this version.

@levy levy added the Bug label Feb 21, 2023
@levy levy modified the milestones: INET 4.6, Postponed Feb 21, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants