That decision alone would’ve made fragments so much simpler on network devices and appliances, and much less likely for them to get dropped.
That decision alone would’ve made fragments so much simpler on network devices and appliances, and much less likely for them to get dropped.
(None of this would fix the real problem with fragmentation, which is that you can't efficiently segment out a large frame without having some kind of reliability layer).
Wikipedia lists over 100 assigned IP protocol numbers [1], and while it would break existing firewalls, adding a new protocol would certainly require less work than the transition from IPv4 to IPv6. But UDP is already simple enough that there's very little benefit in not just building on that.
[1] https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers
Do most routers really do that, or just the ones which are also trying to act as a firewall?
For packets that don't want to use it, this is just 1 byte of overhead to set the size to 0.
Keep in mind, most routers don't even bother supporting existing fragmentation because it's costly to implement in high speed hardware. So while you could theoretically have that dynamic next protocol header length value field it'd only be complicating something hardware makers already think is too complicated to be worth it. Making things unappealing complex is one of the common results of layering violations.
You don't even really need that, and as proof, take ICMP ... which was designed as part of IP ... actually does do this. Routers are already required to copy and include the header of the packet that triggered an ICMP error.