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. IIS发布静态页面配置

    第一步:按照正常网站发布添加网站: 第二步:修改该网站的默认文档: 第三步:添加默认文档,把静态页的名称添加进去: 第四步:重启网站,浏览:

  2. 为 10000+ 业务系统提供数据可视化能力的 AntV 又进化了

    小蚂蚁说: 2018 年 AntV 品牌日以知新.知心为主题,旨在让产品一直「知新」,与用户一直「知心」.AntV 是蚂蚁金服全新一代数据可视化解决方案,致力于提供一套简单方便.专业可靠.无限可能的数 ...

  3. Ubuntu18.04的网络配置

    网卡与DNS配置 1)打开命令窗口(右键单机桌面选择Open Terminal或者用快捷键Ctrl+Alt+T打开终端),输入ip a查看自己的网卡编号 2)输入命令sudo vim /etc/net ...

  4. Algorithm 算法基础知识(未完成

    基础概念不讲,记录课上关键部分 时间复杂度(Time Complexity) 算法所需要花的时间 比较时间复杂度(主要看问题的规模) 时间频度(算法执行次数)T(n)和T(n1),如果两个时间频度为等 ...

  5. Microsoft Active Directory(LDAP)连接常见错误代码

    接下来显示的认证错误类似于这样: "The exception is [ LDAP: error code 49 - 80090308: LdapErr: DSID-0Cxxxxxx, co ...

  6. JS _proto_ 和 prototype

    转载自:https://www.cnblogs.com/wuwenjie/p/5433776.html 大佬讲得很明白,自己也收藏一下! 初学javascript的时候也跟题主一样搞不清楚,自己好好总 ...

  7. win10新系统修改onedrive目录,提示找不到OneDrive目录

    win10不知更新了什么,x1c非常卡一跳一跳的,很多年没见过了-_-!!( 原因排查:http://www.cnblogs.com/xuanmanstein/p/8878180.html). 于是重 ...

  8. Dreamweaver 1 网页制作

    1.站点 1.1 创建站点 点击菜单栏中站点进行站点创建,输入站点名称,路径 1.2 设置图像文件夹 1.3 站点管理 站点的编辑.复制.删除 2.页面属性栏 2.1 外观 1.设置页面整体的字体.大 ...

  9. Angular 学习笔记 (version 6 小笔记)

    1. lazyload 的 path 变成相对路径了, 不过如果你用 ng update 的话, 依然可以不需要修改, cli config 好像能调支持绝对路径的写法. const routes: ...

  10. three.js 制作一个简单的圆柱体模型

    <!DOCTYPE html> <html lang="en"> <head> <title>three.js webgl - or ...