[e2e] TCP Framing

Mike Fisk mfisk at lanl.gov
Tue Mar 27 14:55:36 PST 2001


Once you know where the record boundary is, you can find an upper layer
header and use whatever upper-layer logic is neccessary to place (DMA) the
block.  What you don't want is to receive a packet that lacks a header
describing where to put it.  You can add an optional RDMA header to TCP or
IP or you can add it to the TCP payload and make sure that there's one per
packet.

What seems problematic to me is assuming a 1-1 mapping between upper-layer
blocks and TCP segments.  To me, this suggests that when building TCP
segments you want to insert a header into the byte stream right before
each block and at the beginning of each segment.  But this header can be
generated at the last minute by the TCP output routines.  There doesn't
seem to be a need to require that segment sizes match upper-layer protocol
size.

And if you don't want to use something like byte-stuffing to find the
header, you can place the header(s) at the beginning of each segment.  
Assuming that DF is set, and middleboxes are well-behaved (is that an
oxymoron?), that segment should be preserved end-to-end.

On Mon, 26 Mar 2001, Jonathan Stone wrote:

> I suspect its because they want not just to preserve record
> boundaries, but to align "records" onto suitable memory boundaries.
> 
> Think of scsi-over-tcp, with the TCP stream carrying a mix of
> "scsi CCBs" and "disk blocks."
> 
> Then again, i could be completey wrong...

As could I.  In particular, the folks designing NICs to do this may have
some constraints that I'm not aware of.

-- 
Mike Fisk, RADIANT Team, Network Engineering Group, Los Alamos National Lab
See http://home.lanl.gov/mfisk/ for contact information







More information about the end2end-interest mailing list