ftp的工作原理 防火墙设置-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 3976740
  • 博文数量: 536
  • 博客积分: 10470
  • 博客等级: 上将
  • 技术积分: 4825
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-26 14:08
文章分类

全部博文(536)

文章存档

2024年(3)

2021年(1)

2019年(1)

2017年(1)

2016年(2)

2013年(2)

2012年(10)

2011年(43)

2010年(10)

2009年(17)

2008年(121)

2007年(252)

2006年(73)

相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: linux

2011-10-12 09:27:30

      起初, ftp并不是应用于ip上 的协议,而是arpanet网络中计算机间的文件传输协议, arpanet是美国国防部组建的老网络,于1960-1980年使用。在那时, ftp的主要功能是在主机间高速可靠地传输文件。目前ftp仍然保持其可靠性,即使在今天,它还允许文件远程存取。这使得用户可以在某个系统上工作,而将 文件存贮在别的系统。例如,如果某用户运行web,需要从远程主机上取得html文件和cgi程序在本机上工作,他需要从远程站点获取文件(远程站点也需安装web服务器)。当用户完成工作后,可使用ftp将文件传回到web服务器。采用这种方法,用户无需使用telnet登录到远程主机进行工作,这样就使web服务器的更新工作变得如此的轻松。

     ftp是tcp/ip的一种具体应用,它工作在osi模型的第七层,tcp模型的第四层上,即应用层,使用tcp传输而不是udp,这样ftp客户在和服 务器建立连接前就要经过一个被广为熟知的"三次握手"的过程,它带来的意义在于客户与服务器之间的连接是可靠的,而且是面向连接,为数据的传输提供了可靠 的保证。

     下面,让我们来看看,一个ftp客户在和服务器连接是怎么样的一个过程(以标准的ftp端口号为例)。

     首先,ftp并不像http协议那样,只需要一个端口作为连接(http的默认端口是80,ftp的默认端口是21),ftp需要2个端口,一个端口是作 为控制连接端口,也就是21这个端口,用于发送指令给服务器以及等待服务器响应;另一个端口是数据传输端口,端口号为20(仅port模式),是用来建立 数据传输通道的,主要有3个作用

  • 从客户向服务器发送一个文件。
  • 从服务器向客户发送一个文件。
  • 从服务器向客户发送文件或目录列表。

         其次,ftp的连接模式有两种,port和pasv。port模式是一个主动模式,pasv是被动模式,这里都是相对于服务器而言的。为了让大家清楚的认识这两种模式,朗月繁星分别举例说明。

    port模式


      当ftp客户以port模式连接服务器时,他动态的选择一个端口号(本次试验是6015)连接服务器的21端口,注意这个端口号一定是1024以上 的,因为1024以前的端口都已经预先被定义好,被一些典型的服务使用,当然有的还没使用,保留给以后会用到这些端口的资源服务。当经过tcp的三次握手 后,连接(控制信道)被建立(如图1和图2)。


             图1:ftp客户使用ftp命令建立于服务器的连接


    图2:用netstat命令查看,控制信道被建立在客户机的6015和服务器的20端口

      现在用户要列出服务器上的目录结构(使用ls或dir命令),那么首先就要建立一个数据通道,因为只有数据通道才能传输目录和文件列表,此时用户会发 出port指令告诉服务器连接自己的什么端口来建立一条数据通道(这个命令由控制信道发送给服务器),当服务器接到这一指令时,服务器会使用20端口连接 用户在port指令中指定的端口号,用以发送目录的列表(如图3)。


    图3:ls命令是一个交互命令,它会首先与服务器建立一个数据传输通道。经验证本次试验客户机使用6044端口

      当完成这一操作时,ftp客户也许要下载一个文件,那么就会发出get指令,请注意,这时客户会再次发送port指令,告诉服务器连接他的哪个"新" 端口,你可以先用netstat -na这个命令验证,上一次使用的6044已经处于time_wait状态(如图4)。


    图4:使用netstat命令验证上一次使用ls命令建立的数据传输通道已经关闭

      当这个新的数据传输通道建立后(在微软的系统中,客户端通常会使用连续的端口,也就是说这一次客户端会用6045这个端口),就开始了文件传输的工作。

    pasv模式

         然而,当ftp客户以pasv模式连接服务器时,情况就有些不同了。在初始化连接这个过程即连接服务器这个过程和port模式是一样的,不同的是,当 ftp客户发送ls、dir、get等这些要求数据返回的命令时,他不向服务器发送port指令而是发送pasv指令,在这个指令中,用户告诉服务器自己 要连接服务器的某一个端口,如果这个服务器上的这个端口是空闲的可用的,那么服务器会返回ack的确认信息,之后数据传输通道被建立并返回用户所要的信息 (根据用户发送的指令,如ls、dir、get等);如果服务器的这个端口被另一个资源所使用,那么服务器返回unack的信息,那么这时,ftp客户会 再次发送pasv命令,这也就是所谓的连接建立的协商过程。为了验证这个过程我们不得不借助cuteftp pro这个大家经常使用的ftp客户端, 因为微软自带的ftp命令客户端,不支持pasv模式。虽然你可以使用quote pasv这个命令强制使用pasv模式,但是当你用ls命令列出服务器目录列表,你会发现它还是使用port方式来连接服务器的。现在我们使用 cuteftp pro以pasv模式连接服务器(如图5)。


    图5:使用cuteftp pro以pasv模式连接服务器

    请注意连接log里有这样几句话:

    command:> pasv
    227 entering passive mode (127,0,0,1,26,108)
    command:> list
    status:> connecting ftp data socket 127.0.0.1: 6764...
    125 data connection already open; transfer starting.
    226 transfer complete.


    其中,

    227 entering passive mode (127,0,0,1,26,80). 代表客户机使用pasv模式连接服务器的26x256 108=6764端口。(当然服务器要支持这种模式)
    125 data connection already open; transfer starting.说明服务器的这个端口可用,返回ack信息。

    再让我们看看用cuteftp pro以port模式连接服务器的情况。其中在log里有这样的记录:

    command:> port 127,0,0,1,28,37
    200 port command successful.
    command:> list
    150 opening ascii mode data connection for /bin/ls.
    status:> accepting connection: 127.0.0.1:20.
    226 transfer complete.
    status:> transfer complete.


    其中,

    port 127,0,0,1,28,37告诉服务器当收到这个port指令后,连接ftp客户的28x256 37=7205这个端口。
    accepting connection: 127.0.0.1:20表示服务器接到指令后用20端口连接7205端口,而且被ftp客户接受。

    比较分析

      在这两个例子中,请注意: port模式建立数据传输通道是由服务器端发起的,服务器使用20端口连接客户端的某一个大于1024的端口;在pasv模式中,数据传输的通道的建立是 由ftp客户端发起的,他使用一个大于1024的端口连接服务器的1024以上的某一个端口。如果从c/s模型这个角度来说,port对于服务器来说是 outbound,而pasv模式对于服务器是inbound,这一点请特别注意,尤其是在使用防火墙的企业里,比如使用微软的isa server 2000发布一个ftp服务器,这一点非常关键,如果设置错了,那么客户将无法连接。

      最后,请注意在ftp客户连接服务器的整个过程中,控制信道是一直保持连接的,而数据传输通道是临时建立的。

      在本文中,朗月繁星把重点放到了ftp的连接模式,没有涉及ftp的其他内容,比如ftp的文件类型(type),格式控制(format control)以及传输方式(transmission mode)等。不过这些规范大家可能不需要花费过多的时间去了解,因为现在流行的ftp客户端都可以自动的选择正确的模式来处理,对于ftp服务器端通常 也都做了一些限制,如下:
  • 类型:a s c i i或图像。
  • 格式控制:只允许非打印。
  • 结构:只允许文件结构。
  • 传输方式:只允许流方式
  • 阅读(1502) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~
    ")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
    网站地图