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

ECN bleaching - RFC6040 not supported #2246

Open
mrjstrand opened this issue Mar 6, 2024 · 5 comments
Open

ECN bleaching - RFC6040 not supported #2246

mrjstrand opened this issue Mar 6, 2024 · 5 comments
Assignees

Comments

@mrjstrand
Copy link

Just discovered that it currently seems impossible to use ZeroTeir with L4S which is relying on handling of ECN bits according to RFC6040 across tunnels. Without supporting RFC6040 congestion controllers and rate adaptors that is using L4S is not possible to use through ZeroTeir. I.e. TCP Prague, BBRv2, AppleQUIC, SCReAM etc... will not be possible to use any Congestion Experienced (CE) indication from L4S enabled intermediate nodes and needs to fall back to e.g. loss based legacy behavior. This will potentially break some time sensitive applications (like remote gaming and other remote controlled Use Cases) and will limit the usability of ZeroTeir.

  • What you expect to be happening.
    => ECN bits should be copied from inner to outer IP header when entering the tunnel and from outer to inner IP header when exiting the tunnel,

  • What is actually happening?
    => ECN bits are not copied either from inner to outer or from outer to inner IP header.

  • Any steps to reproduce the error.
    => from a ZeroTeir endpoint run: ping -Q 0x01
    => Check ECN code point on the outer IP header and inner IP header with tcpdump both on sender and receiver side
    tcpdump -vv -i <zeroTeir Interface>
    tcpdump -vv -i <outer Interface>
    => Inner ECN codepoint will be 1 both on sender and receiver side
    => outer ECN codepoint will be 0 (or potentially something else) both on sender and receiver side whatever value the outer header gets it is not copied to the inner IP header.

  • Any relevant console output or screenshots.
    => ZeroTeir Interface example
    01:10:32.923748 IP (tos 0x1,ECT(1), ttl 64, id 36966, offset 0, flags [DF], proto UDP (17), length 1228
    => Outer Interface example
    01:32:41.533323 IP (tos 0x0, ttl 254, id 9091, offset 0, flags [none], proto UDP (17), length 1294)

  • What operating system and ZeroTier version. Please try the latest ZeroTier release.
    => Linux 4.9.253-tegra#1 SMP PREEMPT Wed Sep 1 09:57:04 CST 2021 aarch64 aarch64 aarch64 GNU/Linux
    => $ zerotier-cli -v
    1.12.2
    => Installed with:
    curl -s https://install.zerotier.com | sudo bash

@joseph-henry
Copy link
Contributor

Thank you for this. I can think of a few situations where this was likely the culprit for some issues. We'll work on testing this idea.

@joseph-henry joseph-henry self-assigned this Mar 7, 2024
@laduke
Copy link
Contributor

laduke commented Mar 12, 2024

What is an easy way to test the effects of this?

@mrjstrand
Copy link
Author

mrjstrand commented Mar 12, 2024 via email

@laduke
Copy link
Contributor

laduke commented Mar 12, 2024

Thanks. I see, but what is a test closer a real usecase or application that works better if these bits are set correctly?

@mrjstrand
Copy link
Author

mrjstrand commented Mar 12, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants