アプリケーション層(実習)(BNS 補助資料)

アプリケーション層のプロトコルを手打ちで喋る

前提
  1. 目的のホスト、ポートに対してTCPコネクションを開設する ソフトウェア(telnetまたはそれに準ずるもの)が 使えるようになっていること(準備編1を参照)。
  2. それぞれの(アプリケーション層)のサービスについて、 利用できるホスト、ポートがわかっていること。
  3. それぞれのプロトコルの文法がわかっていること。
    (2.,3.については準備編2を参照)。

実施例 telnetでSMTP

recipient 以下にSMTPセッションの一例を示す。

# C: 入力するもの     # S: サーバからの応答(コードのみ示す)

                      220
HELO nagano.ac.jp
                      250
MAIL from: xxxx@nagano.ac.jp
                      250
RCPT to: xxxx@nagano.ac.jp
                      250
DATA
                      354
aldsfalwefaw
aoifeoaejfoawejf
.                            # ピリオド(だけの行)が入力されると本文入力終了
                      250
QUIT                        # 切断
リレー

HTTPの概要

(HTTPには数種類のメソッドが用意されているが、ここでは 最もシンプルな GET メソッドに限定して解説する)

GETメソッド GET リクエストの文法は、

GET    オブジェクト(ファイル)    HTTPのバージョン

である。例えば、

GET / HTTP/1.0

(と送り、その後に空行を1つ送ることでリクエストが完結する)で、 HTTPバージョン 相手サーバの管理する トップページのデータを要求することができる。 一般には、第一引数は、/ から始まるパス名(ディレクトリ名とファイル名を 連結したもの; ブラウザのアドレスバーに表示される URLの、最初の / から右にあるもの全体)である。

本学のようなプロキシ経由で外部と接続している環境では、 外部のサーバから資源を取得する際には、プロキシに接続した上で、 第一引数として、要求すべき資源の URL を渡す。

実施例 telnetでPOP3

> nc pemail.nagano.ac.jp pop3
+OK Dovecot ready.            # 接続成功
USER j17000xx         # 自分のユーザ名を送る
+OK
PASS zzzzzzzzz        # パスワード(平文で送られる)
+OK Logged in.                # 認証成功 以下、様々なコマンドが使える
LIST                  # メール一覧を表示せよ
+OK 12 messages:
1 94525
2 36685
3 36163
4 114392
5 26489
6 13214
7 29739
8 77072
9 7926
10 73956
11 26941
12 72296
RETR 12               # 番号を指定して内容を表示させる
..........                  # (メールの内容が表示される)
,AwIU$5$l$k2DG=3D@-$,=1B(B=0D=0A=1B$B!!!!$4$6$$$^$9!#$"$i$+$8$a$4=
N;>5$/$@$5$$!#=1B(B=0D=0A=0D=0ACopyright(C)=1B$B!"=1B(BSB=1B$B%/%=
j%(%$%F%#%V3t<02q<R!"7G:\5-;v$NL5CGE>:\$r6X$8$^$9!#=1B(B=0D=0A
.
QUIT
+OK Logging out.

実習

  1. ホスト名 pevw.nagano.ac.jp ポート 25 に接続し、SMTP
  2. ホスト名 www2.nagano.ac.jp ポート 80 に接続し、HTTP
  3. ホスト名 pemail.nagano.ac.jp ポート 110 に接続し、POP3

を(手打ちで)「話して」みる。 (telnetでSMTPtelnetでHTTPtelnetでPOP3 を参考に、 各自、自分で試してみて下さい。)

b クライアント動作するプログラム

以下のプログラムを動かしてみて、
HTTPとSMTPの概要の理解を試みて下さい。 (3,4ではメールアドレスの部分を自分のアドレスに書き換えて使って下さい)

  1. HTTPクライアント: 第3層のライブラリ(Socket)による
  2. HTTPクライアント: 第4層のライブラリによる
  3. 簡易メール送信プログラム: 第4層のライブラリによる
  4. 簡易メール送信プログラム: 第3層のライブラリ(Socket)による