[comp.protocols.tcp-ip] telnet...

postel@VENERA.ISI.EDU (06/30/88)

Hi.

The Telnet defaults will not be changed. Not ever.

Additional Telnet Options are very likely.

--jon.

BILLW@MATHOM.CISCO.COM (William Westfield) (07/06/88)

I may be flamed at for suggesting this (and perhaps deservedly so), but
I really wish telnet had a "DON'T TELNET-ANYMORE" option.  Most telnet
server/client interactions happen at connection startup, and then they
stay the same until the connection closed.  Unfortunately, since telnet
options can occur anywhere within the data stream, both telnet processes
have to carefully examine every character to see whether it might be an
IAC.  I wish a host could set the connection up the way that it wanted,
and then say "that's it, no more telnet negotiations from me".  (Of course,
this would make the most sense in binary mode, so that you would not have
to worry about end-of-line nonsense either.)

Any comments?
Bill Westfield
cisco Systems.
-------

mcc@ETN-WLV.EATON.COM (Merton Campbell Crockett) (07/06/88)

Are you suggesting that one eliminate line mode and only use binary mode?  Or
are you suggesting that there be an integration of TELNET and the local systems
terminal driver?

Merton Campbell Crockett

braden@VENERA.ISI.EDU (07/06/88)

Bill, 

There are Telnet controls (eg IP, AO, AYT...) that can appear at any time
in the stream, and a correct implementation must check for them.  An
implementation that does not is not implementing the Telnet protocol
(RFC-764).

Bob Braden

mar@ATHENA.MIT.EDU (07/07/88)

A "DON'T TELNET ANYMORE" option can save you a whole lot on
efficiency.  I don't just mean taking a couple of conditionals out of
the main loop in a telnet server.

For example, on the ITS operating system, the supdup server was only
involved in starting up a connection.  Once the connection was
established, a system call tied the network connection to the
pseudo-tty that the command interpreter was on, and the server process
was no longer in the loop.  

If there was a way to make sure that no more telnet options processing
would need to be done, a similar thing could be done with telnet on
other operating systems, saving 2 process-switches per character.
					-Mark

MRC@PANDA.PANDA.COM (Mark Crispin) (07/07/88)

The performance problem you refer to (2 process switches/character) is
an artifact of the design of the Telnet server and operating system and
not a problem in the Telnet protocol itself.

In WAITS, Tenex, and TOPS-20, the Telnet server is in the same context
as the terminal driver (that is, it is part of the operating system).
A Telnet terminal is a special type of software terminal.  It is not a
pseudo-terminal because there is no controlling job.  It's more like a
physical terminal, but instead of the characters coming from a hardware
RS232 line scanner they're coming from the TCP/IP driver.

I believe a similar design is used by Unix; I don't believe Unix has a
Telnet server running at process level.
-------

hrp@rothko.CRAY.COM (Hal Peterson) (07/07/88)

Mark,

But who is going to take care of NVT if not a telnet server?  A very
lightweight telnet server perhaps. . . .

				Hal

08071TCP@MSU.BITNET (Doug Nelson) (07/07/88)

Since Bill Westfield asked for flames:     :-)

>I really wish telnet had a "DON'T TELNET-ANYMORE" option.  Most telnet
>server/client interactions happen at connection startup, and then they
>stay the same until the connection closed.  Unfortunately, since telnet
>options can occur anywhere within the data stream, both telnet processes
>have to carefully examine every character to see whether it might be an
>IAC.  I wish a host could set the connection up the way that it wanted,
>and then say "that's it, no more telnet negotiations from me".  (Of course,
>this would make the most sense in binary mode, so that you would not have
>to worry about end-of-line nonsense either.)
>
>Any comments?

Why use Telnet if you don't want it?  It certainly isn't that difficult
to keep scanning for IAC, and Telnet is certainly not a very complex
protocol.  And you always have the option of rejecting any changes in
options if you don't want to deal with them.

In what circumstances would you want to use this feature?  In a general
interactive environment, it would seem like you'd want to keep your
options open.

What concerns me, though, is that some Telnet implementations apparently
assume that no more options will be negotiated after the startup, and then
stop working when they encounter software that sends them, such as echo
toggles for password suppression.

Doug Nelson
Michigan State University
Computer Lab

jqj@HOGG.CC.UOREGON.EDU (07/07/88)

>From: braden@venera.isi.edu
>There are Telnet controls (eg IP, AO, AYT...) that can appear at any time
>in the stream, and a correct implementation must check for them.  An
>implementation that does not is not implementing the Telnet protocol
>(RFC-764).
This is precisely Bill's point.  He argues that in some applications
the higher level protocol knows that it will never generate or listen
to such controls after a particular point in the session, and therefore
could improve efficiency by saying "don't bother to check any more", but
can't unless the Telnet protocol definition were changed.

This seems to me to be one of many possible negotiable "performance
options".  One might also have negotiations that specified typical
chunk sizes for transmissions (e.g. size of the Unix write() buffer.
In no way related to MSS or anything like that, obviously) -- useful in
helping the receiver do buffer management, expected average data rate,
expected connection lifetime, ad nauseum.  I don't believe that Telnet
should implement any such negotiations because I see them all as minor
performance tuning that greatly complicates the protocol.  But I do
think they should be considered as a group since they all share the
characteristic that the applications protocol knows something about the
stream traffic pattern that doesn't help the TCP level very much, but
might help the remote applications level.

Now, a LAT-like protocol that multiplexed several virtual terminal
sessions (perhaps several telnet streams?) on a single sequenced packet
protocol connection.  THAT would be something to more seriously
investigate as a standardized performance enhancement for connecting
IP terminal servers to hosts.

brescia@PARK-STREET.BBN.COM (Mike Brescia) (07/08/88)

     A "DON'T TELNET ANYMORE" option can save you a whole lot on efficiency.  

Yes, making a direct path from the net driver to the terminal driver is much
more efficient.  You do need the escape route however.  10 years ago (or was
that when it was done in ITS) there was talk of having the telnet server throw
such a switch, which meant "pass everything transparently between terminal and
net until you see a special character".  That would be IAC in the direction of
net->term and one of BREAKSET in the term->net direction.  Once the escape
character was encountered the server would have to interpret again, until it
was satisfied to put the path in transparent mode again.

     If there was a way to make sure that no more telnet options processing
     would need to be done, a similar thing could be done with telnet on
     other operating systems, saving 2 process-switches per character.

Since there is always option processing going on, you just invoke the server
for the characters it needs to handle.  IAC-IAC doubling would be expensive,
but how often do you transfer the character 0xFF?

Regards,
Mike

hedrick@athos.rutgers.edu (Charles Hedrick) (07/08/88)

Unfortunately Mark is for once giving Unix more credit than it is due.
Berkeley's TCP/IP includes a telnetd that runs as a user process.  It
reads characters from a net connection and copies them into a pty, and
visa versa for the echo.  There is kernel support available that makes
this unnecessary, but as far as I know, the only vendor that has decided
to distribute this code is Pyramid (and it isn't released yet).  This
makes an enormous difference to responsiveness of a telnet connection
on a heavily loaded machine.  So it's worth doing on our Pyramid
timesharing systems.  It has not seemed necessary for our other
systems (primarily Suns), which are either single-user or have only a
few users.  In my opinion the best implementation (which is what our
Unix code does) is a combination of the two approaches.  There is a
telnet daemon.  It is used to do connection opening and closing and
handles all option and control sequence processing.  It uses an ioctl
to crosspatch the network to the pty.  The kernel then handles passing
characters as long as they are "easy".  When it detects an IAC from
the network (the beginning of a telnet option of some sort), the
crosspatch is broken and control returns to the daemon.  Thus the
kernel handles the normal case, for which performance is important,
but need not be complicated by negotiations, etc.  This code is
available, but so far no one has reported success in getting it to run
on machines other than the Pyramid and some other unnamed system which
I assume is not a VAX.  A number of people have taken copies of it and
not told me the results.  I'd be happy to send it to you, but only if
you are serious about doing the kernel work necessary to get it to
work, and telling me the results.