• ftp主动模式和被动模式


    FTP模式说明:

    FTP是基于TCP的服务,使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口)。

    固定的命令端口:21

    数据端口:(取决于连接模式)20或者>1024其它端口

    主动FTP

    主动方式的FTP是这样的:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听端口N+1,并发送FTP命令"port N+1"到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。

    针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP:

    1. 任何端口到FTP服务器的21端口 (客户端初始化的连接 S<-C)

    2. FTP服务器的21端口到大于1024的端口(服务器响应客户端的控制端口 S->C)

    3. FTP服务器的20端口到大于1024的端口(服务器端初始化数据连接到客户端的数据端口 S->C)

    4. 大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口 S<-C)

    总结:

    命令连接:客户端>1024端口-> 服务器21端口
    数据连接:客户端>1024端口<- 服务器20端口

    被动FTP

    为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。

    在被动方式FTP中,命令连接和数据连接都由客户端,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。

    对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:

    1. 从任何端口到服务器的21端口 (客户端初始化的连接 S<-C)

    2. 服务器的21端口到任何大于1024的端口 (服务器响应到客户端的控制端口的连接 S->C)

    3. 从任何端口到服务器的大于1024端口 (入;客户端初始化数据连接到服务器指定的任意端口 S<-C)

    4. 服务器的大于1024端口到远程的大于1024的端口(出;服务器发送ACK响应和数据到客户端的数据端口 S->C)

    总结:

    命令连接:客户端>1024端口-> 服务器21端口
    数据连接:客户端>1024端口-> 服务器>1024端口

    根据上面的基本描述,我们可以知道。整改备份数据上传只能使用主动模式连接才能成功!

    以下为各客户端默认连接方式说明及主动模式更改方法

    各客户端默认连接方式说明:

    1、 IE浏览器访问方式-------à被动模式

    2、 Linux字符连接------------à被动模式

    3、 Windows字符连接-------à主动模式

    IE更改FTP连接方式为主动方法:

    工具---Internet选项---高级---使用被动FTP(去掉勾选)-------OK

    Linux下更改ftp连接方式为主动:

    当ftp正常连接后输入:passive 将passive 模式关闭即可。

    事例如下:

    Remote system type is Windows_NT.

    ftp> ls

    227 Entering Passive Mode (192,168,6,23,4,10).

    ftp: connect: Connection refused

    ftp> passive

    Passive mode off.

    ftp> ls

    200 PORT command successful.

    由于整个备份计划全部由shell完成。故windows下面可不做任何更改。Linux下面则需做少许改动。

    实际操作如下:

    更改shell上传部分脚本如下:

    ftp -inv <<EOF

    open 192.168.x.xx

    user username password

    passive

    binary

    cd bakdir

    mput ${backname}*

    mdelete ${backname}${olddate}.tgz

    EOF

    更改防火墙策略。增加以下内容:

    # vi /etc/sysconfig/iptables

    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --sport 20 -j ACCEPT

    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --sport 21 -j ACCEPT

    重启防火墙生效!!

  • 相关阅读:
    什么是基于注解的容器配置?
    一个线程运行时发生异常会怎样?
    Java 中你怎样唤醒一个阻塞的线程?
    为什么 wait, notify 和 notifyAll 这些方法不在 thread 类里面?
    Java 中 notify 和 notifyAll 有什么区别?
    在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处?
    java 中有几种方法可以实现一个线程?
    什么是AOP?
    什么是竞争条件?你怎样发现和解决竞争?
    Mybatis 是如何进行分页的?分页插件的原理是什么?
  • 原文地址:https://www.cnblogs.com/randomlee/p/8882064.html
Copyright © 2020-2023  润新知