将QQ群里面wissen兄发的分析贴进来:
这个是从ipv4 to ipv6的流程,然后反向再ipv6 to ipv4的一个流程
1. considering the case of IPv4(src domain)->IPv6->IPv4(dst domain), the typical case of double translation. throughout the mechanisms described in section 4, 5, and 6, we may have the following cases:
#1 IPv4-src: DF=1, MF=0, offset=0
IPv6: no fragment header
IPv4-dst: DF=1 if packet_size > 1280; DF=0 if packet_size <= 1280; MF=0.
#2 IPv4-src: DF=0, payload > 1232 bytes (*)
IPv6: fragment header (with default setting of domain IPv6 minimum MTU = 1280 bytes; for non-default cases, only values at * need to be changed)
IPv4-dst: DF=0, MF and offset copied from fragment header
#3 IPv4-src: DF=0, payload <= 1232 bytes (*)
two sub-cases:
#3.1 translator configured not to include the fragment header for the non-fragmented IPv6 packets (conforming to "The translator MAY provide a configuration function that allows the translator not to include the Fragment Header for the non-fragmented IPv6 packets.")
IPv6: no fragment header, packet_size <= 1280
IPv4-dst: DF=0 according to Sec 6; MF=0
#3.2 translator configured to include the fragment header even for the non-fragmented IPv6 packets (conforming to "When the IPv4 sender does not set the DF bit, the translator SHOULD always include an IPv6 Fragment Header to indicate that the sender allows fragmentation.")
IPv6: fragment header, MF=0
IPv4-dst: DF=0; MF=0 copied from fragment header
#4 IPv4-src: DF=1, MF=1 (the so-called corner case, not covered by RFC6145 as it is stated in Sec 4.1: "If the DF bit is set and the packet is not a fragment (i.e., the More Fragments (MF) flag is not set and the Fragment Offset is equal to zero)"
if this happens, translations really drops the offset information so that the reassembly is disabled. |