[comp.dcom.modems] PPP spoofing

bob@MorningStar.Com (Bob Sutterfield) (12/27/90)

In article <6547.277047AD@zswamp.fidonet.org> root@zswamp.fidonet.org (Geoffrey Welsh) writes:
   Bob Sutterfield (bob@MorningStar.Com ) wrote:
      UUCP spoofing works because uucico's ACKing and retransmission
      is at the granularity level of a complete file.

   UUCP-g ACKs (or request retransmission) of each and every packet on
   a real-time basis.

Correct.  But I was talking about uucico (the program that typically
implements UUCP-g and can be considered the protocol layer "above"
UUCP-g), which knows only about complete files.

   Surely you don't believe that a burst of line noise could cause the
   retransmission of a complete newsbatch?!?

It often does, which is why news is typically batched in a number of
100 Kbyte files, rather than in one nightly 5 Mbyte blortful.  With
cheap modems and dirty lines, UUCP-g often gives up on a file transfer
and a connection, telling the layer above (uucico, in typical
implementations) that it was unsuccessful.  It's uucico's job to
arrange for retransmission by whatever means, usually as specified in
L.sys/Systems.  And in typical implementations, UUCP-g doesn't tell
uucico how far it got in the transfer, only that the connection failed
before the entire file was shipped.  So uucico has no choice but to
start again at the beginning of the failed transfer.  Better to have a
large number of medium-sized files so that uucico's file-level
retransmission synch points occur more frequently.

      The "g" protocol level doesn't manage file retransmission or
      restarts in mid-file.  Kermit spoofing is similar.

   This has no bearing whatsoever on spoofing.

In-modem protocol spoofing works because it operates at a low enough
level in the protocol stack that the modem needn't accept
responsibility for the entire file, nor even for that segment that the
sender thinks has already arrived at the destination.  UUCP-g can
safely abandon a link because it knows that uucico above it will
arrange for retransmission.

      But TCP streams think that, once a packet has been ACKed, it has
      been delivered to the receiving end.  Retransmission and
      restarts happen at a packet granularity.

   This is also true of UUCP-g.

UUCP-g retransmissions happen at a packet granularity.  But UUCP-g has
no provision for retransmission outside its sliding window (often of
size 1), which effectively describes a restart.  That's uucico's job,
in typical implementations.  And uucico restarts happen at a file
granularity.

An application based on TCP assumes a reliable, sequenced data stream.
In fact, IP may switch the stream between several routes as
intermediate links break.  A TCP application assumes that any portion
of a transmission that has been ACKed has reached its destination, and
will restart as necessary with the next octet in the stream, until
reaching some timeout value.  It will then typically report the
failure to the user for a user-level restart, such as another attempt
at opening a FTP or TELNET connection.

      If part of the circuit between transmitter and receiver were to
      accept responsibility for delivery of a packet after ACKing it
      to the transmitter, it would destroy the end-to-end nature of
      TCP.

   Not if it could guarantee accurate delivery of the data to a device
   which would retransmit it to the final destination if it were to be
   NAKed... that is the way spoofing works.

If such a guarantee were possible, then your conclusion would be
correct.  But a modem cannot guarantee packet delivery.  If a modem
has ACKed a packet to the sender and continues to hold it in its
on-board memory buffer while it attempts to re-establish a connection,
the packet is vulnerable to a multitude of problems such as power
loss.  TCP assumes that an ACKed packet has been delivered to its
destination, and could not resupply it to the modem when power is made
available once again.

IP and TCP were designed for hostile conditions where intermediate
systems (wires, modems, routers, gateways, etc.) can be expected to
become unavailable at any time (that's a nice way to say "MiG
attack").  In such a scenario, only end-to-end ACKing is robust enough
to ensure that the data gets through.  And such pessimistic
assumptions have proved themselves useful over the life of the
civilian Internet as well.


I'm having trouble imagining at what level of the stack in-modem
protocol spoofing might be useful for IP or ISO internetworks, above
the data link layer.  I haven't gotten around to testing synchronous
PPP over T2500s in PEP SDLC mode - has anyone?  Is its performance
enough better than asynch PPP over asynch PEP to be worth the trouble?

shri@ncst.ernet.in (H.Shrikumar) (12/27/90)

-----------------------
[For comp.protocols.tcp-ip-ers ...
   There is this thread in Comp.dcom.modems talking about PPP and TCP/IP
spoofing on Telebit modems. I am cross posting this for info ... all
followups directed to comp.dcom.modems.]
-----------------------

In article <BOB.90Dec26112824@volitans.MorningStar.Com> bob@MorningStar.Com 
  (Bob Sutterfield) writes:
>
>Correct.  But I was talking about uucico (the program that typically
>implements UUCP-g and can be considered the protocol layer "above"
>UUCP-g), which knows only about complete files.

  Thanx Bob Sutterfield, for the much needed long post ... hopefully
this will clear all doubting minds on this group.

>An application based on TCP assumes a reliable, sequenced data stream.
>[...] A TCP application assumes that any portion
>of a transmission that has been ACKed has reached its destination, and

[...deleted...]

>If such a guarantee were possible, then your conclusion would be
>correct.  But a modem cannot guarantee packet delivery.  If a modem
>has ACKed a packet to the sender and continues to hold it in its
>on-board memory buffer while it attempts to re-establish a connection,

  This is very correct. You hit the problem on the head.

  However, some spoofing is still possible. When TCP sees the
long turnaround of ACKs via the slow (or delayed) PEP reverse channel,
it may prefer to set rather inappropriate window sizes etc. However, by
spoofing these packets, the two modems can tune their PEP packets to
the IP packet size, the TCP window to the PEP window, which inturn will
depend on line conditions and retransmission rates, and this can be
dynamic. This will be at no extra (transmission) cost since surely
the modems are already doing dynamic PEP adaptation already.

  Of course, this will make the line look error free to TCP, but my
uneducated guess is that would not affect TCP too much. If it would,
then some errors need to be spoofed as well to keep the algorithms in
TCP happy. Would some C.P.TCP-IP-guru correct, if I am wrong ?

  The modem can also spoof VJ Header Compression, so plain vanilla
slip can give good performance over the line. This is another
spoofing possible.

  Thus, while the modem *should* *not* ACK any TCP packets, it
can do other things to increase thruput.

  Howmuch of this does the Netblazer do ?

  Now howabout this ... the modem can also generate IP packets,
and mix them into the stream coming from the telco side into the
local host. These TCP or UDP packets could tell the computer about the
health of the modem, and the local host can reply back and perhaps
change modem settings etc. Each modem will need an IP address too, though.
(This can be done with PPP, 'cos PPP is point to point).

  Sigh! but since as netBelief goes, Telebit does not read this
group anymore ... so would they listen to this idea ?  ( 1/2 :-)

>I'm having trouble imagining at what level of the stack in-modem
>protocol spoofing might be useful for IP or ISO internetworks, above
>the data link layer.  I haven't gotten around to testing synchronous
>PPP over T2500s in PEP SDLC mode - has anyone?  Is its performance
>enough better than asynch PPP over asynch PEP to be worth the trouble?

  These results would be interesting ... has anybody any ?

-- shrikumar ( shri@ncst.in )

bob@MorningStar.Com (Bob Sutterfield) (12/28/90)

In article <1211@shakti.ncst.ernet.in> shri@ncst.ernet.in (H.Shrikumar) writes:
   However, some spoofing is still possible... by spoofing these
   packets, the two modems can tune their PEP packets to the IP packet
   size, the TCP window to the PEP window, which inturn will depend on
   line conditions and retransmission rates, and this can be dynamic.

It might be useful to allocate a few DAMQAM carriers or the HST
"reverse channel" for use by ACKs and the like, or to fit the MTU to
the characteristics of the line (or vice versa); but I wouldn't call
it spoofing, only accomodation and tuning.  The modem wouldn't know
anything about TCP, only that it's allocating bandwidth to packets of
certain sizes and characteristics.

   Of course, this will make the line look error free to TCP, but my
   uneducated guess is that would not affect TCP too much.  If it
   would, then some errors need to be spoofed as well to keep the
   algorithms in TCP happy.

While TCP can handle line problems admirably, there's certainly no
need to introduce them except perhaps for performance tuning.  No need
to spoof a flat tire by shooting it, just to keep me on my toes while
I'm driving :-)

   The modem can also spoof VJ Header Compression, so plain vanilla
   slip can give good performance over the line.

Hmmm...  I'll have to think about that one a while longer before I'm
convinced.  Something doesn't feel right.

   Thus, while the modem *should* *not* ACK any TCP packets, it can do
   other things to increase thruput.

Right, but that's not spoofing in the same sense that Telebit modems
use the term in their handling of other protocols.  It's just tuning.

   How much of this does the Netblazer do ?

None, except VJ header compression (computed on the PC, not in the
modem) across serial links it manages.  It's a conventional enough IP
router, with no intermediate-system protocol spoofing at all.

   ... the modem can also generate IP packets ... tell the computer
   about the health of the modem, and the local host can reply back
   and perhaps change modem settings etc...

Link quality monitoring is among the purposes of the proposed PPP MIB
for SNMP.  Rather than have the modem generate IP packets, I suppose
the contents of the Trailblazer's S7[02] (for PEP) or S78 (for V.32)
or various other status registers could be acquired via the secondary
DTE channel, and digested for broadcast as a pppLinkQualityEntry.  But
that secondary DTE was turned off in the standalone T2500 v7.00 ROMs,
so slightly more cleverness would be required.

barmar@think.com (Barry Margolin) (12/28/90)

In article <1211@shakti.ncst.ernet.in> shri@ncst.ernet.in (H.Shrikumar ) writes:
>In article <BOB.90Dec26112824@volitans.MorningStar.Com> bob@MorningStar.Com 
>  (Bob Sutterfield) writes:
>>If such a guarantee were possible, then your conclusion would be
>>correct.  But a modem cannot guarantee packet delivery.  If a modem
>>has ACKed a packet to the sender and continues to hold it in its
>>on-board memory buffer while it attempts to re-establish a connection,
>
>  This is very correct. You hit the problem on the head.
>
>  However, some spoofing is still possible. When TCP sees the
>long turnaround of ACKs via the slow (or delayed) PEP reverse channel,
>it may prefer to set rather inappropriate window sizes etc. However, by
>spoofing these packets, the two modems can tune their PEP packets to
>the IP packet size, the TCP window to the PEP window, which inturn will
>depend on line conditions and retransmission rates, and this can be
>dynamic. This will be at no extra (transmission) cost since surely
>the modems are already doing dynamic PEP adaptation already.

You seem to be using a more general definition of "spoofing" than most
other people.  It usually refers to sending fake responses (e.g. ACKs)
before receiving them from the actual recipient of the packet (in this
case, the destination host's TCP layer).  This would not be reasonable for
a link-layer device when being used to transmit TCP, because it can't
guarantee delivery after it acks.  It could keep retransmitting the packet,
but that doesn't guarantee that the packet will eventually get delivered;
meanwhile, the sending TCP will assume that it has.  But worse, what if the
destination host sends an error indication back instead of a positive
acknowledgement; for instance, a later router may fragment the datagram,
but the host may not be able to reassemble it for some reason (I suppose
this could be hacked by having the spoofer implement a path MTU discovery
algorithm).  In general, you frequently open a big can of worms when
low-layer devices try to be clever about the high-layer data; another
example of this is routers that do packet filtering based on TCP/UDP port
numbers.

On the other hand, if all you're suggesting is that the modem recognize PPP
packets and lower its forwarding timeout, that seems perfectly reasonable.
For insstance, it could peek at the PPP packet's length field and forward
immediately upon receiving that many bytes.  It doesn't change the
semantics of the data path, merely optimizes the use of the medium for the
type of data being transmitted.

>  Of course, this will make the line look error free to TCP, but my
>uneducated guess is that would not affect TCP too much. If it would,
>then some errors need to be spoofed as well to keep the algorithms in
>TCP happy. Would some C.P.TCP-IP-guru correct, if I am wrong ?

TCP (actually IP) doesn't see individual lines, it sees a sequence of lines
connected by routers.  An error-correcting modem can only make one of those
lines look error free, but TCP depends on finding out about errors at any
of the lines or routers along the way (either through error responses or
timeouts).

>  The modem can also spoof VJ Header Compression, so plain vanilla
>slip can give good performance over the line. This is another
>spoofing possible.
>
>  Thus, while the modem *should* *not* ACK any TCP packets, it
>can do other things to increase thruput.

Yes, this is correct.  Note that both this suggestion and my suggestion
about timeouts above perform their spoofing on data that is only concerned
about single links.  A link layer device should not spoof end-to-end data.

>  Now howabout this ... the modem can also generate IP packets,
>and mix them into the stream coming from the telco side into the
>local host. These TCP or UDP packets could tell the computer about the
>health of the modem, and the local host can reply back and perhaps
>change modem settings etc. Each modem will need an IP address too, though.
>(This can be done with PPP, 'cos PPP is point to point).

Not a bad idea.
--
Barry Margolin, Thinking Machines Corp.

barmar@think.com
{uunet,harvard}!think!barmar

root@zswamp.fidonet.org (Geoffrey Welsh) (12/30/90)

Bob Sutterfield (bob@MorningStar.Com ) wrote:

GW >   Not if it could guarantee accurate delivery of the data 
GW >to a device which would retransmit it to the final destination if it 
GW >were to be NAKed... that is the way spoofing works.

 >If such a guarantee were possible, then your conclusion 
 >would be correct.  But a modem cannot guarantee packet delivery.  If 
 >a modem has ACKed a packet to the sender and continues to hold it in 
 >its on-board memory buffer while it attempts to re-establish a 
 >connection, the packet is vulnerable to a multitude of problems such as 
 >power loss.

   Jeez... first I thought were were talking about recovery from line noise 
bursts... then we got into IP rerouting around breaking links... now you're 
throwing in a charge of Grand Failure Powerline!

   As you point out, end to end ACKing is the only robust procedure... but 
spoofing implies ACKing in a non end-to-end manner, so you seem to imply that 
there is no way to enhance Internet protocol performance by using spoofing?

   It's logical... but it's sad if true.

 >I'm having trouble imagining at what level of the stack 
 >in-modem protocol spoofing might be useful for IP or ISO 
 >internetworks, above the data link layer.

   It took me a while to figure out that this is what you were saying.

   It looks like we're stuck with the following situation: we can use 
intermediate queues and spoofing to increase the performance of the actual data 
transfer, but we must still depend on end-to-end acknowledgement at the file 
level.  This leaves us vulnerable in that the situation may require 
retransmission of packets ACKed locally... but let's look closely at what we 
gain/lose:

   First of all, my machine and my modem run off the same power.  If I am the 
originating site, it doesn't matter whether I've sent all of the data to the 
modem and am waiting for the whole file ACK from the remote site, or I'm still 
sending data blocks to the remote site and being ACKed end-to-end; the transfer 
will be interrupted either way.  In both cases, I know that the file has not 
been received at the other end... but the enhanced throughput of the spoofed 
connection might allow me to complete the transfer before the power fails! 
<grin - the only defence better than presence of mind is absence of body>

   I may really be sticking my foot in my mouth when I say this, because I am 
not familiar with the mechanics of Internet protocols, BUT... we need to develop 
protocols such that the receiving end can determine if a transfer has been 
previously attempted, and provide information to the sender such that it may be 
resumed.  ZMODEM already does this: the receiver, if it detects that the file 
name, datestamp are identical to an existing file, informs the sender of how 
many bytes it has of the file and what the CRC of the bytes are.  If the sender 
finds that the first n bytes of the file it's sending matches the CRC, the 
transmission jumps to the uncompleted portion.

   If we can all agree that this is a sensible way to go, we can take advantage 
of the enhanced throughput of spoofing while neither losing the robust nature of 
end to end ACKing nor necessitating massive redundant retransmissions whenever 
an in-progress transfer has been interrupted.

   Am I completely off the wall on this?  If so, pardon my ignorance... I 
should lock myself into a (padded) room with some books on TCP/IP... 

--  
UUCP:     watmath!xenitec!zswamp!root | 602-66 Mooregate Crescent
Internet: root@zswamp.fidonet.org     | Kitchener, Ontario
FidoNet:  SYSOP, 1:221/171            | N2M 5E6 CANADA
Data:     (519) 742-8939              | (519) 741-9553
MC Hammer, n. Device used to ensure firm seating of MicroChannel boards
Try our new Molson 'C' compiler... it specializes in 'case' statements!

igb@fulcrum.bt.co.uk (Ian G Batten) (01/02/91)

In article <6578.277D7512@zswamp.fidonet.org> root@zswamp.fidonet.org (Geoffrey Welsh) writes:
>    As you point out, end to end ACKing is the only robust procedure... but 
> spoofing implies ACKing in a non end-to-end manner, so you seem to imply that
> there is no way to enhance Internet protocol performance by using spoofing?

Yes.  UUCP-g has two levels of acknowledgement.  There is the g protocol
stuff that provides a service not unlike X.25 level 3 --- 64 bytes of
data plus checksum and sequence being acknowledged usually on a 3-packet
window --- and then there is the S-SY-file-C-CY handshake at file
boundaries that uucico uses.  That part is also used over c,d,e,f,t,x
and all the other weird and wonderful UUCP protocols.  Trailblazers
spoof the low-level stuff but leave the hosts to manage the uucico
stuff.

[[ Incidentally, that's why TB performance is better on large files;
hosts are re-syncing and the buffers on the modems have to flush on
every file boundary. ]]

If Something Horrible happens during transmission, the fact that the
acks you got back at the lower level were fake doesn't matter --- the
C-CY exchange will fail.  PEP ensures that a stream of data will be
stopped at a given point and what has been delivered will be accurate.
You won't get packets 1 2 3 and 5 delivered and four dropped.

This can't work for TCP streams.  There's essentially only one level of
acknowledgements --- the packet level.  If the link goes down you have
no way of knowing what structure is imposed on the link and therefore
no way of knowing what's been lost.  Suppose I write a protocol which
sends multiple files over a single connection.  Suppose I am getting
false acks back from a spoofer and then the link dies.  Just how many
files have been transferred?

The only spoofing that could, I suppose, be written is on a per protocol
level.  I believe, for example, that FTP manages its own acks above the
TCP level, or you could do some very tricky things based on the fact
that FTP opens a distinct session for each transfer.  Having the
SYN/SYNACK and FIN/FINACK exchanges end to end would work for FTP.  SMTP
could be spoofed by making the SMTP operations end to end and the
messages spoofed.  [[ Note: I didn't say this.  Make sure you have an
adult present if you try it. ]]  Or if you could ensure that only one
message was transferred per session the same trick as with FTP could be
pulled.

General TCP spoofing is not possible because of the unknown semnatics of
the data stream passing.  UUCP (and Kermit, and ?Modem) is spoofable
because you can distinguish in a fairly trivial way between packet level
acknowledgements and end to end acknowledgements and Do The Right Thing.

csg@pyramid.pyramid.com (Carl S. Gutekunst) (01/03/91)

>UUCP-g has two levels of acknowledgement.  There is the g protocol stuff
>that provides a service not unlike X.25 level 3....
					       ^
Level 2.

Just splitting hairs.

<csg>

root@zswamp.fidonet.org (Geoffrey Welsh) (01/07/91)

Ian G Batten (igb@fulcrum.bt.co.uk ) wrote:

 >General TCP spoofing is not possible because of the unknown 
 >semnatics of
 >the data stream passing.  UUCP (and Kermit, and ?Modem) is 
 >spoofable
 >because you can distinguish in a fairly trivial way between 
 >packet level
 >acknowledgements and end to end acknowledgements and Do The 
 >Right Thing.

   Thank you for a much needed (and I speak only for myself, of course)
lesson in TCP/IP mechanics.  I often wish that I had the time, equipment,
and cash to learn these things first-hand.

 

--  
UUCP:     watmath!xenitec!zswamp!root | 602-66 Mooregate Crescent
Internet: root@zswamp.fidonet.org     | Kitchener, Ontario
FidoNet:  SYSOP, 1:221/171            | N2M 5E6 CANADA
Data:     (519) 742-8939              | (519) 741-9553
MC Hammer, n. Device used to ensure firm seating of MicroChannel boards
Try our new Molson 'C' compiler... it specializes in 'case' statements!