V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
rrfeng
V2EX  ›  问与答

关于 FTP 协议, PASV 为什么服务端要开随机端口?直接开 20 不行吗?

  •  
  •   rrfeng · 2014-12-23 12:55:18 +08:00 · 3717 次点击
    这是一个创建于 3608 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如果是为了应对多个客户端同时连接,控制端口为何可以接受多个客户端连接?
    17 条回复    2014-12-23 18:59:25 +08:00
    oott123
        1
    oott123  
       2014-12-23 12:58:41 +08:00 via Android
    你说的好像很有道理,我也想知道,楼主有答案了请@我谢谢~
    yywudi
        2
    yywudi  
       2014-12-23 13:32:09 +08:00   ❤️ 3
    楼主请先去google一下FTP协议,active 模式和 passive模式的区别
    http://slacksite.com/other/ftp.html

    Active FTP :
    command : client >1023 -> server 21
    data : client >1023 <- server 20

    Passive FTP :
    command : client >1023 -> server 21
    data : client >1024 -> server >1023

    发数据的时候,active模式是服务器的20端口主动去连客户端,在某些场景下,客户端在防火墙下面不允许远端20端口穿透防火墙(or NAT) 直接连到客户端
    这时候采用passive模式,让客户端重新主动发起一个连接到服务端上协商好的一个随机端口来传数据
    rrfeng
        3
    rrfeng  
    OP
       2014-12-23 13:38:19 +08:00
    @yywudi
    你没有回答我的问题。我怀疑你是否看懂了我问的什么。

    但是我想通了大概是什么原因:
    @oott123 因为服务端要两种模式并存,20 端口用来发起到 active client 的连接了,所以不能被监听。
    oott123
        4
    oott123  
       2014-12-23 13:58:11 +08:00 via Android
    @rrfeng 那为何不再监听一个固定的端口,比如19?
    victor
        5
    victor  
       2014-12-23 13:59:45 +08:00
    @yywudi 解释的真好,原来不懂这个原理,感谢已发送
    yywudi
        6
    yywudi  
       2014-12-23 14:00:52 +08:00
    @rrfeng sorry, 那我之前是真的没看懂你的问题

    你是想说为什么PASV模式客户端连到服务端为什么不直接连20端口,而是连一个>1024的随机端口?

    那大概是像你所说的,20端口是被设计用来主动发起数据连接的,不能被监听...
    rrfeng
        7
    rrfeng  
    OP
       2014-12-23 14:09:11 +08:00
    @oott123
    够了……俩就够复杂了,仨还怎么玩。
    oott123
        8
    oott123  
       2014-12-23 14:14:46 +08:00 via Android
    @rrfeng 那直接写到21端口呢?
    otakustay
        9
    otakustay  
       2014-12-23 14:40:43 +08:00
    我觉得主要原因是client的防火墙配置是未知的,用户也不一定有专业能力去配好防火墙,所以固定一个端口的话鬼知道什么时候就被墙了,所以就采用随机端口协商的方式
    oott123
        10
    oott123  
       2014-12-23 15:00:58 +08:00 via Android
    @otakustay 随机的鬼知道什么时候就背墙了…
    对网络管理员来说更加不方便吧?要么就得分析 FTP 协议(加密的时候还没什么好办法,而且效率可能还不太好),要么就得把那一个范围的端口全打开,两者都不是什么好办法…
    Showfom
        11
    Showfom  
       2014-12-23 15:48:59 +08:00 via iPhone
    楼主这么一说我发现我一年没用过FTP了2333333
    EPr2hh6LADQWqRVH
        12
    EPr2hh6LADQWqRVH  
       2014-12-23 16:04:58 +08:00
    难道不是控制信道和数据信道分离的考虑?
    rrfeng
        13
    rrfeng  
    OP
       2014-12-23 16:07:58 +08:00
    @Showfom
    早该废除了!太难用
    Showfom
        14
    Showfom  
       2014-12-23 16:12:53 +08:00 via iPhone
    @rrfeng 文件多的话本地打包好用 scp 塞进去解压 文件少么直接 scp 咯 就是速度稍微慢点 大文件的话怎么都慢 宁可服务器里 wget
    kslr
        15
    kslr  
       2014-12-23 17:08:21 +08:00
    百度百科:FTP协议
    看工作方式
    主要是为了突破防火墙限制
    dorentus
        16
    dorentus  
       2014-12-23 17:58:25 +08:00 via iPhone
    1024 以内的端口号都是要注册/保留给已知协议用的吧,所以随机的端口号才都会选后面的。

    至于为什么要随机,而不是指定一个端口让所有客户端来连,就不清楚了。可能是怕麻烦?
    mfaner
        17
    mfaner  
       2014-12-23 18:59:25 +08:00
    似乎监听固定端口的话,同一IP下多个客户端没法辨认
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2958 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:48 · PVG 10:48 · LAX 18:48 · JFK 21:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.