Stateless Load Balancing of New Connections #43
Description
I've been looking at load balancing more lately and specifically trying to figure out an algorithm to use to statelessly load balance new connections that doesn't expose any type of attack surface.
The closest thing I've come up with is something like this:
int serverId;
if (packet.IsInitial()) {
serverId = hash(key, packet.destCid)
} else {
serverId = packet.destCid.ExtractServerId()
}
ExtractServerId
will rely on whatever encoding scheme was chosen and get the server ID from that.
My problem with the above pseudocode is post initial Initial packets. The first Initial packet will use the client chosen CID, but after that it uses the server CID. That change in CID will break the above logic. Because of this, I've actually been considering opening a transport issue recommending all Initial packets use the client CID.
Is there another way to achieve this goal? And how much of this kind of stuff should be included in the QUIC-LB spec?
P.S. How would unknown (experimental?) version numbers factor into the above pseudocode? Just go to the else
?
Activity