SORT BY:

LIST ORDER
THREAD
AUTHOR
SUBJECT


SEARCH

IPS HOME


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

    RE: Comments on the Draft (sync loss)



    David, 
    
    There is precedent for this type of framing recovery:
    
    From rfc1831, RPC,  - August 1995
    10. RECORD MARKING STANDARD
    
       When RPC messages are passed on top of a byte stream transport
       protocol (like TCP), it is necessary to delimit one message from
       another in order to detect and possibly recover from protocol errors.
       This is called record marking (RM).  One RPC message fits into one RM
       record.
    
       A record is composed of one or more record fragments.  A record
       fragment is a four-byte header followed by 0 to (2**31) - 1 bytes of
       fragment data.  The bytes encode an unsigned binary number; as with
       XDR integers, the byte order is from highest to lowest.  The number
       encodes two values -- a boolean which indicates whether the fragment
       is the last fragment of the record (bit value 1 implies the fragment
       is the last fragment) and a 31-bit unsigned binary value which is the
       length in bytes of the fragment's data.  The boolean value is the
       highest-order bit of the header; the length is the 31 low-order bits.
       (Note that this record specification is NOT in XDR standard form!)
    
    -Howard
    
    -----Original Message-----
    From: David Robinson [mailto:David.Robinson@EBay.Sun.COM]
    Sent: Tuesday, September 12, 2000 7:29 PM
    To: ips@ece.cmu.edu
    Subject: Re: Comments on the Draft (sync loss)
    
    
    > Section: General
    > There's no framing of the headers and data on the buffers from TCP. If
    > anything goes wrong with the parsing, its difficult if not impossible to
    > recover. It only takes one length field to be 'off'. If this happens the
    > target will probably generate lots of "Opcode not understood" messages.
    We
    > suggest one of two methods: 1) after seeing consecutive "Opcode not
    > understood" messages it should shut down the connection if this doesn't
    > solve the problem then reset the target, or 2)  When the target finds that
    > it is out of sync with the initiator ( on receipt of an "Opcode not
    > understood"), it will send a new iSCSI "Out of Sync" command to the
    > initiator.  The initiator will assume at the reception of the "Out of
    Sync"
    > command that all unacknowledged outstanding requests have been dropped.
    The
    > initiator then sends the next command with the OOB (out of band) bit set,
    > and with the OOB offset pointing to the beginning of the iSCSI header.
    The
    > target, after sending the "Out of Sync" command, should ignore every thing
    > on that connection and wait for the OOB data to re-sync again.  This
    > exchange could also work if sent from the initiator to the target.
    
    The loss of sync is an extremely rare event, either the sender sent a
    request shorter than it indicated, the TCP stack caused corruption,
    or the receiver misinterpreted the request.  All are severe bugs
    somewhere, in practice with NFS over TCP which has no framing, sync errors
    are so rare that it is ignored.  Instead of going through a complex process
    of setting OOB to resync, then determine which messages need to
    be resent, why not instead simply drop the connection and do the
    common lost connection recovery.  The symptoms and state that needs
    to be recovered is virtually identical.
    
    Lets try to stay simple and not overly complicate the recovery process.
    
    	-David
    	
    
    


Home

Last updated: Tue Sep 04 01:07:17 2001
6315 messages in chronological order