]> git.meshlink.io Git - meshlink/commit
Improved PMTU probe algorithm.
authorGuus Sliepen <guus@meshlink.io>
Sun, 26 Apr 2020 12:48:18 +0000 (14:48 +0200)
committerGuus Sliepen <guus@meshlink.io>
Fri, 8 Oct 2021 18:57:24 +0000 (20:57 +0200)
commitbc2e55e940e45748a49f1a7eb44b156917fca469
tree3bf21672771e0fe016991de2e3e68c854b2ec85f
parenta582852c2b7e5a0c0d438d625a0445b4a74f607a
Improved PMTU probe algorithm.

This changes the PMTU probing algorithm to:

- Send frequent (10 second interval) small UDP packets (~60 bytes) to
  probe whether UDP is possible at all, and to keep NAT mappings alive.
- Initial PMTU probing sends 1 packet every 0.333 seconds, starting with
  the interface MTU (which is assumed to be the most likely PMTU), then
  doing a bisection with up to 20 probes if that didn't work.
- After the PMTU has been fixed, it sends one packet of size PMTU and one
  of PMTU+1, to check whether there are changes in the PMTU.

Furthermore, probes are now sent on-demand where possible. Small probes are
always sent every 10 second between nodes that have a meta-connection, since
they need to keep their NAT mappings alive to be able to assist with UDP
hole punching. But large probes, and small probes between nodes that don't
share a meta-connection, are only sent if there is actual channel traffic
between the nodes.

A final optimization is that probe replies are now short (~60 bytes)
packets that encode the length of the probe request.

Before, around 9000 bytes/minute would be used for probes, with this commit
only 2280 bytes/minute will be used in case there is channel traffic,
otherwise only 720 bytes/minute will be used.
12 files changed:
src/Makefile.am
src/graph.c
src/meshlink.c
src/net.c
src/net.h
src/net_packet.c
src/node.c
src/node.h
src/pmtu.c [new file with mode: 0644]
src/pmtu.h [new file with mode: 0644]
src/protocol_key.c
test/channels-udp.c