作者: 肖建彬 | 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及版权声明
网址:http://www.xiaojb.com/archives/it/ftp.shtml

根据是使用port模式还是passive模式,ftp使用不同的tcp端口号,在详细描述ftp前,我们来简单讨论一下tcp端口号的一些基本概念。tcp使用端口号来标识所发送和接收的应用,端口号可以帮助tcp来分离字节流并且帮相应字节传递给正确的应用程序。

  tcp端口号可以是半永久的和暂时的。服务器端监听在半永久的端口上来让客户端访问。客户端使用暂时的端口在本地标识一个对话,客户端端口只在使用tcp服务时候才存在,而服务器端口只要服务器在运行就一直在监听。

tcp端口可以归为3类:

  1、众所周知的端口来标识在tcp上运行的标准服务,包括ftp、http、elnet、smtp等,这些端口号码范围为0-1023;

  2、注册端口号用来标识那些已经向iana(internet assigned numbers assigned numbers authority)注册的应用,注册端口号为1024-49151;

  3、私有端口号是非注册的并且可以动态地分配给任何应用,私有端口为49152-65535;注册的端口号本来打算只给注册的应用使用,

ftp port模式和ftp passive模式

  当你对一个ftp问题进行排错时候,你首先要问的一个问题是使用的是port模式的还是passive模式。因为这两种行为迥异,所以这两种模式引起的问题也不同;在过去,客户端缺省为active(port)模式;近来,由于port模式的安全问题,许多客户端的ftp应用缺省为passive模式。

2.1 ftp port模式

port模式的ftp步骤如下:

  1、 客户端发送一个tcp syn(tcp同步)包给服务器段众所周知的ftp控制端口21,客户端使用暂时的端口作为它的源端口;

  2、 服务器端发送syn ack(同步确认)包给客户端,源端口为21,目的端口为客户端上使用的暂时端口;

  3、 客户端发送一个ack(确认)包;客户端使用这个连接来发送ftp命令,服务器端使用这个连接来发送ftp应答;

  4、 当用户请求一个列表(list)请求或者发起一个要求发送或者接受文件的请求,客户端软件使用port命令,这个命令包含了一个暂时的端口,客户端希望服务器在打开一个数据连接时候使用这个暂时端口;port命令也包含了一个ip地址,这个ip地址通常是客户自己的ip地址,而且ftp也支持第三方(third-party)模式,第三方模式是客户端告诉服务器端打开与另台主机的连接;

  5、 服务器端发送一个syn包给客户端的暂时端口,源端口为20,暂时端口为客户端在port命令中发送给服务器端的暂时端口号;

6、 客户端以源端口为暂时端口,目的端口为20发送一个syn ack包;

7、 服务器端发送一个ack包;

  8、 发送数据的主机以这个连接来发送数据,数据以tcp段(注:segment,第4层的pdu)形式发送(一些命令,如stor表示客户端要发送数据,retr表示服务器段发送数据),这些tcp段都需要对方进行ack确认(注:因为tcp协议是一个面向连接的协议)

  9、 当数据传输完成以后,发送数据的主机以一个fin命令来结束数据连接,这个fin命令需要另一台主机以ack确认,另一台主机也发送一个fin命令,这个fin命令同样需要发送数据的主机以ack确认;

  10、 客户端能在控制连接上发送更多的命令,这可以打开和关闭另外的数据连接;有时候客户端结束后,客户端以fin命令来关闭一个控制连接,服务器端以ack包来确认客户端的fin,服务器同样也发送它的fin,客户端用ack来确认。

下图图示了ftp port模式前几步步骤:
/====================================================================\
| |
| [ ftp client ] [ ftp server ] |
| |
| (tcp:21 连接初始化,控制端口) |
| syn |
| port xxxx ———————-> port 21 [tcp] |
| syn+ack |
| port xxxx <———————- port 21 |
| ack |
| port xxxx ———————-> port 21 |
| |
| (控制操作: 用户列目录或传输文件) |
| |
| port, ip, port yyyy |
| port xxxx <———————- port 21 |
| port seccussful |
| port xxxx <———————- port 21 |
| list, retr or stor |
| port xxxx ———————-> port 21 |
| |
| |
| (tcp:20 连接初始化,数据端口) |
| syn |
| port yyyy <———————- port 20 |
| syn+ack |
| port yyyy ———————-> port 20 |
| ack |
| port yyyy <———————- port 20 |
| |
| |
| (数据操作: 数据传输) |
| data + ack |
| port yyyy <———————> port 20 |
| . |
| . |
| . |
| |
\====================================================================/

one response to “ftp协议分析(一)” linuxfool says:
june 29th, 2007 at 23:43

| (控制操作: 用户列目录或传输文件) |
| |
| port, ip, port yyyy |
| port xxxx port 21 |
| |

第一个我觉得方向错了,不知道说的对不对?

leave a reply

name (required)

mail (will not be published) (required)

website

spam protection: sum of 6 + 8 ?

posted on 2010-01-05 00:52  康的瑞  阅读(394)  评论(0编辑  收藏  举报