FTP协议

1.简单来说

        FTP协议属于应用层协议,File Transfer Protocol,文件传输协议,简单来说FTP协议是面向文件传输的协议。

2.复杂点来说

     (1)FTP和HTTP一样都是在Internet上广泛传输的协议,用来在两台计算机之间互相传输文件。相比于HTTP,FTP协议要复杂许多。因为FTP协议要用两个TCP链接,一个是命令链路,用在FTP客户端与服务器之间传递命令;另一个是数据链路层,用来上传和下载数据

      (2)FTP的协议有两种工作方式:PORT和PASV方式;

     客户端动态的选择一个端口(这个端口号一定是1024以上的,因为1024以前的端口都已经预先被定义好)向服务器端的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一个命令连接。当需要传送数据时或者列出服务器的文件列表时(通常使用ls或dir命令),客户端通过命令连接告诉服务器(使用PORT命令):“我已经打开了XX端口,请你过来连接”。于是服务器使用20端口向客户端的XX端口发送连接请求,建立一条数据连接来传送数据。

       客户端首先使用与主动连接模式相同的方法与服务器建立命令连接。当需要传送数据时,客户端通过命令连接告诉服务器(使用PASV命令)“我要连接你的XX端口,请问是否空闲”,如果恰好该端口空闲,服务器会告诉客户端:“你请求的端口空闲,可以建立连接(ACK确认信息)”,否则服务器会说“该端口已经占用,请换个端口(UNACK信息)”。如果客户端得到的是空闲的提示,就会利用该端口建立连接,否则就换个端口重新尝试,这也就是所谓的连接建立的协商过程.

         PORT模式建立数据传输通道是由服务器端发起的,服务器使用20端口连接客户端的某一个大于1024的端口;在PASV模式中,数据传输的通道的建立是由FTP客户端发起的,他使用一个大于1024的端口连接服务器的1024以上的某一个端口。如果从C/S模型这个角度来说,PORT对于服务器来说是OUTBOUND,而PASV模式对于服务器是INBOUND.

从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。而FTP的复杂性就在于此。

3.对比

    选择使用那种进行链接,由客户端选择

        主动FTP对FTP服务端的管理有利,但是对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。

        被动FTP对FTP客户端的管理不利,但是对服务器的管理不利。因为客户端要与服务器端建立连接,其中一个连到一个高位随机的端口,而这个端口很有可能被服务器端的防火墙阻塞。

      我在想在被动模式中是不是可以这样优化:客户端和服务端建立了命令连接之后,客户端通过命令连接向服务端发送PASV和一个大于1024的xx端口号进行数据连接请求,询问此端口是否空闲可用,如果已经被使用则发送UNACK给客户端,重新进行协商,直到可用。

那么可不可以修改为,当命令连接建立后,客户端只向服务端发送PASV(不发送一个xx端口)请求和服务器建立数据连接,服务器端收到之后请求之后,发送一个可用的大于1024的端口号给客户端,“说我这个端口可用,可以进行连接”,那就不用进行重复协商了,可以提高效率。不过或许进行重复协商的概率很小,没有必要这样做。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值