telnet: protocol & program

T君からさらに2つほど追加質問。

前者は簡単。UNIXtelnetコマンドは、接続先が23/tcpかどうかで動作を変えているからですね。確認するには、telnetを引数無しで起動して、'toggle options' コマンドでtelnetプロトコルでのやりとりを表示するようにしてみればわかります。

$ telnet

telnet> toggle options
Will show option processing.

telnet> open localhost
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
SENT DO SUPPRESS GO AHEAD
SENT WILL TERMINAL TYPE
..(略)..
RCVD WILL ECHO
SENT DO ECHO
Fedora Core release 2 (Tettnang)
Kernel 2.6.5-1.358 on an i686
login:

localhost:23 に接続にいくと、telnetdとなにやら通信しています(SENT/RCVDの部分)。今度はlocalhost:25 に繋ぐと..

$ telnet

telnet> toggle options
Will show option processing.

telnet> open localhost 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 foo.bar.com ESMTP Postfix
^]
telnet>

のように、なにもSENTせず、いきなりMTAの220メッセージが表示されます。もちろん、tcp/23でMTAを動作させてそこにtelnetすると、HELO/EHLOする前にMTAには解釈不能なSENTメッセージが送出されてしまうため、初回のHELO/EHLOはエラーになります。

さて、こちらの質問ですが、正確にはわかりませんでした。詳解TCP/IP〈Vol.1〉プロトコル などを開くとトランスポートは当然のようにTCPを仮定しているし、telnetプロトコル自体にもTCPを仮定しているように見える部分があるしで、多分「TCPと決まっている」で問題ないんでしょうが…。どのRFCに記述があるのやら。誰か教えてください。


ICMP port unreachable メッセージについても幾つか聞かれましたが略。