Prerequisite – Internet Protocol version 6 (IPv6) Header
In IPv4 fragmentation is done whenever required, at destination or at routers whereas in IPv6 only source is supposed to do fragmentation but not routers. This can only be done when source knows path Maximum Transmission Unit (MTU). In Ipv6 “do not fragment” bit is always 1 where case is not same in IPv4 and ‘More fragment’ bit is only flag in fragmentation header which is of one bit. Two bits are reserved for future use as you can see in picture below.
Internet Protocol Version 6 Fragmentation Header –
- Next Header –
The Next Header is an 8-bit field that identifies type of header present after Fragmentation header.
- Reserved –
It is an 8 bit field which is completely zero as of now. In future, we might find something useful to fill here. Also again an extra 2-bit field is reserved for later purposes.
- Fragment Offset –
It is exactly same as than in IPv4 which is of size 13 bits. Just as we did to scale up fragment offset in IPv4 we will do same in IPv6.
- More Fragment (M) –
More fragment bit in here is denoted by “M”. It’s a one-bit field that tells us if there are more fragments coming after it. If more fragment bit is zero then it means its last fragment and if 1 then it could be any packet except being last one.
- Identification Number –
The identification number field which is same for all fragments of a particular packet is double in size as that of in IPv4. In packet identifier field is of 32 bits and In IPv4 it was of 16 bits.
The IPv6 sender may perform fragmentation at source because an IPv6 router cannot perform a fragmentation, so if packet is too large for next hop, router will generate an ICMP packet to let the source know that packet is too large in size.
The fragmentation header tries to minimize use of fragmentation as much as possible by supporting minimum packet size of 1280 Bytes. As shown in above picture how fragmentation is taken place according to MTU that sender knows.
IPv6 and other Extension headers are unfragmentable part because every fragment has to go through nodes or routers and at every router, information stored in these extensions headers are required. That is why IPv6 packet is divided into two parts. One is unfragmentable part and other is fragmentable part. The unfragmentable part does not encounter any modification in between and another part being fragmentable is divided into many small fragments as fragment 1, fragment 2, and so on.
After small fragments being created fragmentation header and particular fragment ( as fragment 1 ) is connected to unfragmentable part and is send to destination. Payload length may change after fragmentation and after fragmentation header is added corresponding fields like next header, identification number, fragment offset, and more fragment bits are filled appropriately.