FTP是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一。尽管World Wide Web(WWW)已经替代了FTP的大多数功能,FTP仍然是通过Internet把文件从客户机复制到服务器上的一种途径。FTP客户机可以给服务器发出命令来下载文件,上传文件,创建或改变服务器上的目录。原来的FTP软件多是命令行操作,有了像CUTEFTP这样的图形界面软件,使用FTP传输变得方便易学。主要使用它进行“上载”。即向服务器传输文件。由于FTP协议的传输速度比较快,我们在制作诸如“软件下载”这类网站时喜欢用FTP来实现,同时我们这种服务面向大众,不需要身份认证,即“匿名FTP服务器”。
简单地说,支持ftp协议的服务器就是ftp服务器,ftp协议的连接方式有两种,一种是命令连接,一种是数据连接,而ftp的数据连接方式也有两种,一种是主动模式,一种是被动模式
主动模式的工作原理:
(1) 客户端对服务器发起请求,连接的是服务器的21号端口,客户端的端口号N是大于1024的随机端口
(2) 服务器的21号端口给予客户端响应数据流
(3) 服务器打开20号端口去连接客户端的N+1的端口
(4) 客户端给予响应,数据开始传输
主动模式工作原理图如1所示:
图1 主动模式工作原理图
被动模式的工作原理:
(1) 客户端对服务器发起的请求连接是服务器的21号端口,客户端的端口号N是大于1024的随机端口
(2) 服务器的21号端口给予客户端响应
(3) 服务器打开一个大于1024的随机端口,客户端使用N+1端口号去连接服务器打开的端口
(4) 服务器给予响应,于是数据开始传输
被动模式工作原理图如图2所示:
图2 被动模式工作原理图
需要注意的是:客户端如何连接服务器端的这个随机端口的呢?在命令连接阶段,服务器会传输172.16.2.1.113.26的字符串过去,前四个标识的是服务器的IP地址,而随机端口是通过后面两个字符计算得出的,计算法则为第一个乘以256加上第二个数,即客户端连接服务器端的这个随机端口号是113*256+26
cd 切换远程目录
lcd 切换本地目录
dir 查看远程目录
!Dir 查看本地的目录
put 上传一个文件
mput 多个文件上传
get 下载一个文件
mget 下载多个文件
mkdir 创建目录
rmdir 删除目录
? 帮助
案例
1、实施环境:Centos6.5 64位
2、要求: ftp server 使用vsftpd
新增硬盘 分区 /mnt/part1
public {匿名账号根} 公共文档存放处
home/账号1...................账号n
节省磁盘空间 本地账户分配空间配额为10M
下载速率本地账号 1M/S匿名 100K/S
最大用户连接数 100 每ip的连接数 2
3、案例实施
Step1:添加磁盘(如有多余的磁盘不需再添加)
[root@huangzhong ~]# fdisk -l 查看添加后的磁盘标志
[root@huangzhong ~]# mkfs -t ext3 /dev/sdb1 格式化磁盘
[root@huangzhong ~]# mkdir /mnt/partion //创建挂载点
[root@huangzhong ~]# mount /dev/sdb1 /mnt/partion/ 挂载磁盘
[root@huangzhong ~]# cd /mnt/partion/
[root@huangzhong partion]# mkdir public //创建匿名登录的家目录
[root@huangzhong partion]# mkdir home //创建用户的家目录
//改变创建用户时的默认家目录改为/mnt/partion/home
[root@huangzhong partion]# useradd -D -b /mnt/partion/home/
//创建一个用户,登录查看家目录
[root@huangzhong partion]# useradd user1 //创建账号
[root@huangzhong partion]# passwd user1 //设置密码
[root@huangzhong partion]# su - user1 //用user1登录
[user1@huangzhong ~]$ pwd
/mnt/partion/home//user1
Step2:实现磁盘配额
[root@huangzhong partion]# vim /etc/fstab
[root@huangzhong ~]# umount /mnt/partion/ //卸载挂载
[root@huangzhong ~]# mount -a //使用参数挂载
[root@huangzhong ~]# mount //查看是否挂载
[root@huangzhong ~]# yum install quota //安装磁盘配额工具
[root@huangzhong ~]# setenforce 0 //关闭selinux
[root@huangzhong ~]# service iptables stop
[root@huangzhong ~]# quotacheck -augvc
[root@huangzhong ~]# cd /mnt/partion/
[root@huangzhong partion]# ll
-rw-------. 1 root root 7168 Jul 4 03:37 aquota.user
//给user1分配空间配额
[root@huangzhong partion]# edquota -u user1
//把user1拷贝给user2和user3
[root@huangzhong partion]# edquota -p user1 user2
[root@huangzhong partion]# edquota -p user1 user3
//启动磁盘配额
[root@huangzhong partion]# quotaon /dev/sdb1
//加入开机启动
[root@huangzhong partion]# echo "quotaon /dev/sb1" >>/etc/rc.d/rc.local
Step3:安装vsftpd
[root@huangzhong ~]# cd /media/cdrom/Packages/
[root@huangzhong Packages]# ll |grep -i vsftpd
-r--r--r--. 2 root root 154584 Feb 19 2013 vsftpd-2.2.2-11.el6_3.1.x86_64.rpm
[root@huangzhong Packages]# yum install vsftpd-2.2.2-11.el6_3.1.x86_64.rpm
//修改vsftpd的配置文件
Step4:安装超级守护进程
[root@huangzhong tmp]# yum install xinetd
[root@huangzhong xinetd.d]# cp telnet vsftpd
[root@huangzhong xinetd.d]# vim vsftpd
[root@huangzhong xinetd.d]# service xinetd start
//在匿名的家目录下创建文件
[root@huangzhong ~]# cd /mnt/partion/public/
[root@huangzhong public]# touch f1.p
//在用户user1的家目录下创建文件
[root@huangzhong partion]# cd home/user1/
[root@huangzhong user1]# touch f1.user1
4、案例测试
//创建一个8M的文件和一个3M的文件
[root@huangzhong ~]# dd if=/dev/zero of=/tmp/f2.user1 bs=1M count=8
[root@huangzhong ~]# dd if=/dev/zero of=/tmp/f3.user1 bs=1M count=3
//user1登录进行上传测试
[root@huangzhong ~]# ftp 192.168.1.21
//查看所用空间
[root@huangzhong tmp]# dd if=/dev/zero of=/tmp/f4.user1 bs=1M count=1
//把f4.user1移到匿名的家目录下改名为f4.p
[root@huangzhong tmp]# cp f4.user1 /mnt/partion/public/f4.p
//使用匿名登录下载相同文件速率
[root@huangzhong tmp]# mv f4.user1 /mnt/partion/home/user1
//使用user1登录
//查看时间
[root@huangzhong xinetd.d]# date
Fri Jul 4 05:36:26 CST 2014 //此时为下班时间
//登录FTP
//修改时间为上班时间在登录
[root@huangzhong xinetd.d]# date 070308012014
Thu Jul 3 08:01:00 CST 2014
//测试匿名上传