为什么通过HTTP上传下载大文件总是通过80端口,而FTP上传下载文件却不通过21端口,FTP总要另开一个端口?是不是因为性能的考量?不过我也不觉得HTTP传文件慢啊?

解决方案 »

  1.   

    实际上FTP服务要用到两个端口,21号端口是用来建立控制连接的,而20号断口才是用来建立数据连接的(即用来传输数据的).
      

  2.   

    HTTP也一样,80端口是用来建立连接用的,它会起一个别的端口去接收数据
      

  3.   

    HTTP也一样,80端口是用来建立连接用的,它会起一个别的端口去接收数据有吗?建立连接以后就直接返回数据了,哪里有其他端口?
      

  4.   

    为什么ftp不直接用port21传文件,那也不会有任何问题啊
      

  5.   

    FTP服务采用两个端口有一点还是出于安全的的角度来考虑的.
      

  6.   

    很简单的道理,ftp要发控制指令
      

  7.   

    因为FTP的协议太简单,在那么简单的协议下,一个连接要同时处理FTP命令和数据传输是非常麻烦的。
      

  8.   

    http://www.cnpaf.net/Class/FTP/0532918532659443.html
      

  9.   

    问问:
    如果一个FTP服务器要处理多个FTP客户端连接,它除了用21号port侦听连接请求,会不会用多个port与这些客户端分别连接? 一个http服务器呢?
      

  10.   

    同志
    他开两个端口是为了达到这样一个目的
    ftp传输的文件必须保证出错在一个可控的范围内。
    这时就用到所以用了两个端口。
      

  11.   

    To 兄弟们:我只是一个假设,"或许" 会更快。要说不可以实现,那也是不对的。 http 协议 keep-conective 不就是只有一个80端口,而达到了传输 html 文件的吗。ftp 使用 2 个线程,有他的考虑,但也有他的弊端。我们沿用就是,但并不是说一个端口不能实现。
      

  12.   

    楼主的问题提得很巧妙  :)如果只问“为什么 FTP 要使用两个端口”,楼上的很多答案看起来都挺有道理。但问题是,跟 HTTP 一比较,问题就凸显出来了。包括 fifthfloor() 说的“ftp传输的文件必须保证出错在一个可控的范围内”,似乎也不是必须的理由了。难道,只能归结为“历史原因”?“龟腚”?BTW: 看到楼上的发言,好像有些朋友混淆了“端口”和“连接”的概念,事实上,同一个“端口”可以同时维护多个“连接”的,每个连接就是一个 socket,它们的区别只是“对方地址和端口”不同。比如一个 web server,它在 80 端口进行监听,每监听到一个连接请求,都会创建一个 socket,而这些 socket 的本地端口都是 80,并不是其它的什么端口。
      

  13.   

    而这些 socket 的本地端口都是 80,并不是其它的什么端口。
    =============
    楼上的,你确定吗? 这个本地端口是用来传送数据的.如果你确定HTTP服务器是这样的,你觉得FTP服务器又是怎么样的? 多个Flash XP来联Serv-U时,都通过20号端口来发送数据?
      

  14.   

    > 而这些 socket 的本地端口都是 80,并不是其它的什么端口。
    > =============
    > 楼上的,你确定吗? 这个本地端口是用来传送数据的.我确定!  :)
    其实要看清楚这个问题很容易,如果你是在 Windows2000 上跑的 web server,用下面的命令行就可以看到端口的使用情况:C:\> netstat /an你会发现本地 80 端口跟很多个远程 IP 的某个端口有连接,当然就是向远程的浏览器发送数据的喽,否则又能是干什么的?> 如果你确定HTTP服务器是这样的,你觉得FTP服务器又是怎么样的? 
    > 多个Flash XP来联Serv-U时,都通过20号端口来发送数据?FTP 也是一样,有兴趣的话可以在 FTP 服务器上用 netstat 命令看一下。就像我前面说的,“端口”和“连接”是两个概念,同一个端口上可以同时建立很多个连接。不严格地说,“连接”是一个四元组 {本地 IP,本地 port,远程 IP,远程 port},这 4 个值里面任何一个值不同,都可以构成两个独立的“连接”,两个连接可以互不干扰地独立工作。数据的传输是通过“连接”,而不是通过“端口”,“端口”是用来建立“连接”的。
      

  15.   

    http也动态使用其他端口的,不然不是变成单线程的了
      

  16.   

    http也动态使用其他端口的,不然不是变成单线程的了
    ----------
    多线程也可以用一个端口啊,看tomcat源码就知道了