A bit of a necro-post, but someone may be reading the archives.
IP fragmentation and TCP segmentation are similar concepts at different layers. TCP generally segments the data so that the underlying IP packets don't need to be fragmented. UDP relies on IP fragmentation.
IP "frag bombs" have been known about since the early days of TCP/IP. Once you know the reassembly algorithm, you can figure out a way to send irregular fragments to maximize the memory used without the target being able to reassemble a complete packet. If they implement a fragment count limit, you send the a bunch of almost-full-sized fragments. If they implement a fragment data count limit, you send a zillion one word fragments. If they implement a per-endpoint limit, you spread the traffic over multiple endpoints.
Early TCP/IP implementations sometimes created 'mini frag bombs' unintentionally. The 'obvious' way to fragment a packet is to send the first fragment of data, then the second. The matching implementation appends the fragments to a list and attempts reassembly when the 'end' fragment is received. But since only the final fragment has the 'end' marker that indicates the size, some implementations send the final fragment first so that a reassembly buffer can be allocated immediately. If you do this, it is natural to send fragments in decreasing order, which is worst-case for the first approach.