FTP协议 / FTP Protocol


FTP全称为File Transfer Protocol(文件传输协议),常用于Internet上控制文件的双向传输,常用的操作有上传和下载。基于TCP/IP,基于RFC959通信协议。

0 FTP理论 / FTP Theory

详细的理论可以参考这里

1 FTP结构 / FTP Structure

FTP如同其他的很多通讯协议,FTP通讯协议也采用客户机 / 服务器(Client / Server)架构。用户可以通过各种不同的FTP客户端程序,借助FTP协议,来连接FTP服务器,以上传或者下载文件。

2 FTP通讯端口 / FTP Communication Port

FTP的服务器与客户端之间的文件传输,需要通过端口来进行,FTP协议的端口包括:

TCP端口21:

主要用于指令传输,所有客户端发往FTP服务器的命令和服务器的反馈指令都是通过该端口进行传输。

TCP端口20:

主要用于数据传输(主动模式),例如客户端上传下载内容,以及查看目录显示内容等。

3 FTP连接模式 / FTP Communication Mode

FTP的主动模式和被动模式,两者的区别,用两张图来表示:

3.1 主动模式PORT

主动模式工作过程:

1. 客户端以随机非特权高位端口N (>1024),对server端21端口发起连接,并且之后所有控制命令均通过这条链路传送;

2. 当需要进行数据传输时,客户端开始监听N+1端口,并发送port N+1的命令到FTP服务器;

3. 服务端会主动以20端口连接到客户端的N+1端口。

总结流程如下:

客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了***X端口,你过来连接我”。于是服务器从20端口向客户端的***X端口发送连接请求,建立一条数据链路来传送数据

主动模式的优点:

服务端配置简单,利于服务器安全管理,服务器只需要开放21端口

主动模式的缺点:

如果客户端开启了防火墙,或客户端处于内网(NAT网关之后), 那么服务器对客户端端口发起的连接可能会失败

3.2 被动模式PASV

被动模式工作过程:

1. 客户端打开随机非特权端口N和N+1,并以端口N连接服务端的21端口(提交PASV命令);

2. 服务端开启一个非特权端口M为被动端口,并返回给客户端;

3. 客户端以N+1的端口主动连接服务端的被动端口M,从而建立连接传输数据。

总结流程如下:

客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了***X端口,你过来连接我”。于是客户端向服务器的***X端口发送连接请求,建立一条数据链路来传送数据。

被动模式缺点:

服务器配置管理稍显复杂,不利于安全,服务器需要开放随机高位端口以便客户端可以连接,因此大多数FTP服务软件都可以手动配置被动端口的范围

被动模式的优点:

对客户端网络环境没有要求,而对服务端有。

被动模式客户端Log

*resp* '220 Welcome to my FTP server.'
*cmd* 'USER Admin'
*resp* '331 Username ok, send password.'
*cmd* 'PASS ******'
*resp* '230 Admin login successful'
*welcome* '220 Welcome to my FTP server.'
*cmd* 'TYPE I'
*resp* '200 Type set to: Binary.'
*cmd* 'PASV'
*resp* '227 Entering passive mode (127,0,0,10,8,74).'
*cmd* 'RETR testFile.py'
*resp* '125 Data connection already open. Transfer starting.'
*resp* '226 Transfer complete.'
*cmd* 'TYPE I'
*resp* '200 Type set to: Binary.'
*cmd* 'PASV'
*resp* '227 Entering passive mode (127,0,0,10,8,105).'
*cmd* 'RETR testFile.docx'
*resp* '125 Data connection already open. Transfer starting.'
*resp* '226 Transfer complete.'
*cmd* 'QUIT'
*resp* '221 Goodbye, admin.'

Note:

  1. *resp*为ServeràClient, *cmd*为ClientàServer
  2. TYPE I 为二进制方式传输
  3. '227 Entering passive mode (127,0,0,10,8,74).'表示返回了服务器IP和服务器开启的临时端口,临时端口算法为,8*256+74=2122。

参考链接


http://blog.csdn.net/sever2012/article/details/7074426

http://blog.csdn.net/cuker919/article/details/6403925

Python的网络编程[1] -> FTP 协议[0] -> FTP 的基本理论的更多相关文章

  1. Python的网络编程[3] -> BOOTP 协议[0] -> BOOTP 的基本理论

    BOOTP协议 / BOOTP Protocol 目录 基本理论 BOOTP 与 DHCP 通信流程 数据报文格式 报文加解码实现 1. 基本理论 / Basic Theory BOOTP(Boots ...

  2. Python的网络编程[2] -> TFTP 协议[0] -> TFTP 的基本理论

    TFTP 的基本理论 目录 通信流程 数据报文格式 传输终结 异常处理 数据丢失和超时 TFTP(Trivial File Transfer Protocol,简单文件传输协议)是UDP协议族中的一个 ...

  3. Python的网络编程[4] -> DHCP 协议[0] -> DHCP 的基本理论

    DHCP协议 / DHCP Protocol 目录 DHCP 基本理论 DHCP 通信流程 DHCP 完整报文 DHCP 的 Optional 字段 DHCP 的报文类型 1 DHCP 基本理论 DH ...

  4. Python的网络编程[6] -> Modbus 协议 -> Modbus 的基本理论与 Python 实现

    Modbus协议 / Modbus Protocol 目录 Modbus 协议简介 Modbus RTU协议 Modbus TCP协议与 Python 实现 Modbus 功能码 Modbus TCP ...

  5. Python的网络编程[3] -> BOOTP 协议[1] -> BOOTP 的 Python 实现

    BOOTP实现 / BOOTP Implement 目录 BOOTP 的服务器建立过程 BOOTP 的客户端建立过程 Note: 理论部分请参考文末相关阅读链接 1 BOOTP 的服务器建立过程 服务 ...

  6. Python的网络编程[2] -> TFTP 协议[1] -> TFTP 的 Python 实现

    TFTP实现 / TFTP Implement 目录 TFTP 的服务器建立过程 TFTP 的客户端建立过程 1 TFTP 的服务器建立过程 服务器建立步骤主要有: (1)      设定服务器IP和 ...

  7. Python的网络编程[4] -> DHCP 协议[1] -> DHCP 的 Python 实现

    DHCP实现 / DHCP Implement 目录 DHCP 服务器建立过程 DHCP 报文加码实现过程 下面介绍建立一个简单的DHCP服务器,主要用于对基本的DHCP请求进行响应,目前只提供一个I ...

  8. python之网络编程

    本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具名的) 远程过程调用 ...

  9. python基础网络编程--转

    python之网络编程 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的 ...

随机推荐

  1. android的5个进程等级

    一.Foreground Process(前台进程,优先级别最高) 1.正处于 Activity Resume() 状态 2.正处于与 bound 服务交互的状态 3.正处于服务在前台运行的状态(st ...

  2. 【vim环境配置】详细实录

    [写在前面] 以下的所有内容主要参照: https://github.com/yangyangwithgnu/use_vim_as_ide . 原blog作者写的非常用心,建议大家都去看看.(个人觉得 ...

  3. Spring整合EhCache详解

    一.EhCache介绍 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider.Ehcache是一种广泛使用的开 源Java分布 ...

  4. python 之发送邮件服务[原著] 海瑞博客

    Python 发送邮件 使用默认的django的发送邮件,只适用于单邮箱. 作者:海瑞博客 http://www.hairuinet.com/ setting中配置 # send e-mail EMA ...

  5. 【bzoj1179】[Apio2009]Atm Tarjan缩点+Spfa最长路

    题目描述 输入 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口编号.接下来N行,每 ...

  6. 【bzoj2500】幸福的道路 树形dp+倍增RMQ+二分

    原文地址:http://www.cnblogs.com/GXZlegend/p/6825389.html 题目描述 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一 ...

  7. [GDOI2016] 疯狂动物园 [树链剖分+可持久化线段树]

    题面 太长了,而且解释的不清楚,我来给个简化版的题意: 给定一棵$n$个点的数,每个点有点权,你需要实现以下$m$个操作 操作1,把$x$到$y$的路径上的所有点的权值都加上$delta$,并且更新一 ...

  8. 了解腾讯开源的多渠道打包技术 VasDolly源码解析

    一.概要 大家应该都清楚,大家上线app,需要上线各种平台,比如:小米,华为,百度等等等等,我们多数称之为渠道,如果发的渠道多,可能有上百个渠道. 针对每个渠道,我们希望可以获取各个渠道的一些独立的统 ...

  9. AngularJS中获取ng-repeat动态生成的ng-model值

    需求:通过ng-repeat动态生成的CheckBox,实现勾选控制对应的批次号.如图: html: <div class="clearfix"> <div cl ...

  10. WCF技术剖析 Two

    WCF终结点和寻址之--AddressHead信息匹配代码 Contracts契约 using System; using System.Collections.Generic; using Syst ...