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

Re: Extension header vs destiantion option



On 26-apr-2005, at 13:10, Pekka Savola wrote:

Destination options can be placed before routing, fragment or AH/ ESP headers (see RFC2460 section 4.1), so this is not an issue.

But with the following caveat:

           note 1: for options to be processed by the first destination
                   that appears in the IPv6 Destination Address field
                   plus subsequent destinations listed in the Routing
                   header.

The issue about different destination options inside the destionation options header may be worth considering, though. I think there may be other issues stemming over from MIPv6 security design as well. (Like, does the shim6 stuff need to be used as IPsec selectors, which might be challenging for dest options.)

I think the main reason to make it a destination option rather than a header of its own is that a single destination option header can hold more than one destination option so you save some space if the options are small. However, there is also a penalty because of the additional layering, so the savings will only be in the order of a couple of bytes IF there is another destination option.


I'm starting to think along what you said in a previous message, where an option could be used when it's necessary, but it's left out when it can be optimized away. Since potentially, this is in almost all cases (i.e., the only time this can't be done is when using different ULIDs with overlapping locator sets towards the same host with an overlapping flow label and a higher-layer protocol that doesn't support port numbers or an SA.), there shouldn't be any long- term adverse effects of having an option but ONLY if the receiver can force the sender to omit the option when the receiver doesn't need it. This would allow for simple implementations at first and more advanced ones (after some real-world experience) later.

The identifier in such an option would ideally be a set of indexes pointing to:

- the shim6 state (= the association between the two hosts)
- the source ULID
- the destination ULID

Something like this could easily be encoded in 16+4+4 to 32+8+8 bits.

The destination host would tell the source host which shim6 state index to use (this value would remain constant as long as the association persists) and an ordered list of locators would be exchanged so they can be referenced by an index from there on.

Then there would have to be an "applicability statement" from the destination to the source, which can include a set of options like:

- never use the option (= locators for different ULIDs don't overlap)
- don't use the option for TCP and UDP (= I'll demux on port numbers)
- don't use the option for IPsec (= I'll demux on SA)
- don't use the option when flow label is known to be unique enough (= I'll demux on flow label)


If none of these is selected all packets where the shim has replaced addresses will have the option. Support for the first three would be mandatory, so including the option anyway would lead to an error. The last depends on how smart the source is about assigning flow labels so setting the option when the flow labels are in fact unique wouldn't lead to an error.

I think it makes sense to have the shim negotiation, demux and reachability test all rolled up into a shim extension header. Having all these as destination options would use up a lot of destination option number space and make identifying the shim harder, along with potential issues with ordering and coexistance with other destination options.

The advantage of having a header rather than use UDP (TCP isn't suitable) is that the header can either exist as its own packet or live between the IP header and payload. In IPv4, UDP would have a big advantage that it can traverse NAT and firewalls, but to the chagrin of some we're assuming no NAT in IPv6 and bang-for-your-buck ratio of working around firewalls would quickly deteriorate to below zero in the long term, and is arguably the wrong thing to do anyway.

Ok, going off the deep end now:

With a demux option present and having site-wide agreement on at least part of the list of source address prefixes, it would be easy to add a field that indicates that routers can safely rewrite source addresses.

Even deeper: if we apply some header compression on the subsequent headers we may even be able to compress the TCP/UDP/RTP header away for most packets , so rather than making the packet 8 bytes longer, we're making it 12 bytes shorter (for TCP)! Now we're getting somewhere. :-)