> It's math. Doubt or opinion should not be involved.

It derives from the requirement to be checksum compatible. The checksum is 
computed complement to 1, and under complement to 1, 0 = 0xFFFF. There is no 
way to enable symmetric mapping if you allow both values. This is best shown on 
an example:

Assume internal prefix is 0::/48, external 1::/48. Observe that:

        In order to be checksum neutral, 0:0:0:0 must map to 1:0:0:FFFE
        In order to be checksum neutral, 0:0:0:FFFF must also map to 1:0:0:FFFE
        In order to be checksum neutral, 1:0:0:FFFE may map to either 0:0:0:0 
or 0:0:0:FFFF
        In order to be checksum neutral, 1:0:0:0 must map to 0:0:0:1
        In order to be checksum neutral, 1:0:0:FFFF must also map to 0:0:0:1
        In order to be checksum neutral, 0:0:0:1 may map to either 1:0:0:0 or 
1:0:0:FFFF Different prefixes will lead to different values, but the same 
pattern.

Other prefixes result in the same issue: two internal prefixes, subnet 0 and 
subnet FFFF, map to the same external subnet prefix. When that external prefix 
is mapped back, the translator has to pick either 0 or FFFF, cannot pick both. 
Similarly, external subnets 0 and FFFF map to the same internal prefix, so only 
one of the two values can be used.

-- Christian Huitema



_______________________________________________
nat66 mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/nat66

Reply via email to