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

Re: SAs that carry fragments Was: Re: Some IKEv2 issues



At 14:55 +0200 2/20/04, Tero Kivinen wrote:
Stephen Kent writes:
 In 2401, and so far in 2401bis, we have distinguished between ANY and
 OPAQUE. if we decide to continue to do that, then at a minimum, we
 would not consider a fragment with no port fields to match an SA that
 allowed traffic with ANY as the value for port fields.

 Also, If an IPsec implementation has two SA between the same
 source/dest address pairs, and with the same protocol value(s), but
 distinguished traffic based on specific (vs. ANY) port fields, then a
 non-initial fragment cannot be mapped to either SA unambiguously. An

Actually it can, but it requires little bit work. For example our code does the following (I do know that this is much more than what is required by the rfc2401):

	1) If it receives unknown non-first fragment, it will put it
           in the separate queue (queue length and number bytes
           consumed is limited).
	2) When it receives the first-fragment it will find the SA
           suitable for it, and send packet forward.
	3) Then it will search through the non-first fragments queue
           and find other fragments for the packet, and send those
           forward (verifying in the process that the fragments do not
           overwrite the fields used in selecting the SA).
	4) It will create known-fragment entry to database, marking
           that if we see other fragments to this packet, they can be
           sent forward to this SA if they start after this offset.
           This entry will timeout after some time.

this sounds like a reasonable mechanism, though perhaps not not a very high speed context, since receipt of an initial fragment could trigger transmission of delayed non-initial fragments, which implies possible further disruption to transmission. but, under the right circumstances I can certainly see how this could work.



This will allow selecting proper SA for each fragment (non-first or first). Of course the other end needs to do the same processing when packets are processed to verify the selectors, in this case it is easier, as the other end has already waited for the first-fragment, so it will most likely come first (not necessary, the order might have changed during transit).

right. so there is some reassembly-like processing at the receiver, e.g., per SA state to remember initial fragment data plus queuing of non-initial fragments to accommodate out or order delivery, etc.


So it is not impossible, it simply requires some work. We do not need
to do full reassembly, we simply need to mark that fragment matching
this source/destination/protocol/id should be sent/received from this
SA.

you left put ports here, the crux of the problem, but I assume that was just a typo, right?


> analogous problem arises if there is just one, extant SA that matches
 the addresses and protocol, and we are forced to search the SPD to
 see if another SA might be appropriate. These observations motivate
 use of a separate SA to carry fragments, right?

Or to do the fragment handling properly, i.e. put them to the same SA which haves the non-first fragments.

What concerns me is that the processing you describe could be a significant burden, maybe even infeasible, for very high speed operation. We have focused more on such operation in this round of revisions, e.g., support for 64-bit sequence numbers and explicit discussion of caches. Thus I would prefer a spec that works well in all cases.


Steve