Re: TCP end-to-end Semantics

From: Anil Agarwal (agarwal@ntd.comsat.com)
Date: Tue Jan 09 2001 - 10:51:47 EST

  • Next message: Craig Partridge: "Re: TCP end-to-end Semantics"

    All,

    Here is another way to look at whether "TCP-spoofing" causes violation
    of end-to-end TCP semantics. This is similar to Hussein's analysis.

    1. In a purely, theoretical sense, the answer is YES, as stated by many
       authors. The spoofer acks packets to the sender that have not been
       delivered to the destination host.
       
    2. On a more practical plane, things are a little different.

       Most well-written TCP applications do not assume that if the sender
       TCP has accepted user data, then the data will get delivered to the
       receiver with absolute guarantee. To verify end-to-end data delivery,
       such applications use one of several methods -

       1. Close the socket, with the LINGER option enabled, and wait for TCP
          to finish its FIN echange and to return success/failure indication
          to the user.

       2. Do an application-to-application message exchange to verify whether
          that all data has been received. This may also be done at intermediate
          points in the session.

       3. Inquire of TCP as to how much of its data has been acknowledged by
          the peer and use that info. to verify whether data has been delivered to
          the receiver.
          It is theoretically possible for applications to inquire of TCP as to
          how much of its data has been acknowledged by the peer. The TCP RFC
          does NOT mention this as one of the interface primitives and I don't
          think there are any standard socket libraries that allow this.

       4. Simply close the connection, with the assumption that the data
          will be successfully delivered with a fairly high probability.

    Let us assume that the TCP spoofer uses a reliable protocol to deliver
    packets to the final destination. Let us also assume that the TCP spoofer
    does not spoof the FIN exchange, i.e., the the spoofer ensures
    that the FIN exchange finishes successfully only if all sent data
    is successfully delivered to and acknowledged by both ends.

     With such a spoofer, one can say that applications that use methods 1 and 2
     mentioned above, will not see any difference in "semantics" or end-results,
     when operating with an intermediate spoofer.

     Applications that use method 3 will of course be negatively affected. One can
     presume that there are not many such applications.

     Applications that use method 4 will not experience any significant change
     in probability of success or failure, assuming that the spoofer itself
     has a low probability of failure. Network or destination host failures
     will affect the probability of failure by the same amount, whether spoofing
     is used or not.

    In my humble opinion, TCP spoofing is not as bad as it sometimes sounds!

    As an aside, there are many other things that a good TCP-spoofer has to do,
    such as faithfully transfer the values of the some of the TCP header fields
    such as PUSH, URGENT, checksum and TCP options. We have developed
    and sell a TCP-spoofer product for use over satellite links.

    Regards,
    Anil Agarwal
    LMGT
    22300 Comsat Dr
    Clarksburg, MD 20871
    (301)428-4655
    agarwal@ntd.comsat.com



    This archive was generated by hypermail 2b29 : Tue Jan 09 2001 - 11:34:22 EST