2.2.3.1 Fragment Payload Packet

The Fragment payload is an ISAKMP payload, as specified in [RFC2408] section 3.1. The payload type value for a Fragment payload is 0x84 from the private payload type range, as specified in [RFC2408] section 3.1. A Fragment payload MUST be preceded by an ISAKMP header that has this payload type.

The following illustration describes the Fragment Payload packet.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

Next_Payload

RESERVED

Payload_Length

Fragment_ID

Fragment_Number

Flags

Fragment_Data (variable)

...

Next_Payload (1 byte): Identifier for the payload type, which MUST specify the next payload in the message. For a Fragment payload, this field MUST be set to 0.

RESERVED (1 byte): This field MUST be set to zero. The responder (1) MUST ignore this field on receipt. This behavior is identical to IKE.

Payload_Length (2 bytes): This field MUST be the length, in bytes, of the payload, including the generic payload header. This is identical to IKE.

Fragment_ID (2 bytes): This field is 2 bytes and contains the fragment ID. It MUST specify the same value for every fragment that is generated from a particular IKE message.

Fragment_Number (1 byte): This field MUST indicate the order in which the fragments are sent. The first fragment MUST have a fragment number of 1, and each subsequent fragment MUST have a fragment number that is one greater than that of the previous fragment. Because the maximum size of an IKE message is limited to 64 KB by UDP and fragments are aligned on the minimum MTU for IPv4 and IPv6, the fragment number cannot wrap.

Flags (1 byte): The Flags field MUST have the following value.

Value

Meaning

LAST_FRAGMENT

0x01

This flag indicates the last fragment in the message.

All other bits of the Flags field MUST be set to zero on the initiator and ignored on the responder (1). For more details on flag semantics, see section 3.1.

Fragment_Data (variable): This field MUST contain the fragment data. The size of the Fragment_Data field MUST be computed by subtracting the size of the Fragment payload header (8 bytes) from the value of the Payload_Length field.