SORT BY:

LIST ORDER
THREAD
AUTHOR
SUBJECT


SEARCH

IPS HOME


    [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

    RE: ISCSI: Urgent Flag requirement violates TCP.



    Some form of Matt's longer explanation (see below) about
    the effects of coalescence needs to be substituted in
    the draft for the sentence:
    
      "The result is the TCP urgent pointer will point to the first byte of
    	the iSCSI message in the TCP segment."
    
    because it's very easy to construct cases in which the
    TCP urgent pointer points out of the segment, making the
    above sentence false.  In particular, someone constructing
    a hardware framer that looks for iSCSI CDBs should not be
    mislead into relying on the urgent pointer to identify
    a useful (or even worse, the first useful) boundary
    in every inbound segment.
    
    Words are also needed to make it absolutely clear that
    TCP is not permitted to "deliver" out of order to the
    iSCSI layer - as Julian explained, the only point of
    this urgent mechanism is to help out framing logic that's
    processing the inbound stream, especially if SACK is being
    used. Among the disasters that this prevents is iSCSI
    completing and sending a response to a command when
    the delivery of that command's CDB to the target has
    not been ACKed by TCP (e.g., a TCP not using SACK).
    
    Let me expound on this a bit more because it's come up
    in the past.  TCP is an ordered delivery mechanism;
    data must be "delivered" to the target in order.  In
    contrast, SCSI is mostly an unordered mechanism - unless
    order is explicitly specified, commands can complete out
    of order, and often do on disks and disk arrays.  I
    put "delivered" in quotes because the only way to know
    that a SCSI command has been "delivered" is to observe
    that execution of the command has started (e.g., the
    disaster in the previous paragraph where execution completed
    on data that was never ACKed by TCP is clear evidence that
    someone is not playing by the rules).  So, it's ok
    to parse/frame/etc. the data to set it up for execution
    of the SCSI command, but DON'T DO ANYTHING until TCP
    has "delivered" the command and all the data prior to 
    it by sending or being prepared to send the appropriate
    ACKs.
    
    Meanwhile, I should note that a TCP stack may respond to having
    urgent data presented to it by sending immediately (i.e., and
    not waiting for the rest of the CDB).  For alignment reasons,
    using 1 byte of urgent data may not be the best choice.
    
    --David
    
    ---------------------------------------------------
    David L. Black, Senior Technologist
    EMC Corporation, 42 South St., Hopkinton, MA  01748
    +1 (508) 435-1000 x75140     FAX: +1 (508) 497-8500
    black_david@emc.com       Mobile: +1 (978) 394-7754
    ---------------------------------------------------
    
    
    > -----Original Message-----
    > From:	Matt Wakeley [SMTP:matt_wakeley@agilent.com]
    > Sent:	Tuesday, November 07, 2000 4:44 PM
    > To:	Douglas Otis
    > Cc:	julian_satran@il.ibm.com; ips@ece.cmu.edu
    > Subject:	Re: ISCSI: Urgent Flag requirement violates TCP.
    > 
    > Douglas Otis wrote:
    > 
    > > ISCSI: Urgent Flag requirement violates TCP.
    > 
    > No it doesn't.
    > 
    > > Julian,
    > >
    > > The result indicated within the iSCSI draft on page 14 will require TCP
    > to
    > > be modified for this statement to be true.  By requiring every message
    > to be
    > > marked, a continued transparent update of the pointer will obscure the
    > > urgent pointer by continued coalescence.  This obscuring coalescence
    > will
    > > occur at both the sender and receiver.  Only a state between normal and
    > > urgent is signaled at the receiver and not the actual pointer.  Unless
    > there
    > > is an intent to modify TCP, this scheme offers no benefit even if
    > offending
    > > portions of the urgent proposal is removed.
    > 
    > We don't care if sometimes coalescing happens.  The point is, that
    > somewhere
    > down the stream, an urgent pointer will point to the beginning of a new
    > iSCSI
    > message and messages after this point can be processed.  All messages
    > between
    > the point of the dropped segment and this point will of course have to be
    > retransmitted.
    > 
    > 
    > >    The iSCSI protocol uses the urgent bit in the TCP header to delineate
    > >    iSCSI messages. The first byte of every iSCSI message MUST be marked
    > >    "urgent".  The result is the TCP urgent pointer will point to the
    > >    first byte of the iSCSI message in the TCP segment.
    > >
    > > This pointer will be skewed by the size of the send buffer (beyond the
    > TCP
    > > segment) and prevent normal use unless again TCP is modified to comply
    > with
    > > stated expectations.  I would advise complete removal of this Urgent
    > flag
    > > requirement if to remain within the WG charter as only a modified TCP
    > could
    > > use this feature in the intended manner.  This intended manner is
    > plainly
    > > spelled out with concerns about BSD vs. RFC 1122 compliance. There is no
    > > benefit from an occasional toggle between normal and urgent mode.  If
    > you
    > > wish to use a datagram or record based protocol, you are advised to
    > review
    > > RFC 2960.
    > 
    > The intended manner that is to be implemented is this:
    > 
    > 1. iSCSI sends the first byte of the iSCSI message to TCP, with the byte
    > marked
    > "urgent".  You can do this today using any off the shelf TCP stack,
    > including MS
    > windows.
    > 2. iSCSI sends the rest of the bytes of the iSCSI message to TCP with
    > normal
    > delivery.
    > 
    > If TCP coalesces, fine.  But eventually, a TCP segment will be sent that
    > will
    > contain a byte referenced by the urgent pointer.  At this point, the
    > remote side
    > (and any LAN analyzers on the network) will be able to "sync up" on iSCSI
    > messages.
    > 
    > Remember, this "urgent pointer" stuff is *only* to be used in the cases
    > where a
    > TCP segment is dropped, not for normal delivery.
    > 
    > So, there is *no* violation of any RFC or WG charter.
    > 
    > >
    > >
    > > Doug
    > 
    > -Matt Wakeley
    > Agilent Technologies
    


Home

Last updated: Tue Sep 04 01:06:30 2001
6315 messages in chronological order