1.相关介绍

1.1主动模式和被动模式

主动模式:服务端通过指定的数据传输端口(默认20),主动连接客户端提交的端口,向客户端发送数据。

被动模式:服务端采用客户端建议使用被动模式,开启数据传输端口的监听,被动等待客户端的连接然后向客户端发送数据。

一言以蔽之,服务端主动连接客户端就是主动模式,服务端被动等待客户端连接(客户端主动连接服务端)就是被动模式。

ftp有主动模式被动模式而ssh等其他协议没有这种说法的根源是:ftp要使用别的端口来传输数据。

1.2本文环境

192.168.220.128--centos 6.5,作为服务端,通过yum安装的vsftpd,使用默认配置

192.168.220.130--windows 7,作为客户端。

windows cmd中的ftp只支持主动模式我们以之来演示主动模式的交互过程,一般的ftp客户端都优先采用被动模式这里我们以FileZilla Client来演示被动模式的交互过程。

2.主被动交互过程数据包分析

2.1主动模式交互过程分析

在cmd中登录后,执行ls -l,以下是ls -l执行的交互数据包

4--客户端(52667) 请求服务端(21)连接本机192.168.220.128:52670

5--服务端(21)向客户端(52667)表示可以,不过下次最好用被动模式

6--客户端(52667)请求服务端(21)执行:ls -l

7--握手包1,服务端默认数据连接端口(20),主动连接客户端给过来的端口(52670)

8--握手包2,客户端(52670)向服务端(20)表示同意连接

9--握手包3,服务端(20)确认与客户端(52670)建立连接

10--服务端(21)向客户端(52667)表示以下是命令执行返回结果

11--返回结果数据包1

12--返回结果数据包2

13--挥手包1,服务端(20)向客户端(52670)表示数据已完成传输

14--挥手包2,客户端(52670)回复服务端(20)己方也准备处理完成

15--服务端(21)向客户端(52667)表示数据已传输完成

16--客户端(52667)向服务端(21)表示好的

17--挥手包3,客户端(52670)向服务端(20)表示可断开连接

18--挥手包4,客服端(20)向客户端(52670)确认断开连接

2.2被动模式交互过程分析

在FileZilla Client中登录后,点击列出根目录,以下是点击列出根目录后的交互数据包

21--客户端(52550)请求服务端执行:cd /

22--服务端(21)回复客户端:250 Directory successfully changed.

23--客户端(52550)请求服务端执行:pwd

24--服务端(21)回复客户端:257 "/"

25--客户端(52550)请求下一操作使用被动模式

26--服务端(21)同意采取被动模式,并返回自己将要监听的地址192.168.220.128:64758

27--客户端(52550)请求执行:ls

28--握手包1,客户端52552请求连接64758

29--握手包2,服务端64758回复同意连接请求

30--握手包3,客户端52552回复服务端64758确认建立数据传输链路连接

31--服务端表示将要发回命令执行结果

35--返回结果数据包1(64758端口到52552端口)

36--返回结果数据包2(64758端口到52552端口)

37--挥手包1,服务端(64758)表示自己数据已完全传输

38--挥手包2,客户端(52552)表示自己数据也将完成传输

39--服务端(21)向客户端(52550)表示执行结果已完全返回

40--客户端(52550)向服务端(21)表示好的

41--挥手包3,客户端(52552)向服务端(64758)表示可断开数据传输链路

42--挥手包4,服务端(64758)回复客户(52552)端确认断开

3.关于NAT下的ftp等几个问题的讨论

3.1在被动模式中,服务端数据传输的端口由客户端指定吗

答案是否定的。在一些资料中可以看到客户端决定服务端端口的说法,但在2.2交互过程中我们已可以清楚地看到,客户端只是决定使用被动模式,服务端应允后就传回了自己监听的端口。

3.2nat环境下ftp存在问题的根本原因是什么

在实践中我们会发现,网络nat环境下不论是主动模式还是被动模式,当执行ls等需要建立数据传输链路的文件时,都会出现超时报错(ftp:connect: Connection timed out.)。

根本的原因是ftp传输数据要使用别的端口,直接的原因是要么是客户端在应用层中指出自己的ip:port(主动模式)要么是服务端在应用层中指出自己的ip:port

在主动模式中,服务端主动连接客户端的ip:port,所以(从原理上讲)只要将服务端的数据传输端口(默认20)也做映射使该端口也能访问客户端网络即可。(但实际遇到的情况中,即便做了映射也还是不行,暂未明其原因)

在被动模式中,服务端指出自己的ip:port,比如我们这里假设服务端真实ip为10.10.220.128,映射ip为192.168,.220.128,服务端将要监听的地址10.10.220.128:64758,发给客户端(192。168.220.130),客户端(192.168.220.130)就向10.10.220.128:64758发起连接请求。但实际上客户端只有到达其映射地址(192.168.220.128)的路由,并没有直接到10.10.220.128的路由,所以连接请求必然是没有回应的。

3.3为什么我们可以ftp服务器

众所周知,上网时个人一般都只能分配到一个私网地址,从这角度来说我们要ftp到服务器,使用主动模式肯定会出问题,但在实际操作中可以看到一般都可以成功ftp。推测可能是nat设备拦载了ftp指定ip:port的数据包,将其修改为了映射出去的ip:port。

ftp主动模式与被动模式交互过程分析的更多相关文章

  1. FTP 主动模式 与被动模式

    今天在被电信运营商给的没有内网ip被nat后的内网ip访问我的ftp服务器时出现了,连接被关闭的错误,经过多番查询发现问题原因是因为NAT内网ip没有被有效地转换为外网ip,也即是说NAT对ftp协议 ...

  2. [转] FTP主动模式和被动模式的区别

    转自原文FTP主动模式和被动模式的区别 基础知识: FTP只通过TCP连接,没有用于FTP的UDP组件.FTP不同于其他服务的是它使用了两个端口, 一个数据端口和一个命令端口(或称为控制端口).通常2 ...

  3. FTP主动模式和被动模式

    FTP主动模式和被动模式 FTP是仅基于TCP的服务,不支持UDP.与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口).通常来说这两个端口是21(命令端口)和20(数据端口 ...

  4. Ftp主动模式和被动模式以及java连接ftp模式设置

    Ftp主动模式和被动模式以及java连接ftp模式设置 https://www.cnblogs.com/huhaoshida/p/5412615.html (1) PORT(主动模式) PORT中文称 ...

  5. [服务]ftp主动模式和被动模式

    经常忘记这个东西.于是总结下这东西感受下这个协议. FTP连接方式 控制连接:标准端口为21,用于发送FTP命令信息 数据连接:标准端口为20,用于上传.下载数据 数据连接的建立类型: 主动模式:服务 ...

  6. FTP主动模式与被动模式,及java FTPClient模式设置

    FTP的主动模式与被动模式 FTP服务器使用20和21两个网络端口与FTP客户端进行通信. FTP服务器的21端口用于传输FTP的控制命令,20端口用于传输文件数据. FTP主动模式: FTP客户端向 ...

  7. java ftp主动模式与被动模式

    首先介绍一下主动模式与被动模式: 1.PORT(主动模式) ftpClient.enterLocalActiveMode(); PORT中文为主动模式,工作的原理:FTP客户端连接到FTP服务器的21 ...

  8. FTP主动模式和被动模式的区别

    基础知识: FTP只通过TCP连接,没有用于FTP的UDP组件.FTP不同于其他服务的是它使用了两个端口, 一个数据端口和一个命令端口(或称为控制端口).通常21端口是命令端口,20端口是数据端口.当 ...

  9. FTP主动模式和被动模式的区别(转)

    dd by zhj: 一般使用被动模式,在命令行下,被动模式的格式是:ftp -p (yinservice_env) ajian@ubuntu-desk:~$ ftp -pftp> 之前在用命令 ...

随机推荐

  1. C# 防止窗体闪烁

    protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle ...

  2. CSDN-markdown编辑器语法——字体、字号与颜色

     Markdown是一种可以使用普通文本编辑器编写的标记语言,通过类似HTML的标记语法,它可以使普通文本内容具有一定的格式.但是它本身是不支持修改字体.字号与颜色等功能的!   CSDN-markd ...

  3. FreeCodeCamp----Intermediate Algorithm Scripting解法

    Finders Keepers 写一个 function,它浏览数组(第一个参数)并返回数组中第一个通过某种方法(第二个参数)验证的元素. 如果你被卡住了,记得开大招 Read-Search-Ask. ...

  4. spring controller方法和jstl

    1复杂类型查询:查询条件已经多于一个实体类中的属性 1)可以创建一个类用于组合查询条件 基础类 public class Items { private Integer id; private Str ...

  5. java中\r与\n的区别

    \r : return 到当前行的最左边. \n: newline 向下移动一行,并不移动左右. Linux中\n表示回车+换行: Windows中\r\n表示回车+换行. 测试了一下,在java,w ...

  6. EndNote基础教程

    endnote的使用方法 http://www.360doc.com/content/17/1211/08/31841004_711998509.shtml 导入文献 File-Import-Flod ...

  7. Windows 下使用virtualenv 第一次使用flask

    前几天在Windows下virtualenv 了一个名为 venv的目录,然后,今天差点忘了怎么进去虚拟环境. 发现在创建虚拟环境的venv目录下有个Scripts目录,里面有一堆 名为activat ...

  8. 力扣(LeetCode) 27. 移除元素

    给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...

  9. selenium Grid2 分布式自动化测试环境搭建

    一.Selenium Server 环境配置 1.selenium grid的组成与作用:由一个集线器hub和多个客户机node组成,如果你的程序需要在不用的浏览器,不同的操作系统上测试,而且比较多的 ...

  10. 《UnityShader入门精要》学习笔记之渲染流水线

    第一种分类方式: 图形管道(如下7步): 顶点数据 : 由3D模型传递的三角形网格 顶点着色 : 编写CG程序对各个顶点进行着色 生成几何图元 : 连接特定的顶点生成几何图元,例如连接三个顶点生成一个 ...