FTP连接
命令连接

传输命令(客户端发给服务端的命令),服务端的21/tcp

数据连接

传输数据(传输数据时建立,数据传输完拆除)

数据链接的建立方法:主动、被动
主动模式(PORTstyle服务器主动)

服务器端通过20端口主动连接客户端,客户端监听在与服务器端的建立连接的端口+1上。

命令(控制): 客户端:随机port — 服务器:tcp21
数据: 客户端:随机port — 服务器:tcp20

主动模式要求客户端和服务器端同时打开并且监听一个端口以创建连接,主动模式创建连接过程如下:

  1. 客户端打开一个随机的端口(端口号大于1024,在这里,我们称它为x),同时一个FTP进程连接至服务器的21号命令端口。此时,该tcp连接的来源地端口为客户端指定的随机端口x,目的地端口(远程端口)为服务器上的21号端口;
  2. 客户端开始监听端口(x+1),同时向服务器发送一个端口命令(通过服务器的21号命令端口),此命令告诉服务器客户端正在监听的端口号并且已准备好从此端口接收数据。这个端口就是我们所知的数据端口;
  3. 服务器打开20号源端口并且创建和客户端数据端口的连接。此时,来源地的端口为20,远程数据(目的地)端口为(x+1);
  4. 客户端通过本地的数据端口创建一个和服务器20号端口的连接,然后向服务器发送一个应答,告诉服务器已经创建好连接,可以开始数据传输;
被动模式(PASV style

)

命令(控制):客户端:随机port — 服务器:tcp21
数据: 客户端:随机port — 服务器:随机port

客户端发送连接请求,在FTP服务器收到Pasv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTPserver不再需要建立一个新的和客户端之间的连接。

 服务器被动模式数据端口示例:
227 Entering Passive Mode (192,168,175,138,224,59)
服务器数据端口为:224*256+59
主动连接与被动连接的优缺点
  1. 主动连接对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。

  2. 被动连接对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。

  3. 可通过为FTP服务器指定一个有限的端口范围来减小服务器端口暴露的风险。

操作系统上的FTP模式

Linux客户端默认使用被动模式

Windows客户端默认使用主动模式

 Linux系统客户端若要切换主动模式,可使用:
ftp -A ServerIP Port
防火墙追踪问题
  • 服务器的控制端口是21,数据端口是随机的,且是客户端去连接对应的数据端口,所以在做静态的映射话只开放21端口是不可以的。此时需要做DMZ。大部分网页浏览器要求使用被动模式,然而并不是所有的FTP服务器都支持被动模式。由于FTP连接时的密码和传输的文件内容都使用明文传输,极其不安全。且因为必须开放一个随机的端口以创建连接,导致客户端防火墙很难追踪主动模式下的FTP流量。因此使用被动模式的FTP可以减少许多问题。此外,FTP服务器在需要传输较多的小文件时性能不好。
  • 很多防火墙在设置的时候都是不允许接受外部发起的连接,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP/20无法和内部网络的客户端建立一个新的连接,造成无法工作。
FTP服务器和客户端软件

FTP服务器

Wu-ftpd,Proftpd,Pureftpd,ServU,IIS

vsftpd:Very Secure FTP Daemon,CentOS默认FTP服务器高速,稳定,下载速度是WU-FTP的两倍。ftp.redhat.com数据:单机最多可支持15000个并发

客户端软件:

ftp,lftp,lftpget,wget,curl

ftp -A ftpserver port      (-A 主动模式 -p 被动模式)

lftp -u username ftpserver

lftp username@ftpserver

lftpget ftp://ftpserver/pub/file

gftp: GUI centos5

filezilla,CuteFtp,FlashFXP,LeapFtp

IE

 ftp://username:password@ftpserver
状态码

1XX:信息类 125:数据连接打开

2XX:成功类状态 200:命令OK 230:登录成功

3XX:补充类 331:用户名OK

4XX:客户端错误 425:不能打开数据连接

5XX:服务器错误 530:不能登录

PAM(插入式认证)

PAM是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段。

PAM在FTP中的使用
  • pam中的模块每一种提供一种认证功能或认证检查功能;配置文件在/etc/pam.d/
  • pam是一种认证框架,自己不需要认证功能,可以帮其他应用程序提供认证服务;为每一种应用程序提供库文件;

    -高度模块化;
  • ftp默认是使用pam进行认证的;
PAM支持的四种管理界面
  1. 认证管理(authenticationmanagement)

    主要是接受用户名和密码,进而对该用户的密码进行认证,并负责设置用户的一些秘密信息。
  2. 帐户管理(accountmanagement)

    主要是检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的限制等等。
  3. 密码管理(passwordmanagement)

    主要是用来修改用户的密码。
  4. 会话管理(sessionmanagement)

    主要是提供对会话的管理和记账(accounting)。

文件服务之二:ftp协议的更多相关文章

  1. [计算机网络-应用层] FTP协议

    文件传输协议:FTP 如下图所示:用户通过一个FTP用户代理与FTP交互.该用户首先提供远程主机的主机名,使本地主机的FTP客户机进程建立一个到远程主机FTP服务器进程的TCP连接.然后,该用户提供用 ...

  2. 基于CentOS 搭建 FTP 文件服务

    系统要求: CentOS 7.2 64 位操作系统 一. 安装 VSFTPD (vsftpd 是在 Linux 上被广泛使用的 FTP 服务器,根据其[官网介绍][https://security.a ...

  3. vsftpd-基于ftp协议的文件传输服务器软件

    第一部分:在Linux上部署vsftpd服务 1. vsftpd简介 1.1 vsftpd是什么? ftp(File Transfer Protocol)文件传输协议.(实现不同操作系统之间文件的传输 ...

  4. 转:【专题十一】实现一个基于FTP协议的程序——文件上传下载器

    引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...

  5. 搭建 FTP 文件服务

    1.安装并启动 FTP 服务 2.配置 FTP 权限 3.准备域名和证书 4.访问 FTP 安装 VSFTPD 使用 yum 安装 vsftpd: yum install vsftpd -y vsft ...

  6. 腾讯云-搭建 FTP 文件服务

    搭建 FTP 文件服务 目的:搭建认证登录的FTP具有读写权限 安装并启动 FTP 服务 任务时间:5min ~ 10min 安装 VSFTPD 使用 yum 安装 vsftpd: yum insta ...

  7. 搭建 FTP 文件服务vsftpd

    安装并启动 FTP 服务 安装 VSFTPD 使用 yum 安装 vsftpd: yum install vsftpd -y vsftpd 是在 Linux 上被广泛使用的 FTP 服务器,根据其[官 ...

  8. FTP文件传输协议两种模式 ftp协议集,错误码集,ftp客户端命令集

    TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20.FTP协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置.联接的方式.甚至是是否使用相同的操 ...

  9. 腾讯云,搭建 FTP 文件服务

    腾讯云,搭建 FTP 文件服务 腾讯云,搭建 FTP 文件服务 安装并启动 FTP 服务 任务时间:5min ~ 10min 安装 VSFTPD 使用 yum 安装 vsftpd: yum insta ...

随机推荐

  1. Java for-each循环解惑

    Java for-each循环解惑 2014/04/24 | 分类: 技术之外 | 0 条评论 | 标签: JAVA 分享到:21 本文由 ImportNew - liqing 翻译自 javarev ...

  2. js 文件异步上传 显示进度条 显示上传速度 预览文件

    通常文件异步提交有几个关键 1.支持拖拽放入文件.2.限制文件格式.3.预览图片文件.4.上传进度,速度等,上传途中取消上传.5.数据与文件同时上传 现在开始笔记: 需要一个最基础的元素<inp ...

  3. Java入门练习之四则运算

    Java入门练习之四则运算 项目目的 制作一个Java控制台程序,让他可以随机生成四则运算,并针对用户的输入判断对错. 项目分析 该项目本质上是一个四则运算出题器,可以创建一个Question类,其中 ...

  4. 【缓存】介绍和使用场景 MEMCACHE REDIS

    缓存缓存就是在内存中存储的数据备份,当数据没有发生本质改变的时候,我们就不让数据的查询去数据库进行操作,而去内存中取数据,这样就大大降低了数据库的读写次数,而且从内存中读数据的速度比去数据库查询要快一 ...

  5. redis key命令

    key命令主要用于管理redis中的key del key //删除key, 不存在的key会忽略 dump key //序列化key,不存在的key返回nil exists key //判断key是 ...

  6. vim中制表符tabstop用法

    设置tabstop成为其它值可能会导致文件在其它地方出现错误有四种主要方法使用tabs在vim里: 1.总是保持tabstop=8,设置softtabstop=4.shiftwidth=4(或3.或任 ...

  7. Ubuntu 终端使用ss代理

    用polipo软件,这个软件可以吧socket5转换成http代理 $ sudo apt-get install polipo $ sudo vim /etc/polipo/config 在文件中加入 ...

  8. c++ 调用 wmi 获取数据

    #define _WIN32_DCOM #include <iostream> using namespace std; #include <comdef.h> #includ ...

  9. docker 网络 路由

    通过在Docker宿主机上添加静态路由实现跨宿主机通信 模拟环境 主机1(192.168.58.144) 设置docker0 网关 (172.17.0.1/16)                主机2 ...

  10. bond模式

    1.mode=0(balance-rr)(平衡抡循环策略) 链路负载均衡,增加带宽,支持容错,一条链路故障会自动切换正常链路.交换机需要配置聚合口,思科叫port channel.特点:传输数据包顺序 ...