[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

state loss detection



Hi,

It just occurred to me that the state loss problem may not be as intractable as we thought.

The problem is that when (for instance) a host taking part in the shim6 protocol reboots, and it sees shimmed packets when it gets back on its feet again, it gets confused. If the packets that are rewritten by the shim only have their addresses rewritten, the checksum on those packets will be invalid, the packet will be dropped and the source host doesn't get to hear about it so the failure won't be detected until there is a timeout.

However, as I wrote in a draft a while ago, it may be a good idea to rewrite the checksum too, in order to avoid confusing firewalls and the like unnecessarily, and to maintain compatibility with NICs that do checksum offloading. (Although I'm not familiar with ones that do this for IPv6.)

With the checksum rewritten as well, the packet will flow through the shim layer without any action as there is no state, and the upper layer will generate an error, such as a TCP RST.

In and of itself this doesn't provide the host that still has state with the information it needs to recover from the remote state loss (it could have been a legitimate RST that was shimmed), but it wouldn't be huge imposition to send a shim state refresh when this happens.

For TCP and UDP where the host with the state loss used an ephemeral port this should work well. I'm not sure what happens when an UDP server does when it sees packets for an unknown "session". For non- UDP/TCP protocols the transport protocol would probably have to trigger a shim state refresh.