Fragment Merge Decision Fragment F arrives Fragment offset O (in bytes) Fragment Length L (excluding header) Find the appropriate queue If none create one -- nothing to merge, put F in new queue Scan queue in order (increasing fragment offsets) For each packet Q on the queue in order if O(F) < O(Q) && O(F) + L(F) >= O(Q) F merges into Q (details later) done if O(F) < O(Q) F inserted in queue before Q done if O(Q) + L(Q) >= O(F) F merges into Q (details later) use merged packet as F continue if reach end of queue, append F