[Twisted-Python] Packet Fragmentation

glyph at divmod.com glyph at divmod.com
Wed Oct 8 19:13:18 EDT 2008


On 10:51 pm, nimag at rogers.com wrote:
>I was wondering if there's any way in Twisted/Python to handle packet 
>fragmentation.  Can I access the last fragment flag in the TCP packet 
>somehow? Or is there a total packet size sent with the packet 
>automatically?
>If not, what would be the best way to solve this?

What you're dealing with here is not packet fragmentation.  TCP packet 
fragmentation is a very specific phenomenon that occurs at a lower level 
than Twisted (and your application).

When you send a large message over a TCP stream, it can get broken up 
into multiple segments.  That's not the same as an individual packet 
getting fragmented.  There's no way to re-assemble the message to 
discover the original boundaries of the "write" call that you used to 
emit it.

In other words, your data stream needs to have message boundaries in it. 
TCP, at the application level, is a stream of octets, *not* a sequence 
of packets.

There are numerous examples of this in Twisted; for example, 
twisted.protocols.basic includes NetstringReceiver, LineReceiver and 
(various subclasses of) IntNStringReceiver, each of which is a different 
strategy for breaking up a TCP stream into a discrete sequence of 
messages.




More information about the Twisted-Python mailing list