Perhaps un-ack isn't the right way to say it. Fail to ack would be better. Say alice makes a connection to bob. Alice sends a request for a lot of data. Bob sends this dat as packets 1,2,3,4,5,6,7,8,and 9 (based on a window size that says that 9 packets worth of max-segment-size data is all he can send un-ack'd). Alice sends a selective ack for packet 9, but not for packets 1-8. I believe at this point what bob should do is send one more packet (for the packet that was ack'd) so that there are a total of 9 packets "in-flight", nicely filling the tcp window. packet 9 can be removed from the buffer, and packet 10 can be added to it. What Bob *might* do (and I'm not sure at all on this point) is to add packet 10 to its buffer, but not remove packet 9 until 1-8 have been ack'd, so that the buffer will contain a contiguous stream of packets from the first one that hasn't been ack'd to the last one sent. If this is the case, then Alice can cause Bob to allocate a buffer of twice the size of the tcp window. The maximum size of the tcp window (with window scaling) is 1,073,725,440 bytes. Multiply by 2 if sack works as I've described above, and one connection can take up approximately 2GB of buffer. How many 2BG buffers can your server allocate before you start seeing mallocfail messages?
In contrast, with no sack and no window scaling, the maximum tcp window (and thus maximum buffer size allocated) is 65535 bytes. How many 64K buffers can your server allocate before it runs out of memory? Many more. I could be wrong about how sack works, but maybe not. Hope this helps, -Joe > -----Original Message----- > From: Maciej Soltysiak [mailto:[EMAIL PROTECTED]] > Sent: Monday, March 25, 2002 10:51 AM > To: Joe Patterson > Cc: [EMAIL PROTECTED] > Subject: RE: tcp/ip parameters question. > > > Thank you very much for your exhausting answer. > > Only one thing is strange to me. I was not aware, that you could ACK some > data, and somehow un-ACK the data in the IP Options. > > Would not it be safer if one could only ACK data using concatenation, not > substraction ? > > Like the only valid way would be to: > ACK what an ACK packet normally ACKs and ACK some more data using SACK. > > Oh my, quite a poem i wrote :) > > Best Regards, > Maciej Soltysiak > > >
