I have been working on my TCP/IP stack for DOS, adding IP fragmentation
support. There are not too many more features that I want to add to
make it 'complete' before I open source the code and IP fragment support
was a big one.
I am having a terrible time testing it though. It seems that IP
fragments out in the wild are pretty rare. I tried connecting to a slew
of remote FTP sites hoping to find one that was behind a really bad
network, and thus would have fragments coming from it. No joy.
It seems that there are a lot of tricks out there to prevent fragments
from being created, especially when using TCP. The
only way I can test
the code is to send myself oversized UDP packets. If it works
for UDP
then it should work for TCP too, but I'd really like to test the TCP
path explicitly. Combine the tricks with modern broadband and getting
fragments is really difficult.
Even on the home network I am having a hard time getting fragments. I
put a Linux box between the DOS PC and a Windows machine, and set one of
the Ethernet MTUs to 576. Well, that didn't force fragments because the
Windows box is too clever. I could start turning everything off in the
registry, but I really don't want to get that involved.
Off the top of my head I think I am going to have to get another Linux
box and dumb that down, if it is possible. Dumbing Linux down to turn
off the features and then restoring it to a good state is probably
safer/easier than doing it with Windows.
Does anybody have a good technique for setting up a simple network that
will result in IP fragments of TCP?
On a related note, is this even worth it? I don't know of anything that
needs to send fragments except for NFS over UDP. There might be other
applications that send big packets over UDP but those would be the only
class of applications that absolutely require fragment support. With
TCP it is nice, but a user should be able to get around any problem by
setting the local MTU to 576.
Mike