TCP/IP通信の概要


TCP通信は、まず通信をしたい要求元から相手先にTCPコネクションを設定し、そのコネクション上で実際のデータのやり取りがなされます。TCPのコネクションは、パケットの中にあるフラグを使って以下のようなフェーズで設定されます。下記のキャプチャデータの「info」欄の[   ]の中が、そのフラグを示しています。

  1. 要求元から相手先へSYNフラグをセットしたパケットを送信
  2. SYNパケットを受け取った相手先は、要求元にSYN/ACKフラグをセットしたパケットを送信
  3. 相手先からACKフラグがセットされたパケットを要求元が受け取る
従って、ルータのフィルタリングでこのフラグを扱えると、WAN側から通信が始まるケースだけ遮断するといったことができます。つまり、外部からランダムにポートスキャンされても、ルータで明示的に通過設定していないものについては遮断できますので、アタックには強くなります。おやじが使用しているTE4121Cはこういった設定ができますので、設定できる量には限界がありますが、きめ細かく設定しています。
なお、フラグについては以下のものがあります。(下記のキャプチャデータでは、RequestとResponseについている[PSH,ACK]は、スペースの関係で省略しています。)

フラグ 概  要
SYN TCPコネクションの確立を要求する最初のパケットに付与されるフラグ。
ACK 応答確認のためのフラグであり、接続要求以外の全てのパケットに付与されるフラグ。
PSH 受信したデータをバッファリングせず、直ちにアプリケーションに渡すことを要求するフラグ。大きなデータをフラグメントした場合は、最後のパケットに付与される。
FIN コネクションの切断を要求するフラグ。
RST コネクションの強制切断用のフラグ。データ転送中にキャンセルボタンを押した時などに送出される。

実際のTCP通信の状況を見てみましょう。下表は、おやじのFTPサーバテストの状況をサーバのEtherealでキャプチャしたものを見やすく編集したものです。この通信は、FTPサーバ(server)にクライアント(client)から、PORTモードでFTPサーバテストを行ったときのものです。ここからわかることの概要を以下に示します。FTPサーバの公開も合わせて見ていただくと、理解しやすいかもしれません。

FTP通信のイメージ

[凡例]
 ・Src.  : パケットの送信元
 ・Dst.  : パケットの送信先
 ・Prot : 全てTCPであるが、コネクション制御は「TCP」、制御コネクションは「FTP」、データコネクションは「FTPD」で表記
 ・Info : パケットの使用ポート番号や実際のデータ。Res.:Responce Req:Request

  緑:制御コネクションの設定・開放
  黒:制御コネクション上でやり取りされる制御情報
  青:データコネクションの設定・開放
  赤:データコネクション上で実際にやり取りされるデータ(リスト、test.txt等)

No.

Src.   Dst.     Prot    info

概   要

 1
 2
 3

client server TCP    1223 > ftp [SYN]
server client TCP    ftp > 1223 [SYN, ACK]
client server TCP    1223 > ftp [ACK]
クライアント側の1223番ポートから、サーバ側の21番ポートに向かって制御コネクションを設定するフェーズ。フラグが上記のとおり設定されている様子がわかる。

  4
  5
  6

server client FTP    Res: 220 ProFTPD 1.2.7rc3 Server (Aconus.com FTP Server)
client server FTP    Req: USER linux
server client TCP    ftp > 1223 [ACK]
サーバからの接続メッセージを受け、クライアントからログインユーザを通知するフェーズ。

 7
8
 9
10

server client FTP    Res: 331 Password required for linux.
client server FTP    Req: PASS *******
server client TCP    ftp > 1223 [ACK]
server client FTP    Res: 230 User linux logged in.
サーバからのユーザに対するパスワード要求と、クライアントからサーバへのパスワード送信とその応答フェーズ。

11
12
13

client server FTP    Req: PWD
server client TCP    ftp > 1223 [ACK]
server client FTP    Res: 257 "/" is current directory 
クライアントからサーバへのカレントディレクトリの送信要求とその応答。

14
15

client server FTP    Req: TYPE A
server client FTP    Res: 200 Type set to A.
クライアントからサーバへのASCUモードへの変更要求とその応答。
16
17
client server FTP    Req: PORT 192,168,1,2,4,200
server client FTP    Res: 200 PORT command successful
クライアントからデータコネクションの待ち受けアドレス(4*256+200=1224)をPORTコマンドでサーバに通知。
18 client server FTP    Req: LIST -aL LISTコマンドでリストの送信を要求。

19
20
21

server client TCP    ftp-data > 1224 [SYN]
client server TCP    1224 > ftp-data [SYN, ACK]
server client TCP    ftp-data > 1224 [ACK]

LISTコマンドを受け、サーバ側の20番ポートから、クライアント側のPORTコマンドで指定された1224番ポートに向かってデータコネクションを設定するフェーズ。

22
23

server client FTP    Res: 150 Opening ASCII mode data connection for file list
server client FTPD  FTP Data: 251 bytes
LISTを送るための制御コネクションのオープンを通知し、LISTデータをサーバからデータコネクションを使って送信。

24
25
26
27

server client TCP    ftp-data > 1224 [FIN, ACK]
client server TCP    1224 > ftp-data [ACK]
client server TCP    1224 > ftp-data [FIN, ACK]
server client TCP    ftp-data > 1224 [ACK] 
双方から使用したデータコネクションを開放するフェーズ。FTPの場合、データコネクションは一回の通信ごとに設定、開放される。

28
29

server client FTP    Res: 226 Transfer complete.
client server TCP    1223 > ftp [ACK] 
No.28で制御コネクションでサーバ側から送信完了を通知。No.29は、クライアント側からの送信完了通知に対する応答。
30
31
client server FTP    Req: TYPE A
server client FTP    Res: 200 Type set to A.
クライアントからサーバへのASCUモードへの変更要求とその応答。
32
33
client server FTP    Req: PORT 192,168,1,2,4,201
server client FTP    Res: 200 PORT command successful
クライアントからデータコネクションの待ち受けアドレス(4*256+201=1225)をPORTコマンドでサーバに通知。
34 client server FTP    Req: RETR test.txt RETRコマンドでtest.txtの送信を要求。
35
36
37
server client TCP    ftp-data > 1225 [SYN]
client server TCP    1225 > ftp-data [SYN, ACK]
server client TCP    ftp-data > 1225 [ACK]

RETRコマンドを受け、サーバ側の20番ポートから、クライアント側のPORTコマンドで指定された1225番ポートに向かってデータコネクションを設定するフェーズ。

38
39
server client FTP    Res: 150 Opening ASCII mode data connection for test.txt (906 bytes)
server client FTPD   FTP Data: 926 bytes
指定ファイルを送るための制御コネクションのオープンを通知し、指定されたファイルをサーバからデータコネクションを使って送信。
40
41
42
43
server client TCP    ftp-data > 1225 [FIN, ACK]
client server TCP    1225 > ftp-data [ACK]
client server TCP    1225 > ftp-data [FIN, ACK]
server client TCP    ftp-data > 1225 [ACK]
双方から使用したデータコネクションを開放するフェーズ。
44
45
server client FTP    Res: 226 Transfer complete.
client server TCP    1223 > ftp [ACK]
サーバからクライアントへデータ転送が完了した旨の通知とその応答。
46
47
client server FTP    Req: PORT 192,168,1,2,4,202
server client FTP    Res: 200 PORT command successful
クライアントからデータコネクションの待ち受けアドレス(4*256+202=1226)をPORTコマンドでサーバに通知。
48 client server FTP    Req: STOR test.txt.bak STORコマンドでtest.txt.bakの受信を要求。
49
50
51
server client TCP    ftp-data > 1226 [SYN]
client server TCP    1226 > ftp-data [SYN, ACK]
server client TCP    ftp-data > 1226 [ACK]

STORコマンドを受け、サーバ側の20番ポートから、クライアント側のPORTコマンドで指定された1226番ポートに向かってデータコネクションを設定するフェーズ。

52
53
server client FTP    Res: 150 Opening ASCII mode data connection for test.txt.bak
client server FTPD  FTP Data: 926 bytes
指定ファイルを受信するための制御コネクションのオープンを通知し、ファイルをクライアントからデータコネクションを使って受信。
54
55
56
57
client server TCP    1226 > ftp-data [FIN, ACK]
server client TCP    ftp-data > 1226 [ACK]
server client TCP    ftp-data > 1226 [FIN, ACK]
client server TCP    1226 > ftp-data [ACK]
双方から使用したデータコネクションを開放するフェーズ。(ここではクライアントから先に切断したように見えている)
58
59
server client FTP    Res: 226 Transfer complete.
client server TCP    1223 > ftp [ACK]
サーバからクライアントへデータ転送が完了した旨の通知とその応答。
60
61
client server FTP    Req: TYPE A
server client FTP    Res: 200 Type set to A.
クライアントからサーバへのASCUモードへの変更要求とその応答。
62
63
client server FTP    Req: PORT 192,168,1,2,4,203
server client FTP    Res: 200 PORT command successful
クライアントからデータコネクションの待ち受けアドレス(4*256+203=1227)をPORTコマンドでサーバに通知。
64 client server FTP    Req: LIST -aL LISTコマンドでリストの送信を要求。
65
66
67
server client TCP    ftp-data > 1227 [SYN]
client server TCP    1227 > ftp-data [SYN, ACK]
server client TCP    ftp-data > 1227 [ACK]

LISTコマンドを受け、サーバ側の20番ポートから、クライアント側のPORTコマンドで指定された1227番ポートに向かってデータコネクションを設定するフェーズ。

68
69
server client FTP    Res: 150 Opening ASCII mode data connection for file list
server client FTPD  FTP Data: 251 bytes
LISTを送るための制御コネクションのオープンを通知し、LISTデータをサーバからデータコネクションを使って送信。
70
71
72
73
server client TCP    ftp-data > 1227 [FIN, ACK]
client server TCP    1227 > ftp-data [ACK]
client server TCP    1227 > ftp-data [FIN, ACK]
server client TCP    ftp-data > 1227 [ACK]
双方から使用したデータコネクションを開放するフェーズ。
74
75
server client FTP    Res: 226 Transfer complete.
client server TCP    1223 > ftp [ACK]
サーバからクライアントへデータ転送が完了した旨の通知とその応答。
76
77
client server FTP    Req: QUIT
server client FTP    Res: 221 Goodbye.
クライアント側からの切断要求とその応答。
78
79
80
server client TCP    ftp > 1223 [FIN, ACK]
client server TCP    1223 > ftp [ACK]
client server TCP    1223 > ftp [RST]
最後にサーバ側から制御コネクションの切断要求とその応答が見える。最後のRSTフラグのパケットは強制切断である。

 


Top Pageへ