telnet: protocol & program
T君からさらに2つほど追加質問。
前者は簡単。UNIXのtelnetコマンドは、接続先が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 メッセージについても幾つか聞かれましたが略。