FTP文件传输协议:


一、简述:

1、TCP/IP协议簇,应用层协议,采用服务端与客户端通信方式共享文件。

2、FTP根目录:/            (如路径: /hello/)

3、现在的FTP一般用Serv-U搭建,IIS搭建的FTP服务端与Serv-U搭建的服务端返回的响应信息格式不一样,可能会导致解析出错。

4、服务端监听端口:

1)端口20:传输套接字(仅用于传输文件,每传输完毕一次,就关闭一次连接)

2)端口21:控制套接字(对话,传输控制,获取信息,持久连接)

二、FTP缺点:

1、明文登录.
2、FTP客户端程序因使用>1024端口接收大数据,容易被防火墙过滤.

(被动模式解决,被动模式的概念在下面)

3、运行FTP服务端程序的机器可能在连接目标监听随机端口被防火墙提示.
4、FTP在传输数量多的小文件性能不好.

三、匿名登录:

1、为了实现文件在互联网上传输的开放性,服务端管理员可以建立一个特殊的用户ID,
   提供给互联网上的用户下载和上传文件,这就是匿名用户,它不需要密码.

2、常用的匿名登录名称:anonymous

主动模式与被动模式的概念:(建立文件传输连接的两种不同方式而已)

一、主动模式:

1、客户端创建一个监听套接字,监听端口>1024,控制套接字发送PORT命令附带IP地址以及端口(特殊格式)到服务端.
2、服务端收到PORT命令,服务端的20端口连接到客户端,建立文件传输通信.

二、被动模式:

1、客户端发送PASV命令,服务端收到后,会创建一个在>1024端口的监听套接字,然后回复一串IP地址以及端口号(特殊格式).
2、通过回复的信息,连接到服务端的文件传输套接字上进行通信.

三、两种模式下的IP地址以及端口号的特殊表示形式:(须知)

1、PORT与PASV命令表示IP和端口的特殊格式:(PORT与PASV命令使用方式在下面)

举例:    IP地址:192.168.1.120      端口:4500
表示格式:192,168,1,120,17,148

解释:
1、注意是逗号.
2、前4个字段表示IP地址,即192,168,1,120,没有变
3、17,148字段:相当于(17 乘 256) + 148 =  4500端口

总结:
1、使用的是逗号
2、前四字段为IP地址,第五字段 ×  256 + 第六字段 = 端口号.

3、由于建立文件传输套接字连接时,会发送一个IP地址以及端口号(被动模式),说明控制连接与文件传输连接有可能不在同一台机器上,这是由发送参数推断出来的,并未测试过.

为什么会有两种文件传输连接模式:

1、因为防火墙的存在,导致使用FTP协议的一方可能被防火墙过滤一些东西.
   主动模式:客户端的>1024端口可能被过滤.

被动模式:服务端的>1024端口可能被过滤.

通常都是使用被动方式进行FTP连接。

编写FTP客户端:

一、编写步骤:

1、控制套接字连接服务端的21端口,使用USER 、PASS 登录.
2、利用控制套接字获取感兴趣信息,文件套接字在传输文件时才连接服务端.

3、QUIT 退出.

二、上传文件:

1、文件套接字连接,可以设置一些杂项(如传输类型),一般默认就行.
2、发送STOR命令,接收一个服务端的响应码.
3、开始在文件套接字使用send函数将文件数据上传上去.
4、文件套接字send执行完毕后,不用管,直接closesocket文件套接字.
5、控制套接字用recv函数等待服务端发出接收完成信号即可.

三、下载文件:

1、文件套接字连接,可以设置一些杂项(如传输类型),一般默认就行.
2、发送RETR命令,意思让服务端把指定的文件的数据,send过来文件套接字,之后接收一个服务端的响应码(一般为226发送完毕信号,要等待这个信号来到为止).
3、226发送完毕信号到来,就可以让文件套接字recv函数来接收到来的数据了.

四、需要注意:

1、文本模式:传输文本文件时使用,一般在使用REST命令断点续传时,不能指定为文本模式.
2、二进制模式:通用

常用命令:(每执行一次命令后,服务端会给与回复)

一、登录类:

USER 账号\r\n 登录账号
PASS 密码\r\n 登录密码
REIN\r\n 想重新登录,连接不会关闭,下一条命令USER可重新连接
QUIT\r\n 退出

二、建立文件传输套接字通信类:

PASV\r\n 被动模式,服务端会回复一个IP地址和端口,然后你再连接.(一般使用被动模式)
PORT 表示IP端口的特殊格式\r\n 主动模式,让服务端主动来连接你的文件监听套接字

三、操作文件类:

STOR 文件名\r\n 上传文件
APPE 文件名\r\n 上传文件,如果文件名已存在,把数据插入尾部
DELE 文件名\r\n 删除指定文件
REST 字节个数\r\n 跳过字节数,短点续传,下载文件前使用,使RETR命令仅下载偏移后的部分
RETR 文件名\r\n 下载文件
ABOR\r\n 放弃传输一个文件,将关闭文件套接字通信

注意:REST命令一般不能在文本模式来使用.一般在二进制模式下使用(I),经测试,不能在上传时使用(不确定,可以自己去试试).

四、目录操作类:

CWD 目录名\r\n 改变当前目录到指定目录
CDUP\r\n 返回上一次目录,当到根目录时,不变
LIST\r\n 显示当前目录下的文件,包括长度,文件类型(如目录)与权限(表示类型:drwxr-xr-x)
LIST 目录名\r\n 显示指定目录下的文件,包括长度,文件类型(如目录)与权限(表示类型:drwxr-xr-x)
MKD 目录名\r\n 创建一个目录
PWD\r\n 显示当前目录的路径
RMD 目录名\r\n 删除目录
RNFR 文件或目录名\r\n 将某文件或目录重命名,接下来要使用RNTO指定新名称
RNTO 文件或目录名\r\n 重命名为....
NLST\r\n 仅显示当前目录下的文件,以\r\n表示下一个
NLST 目录\r\n 仅显示指定目录下的文件,以\r\n表示下一个

五、模式与类型:

TYPE 字符\r\n 选择传输类型
A为文本模式
I为二进制模式
E为EBCDIC
N为Nonprint非打印模式
T为Telnet格式控制符

六、参数信息:

SYST\r\n 获取服务端系统信息(NT或Unix)
STAT 文件或文件夹\r\n 获取相关信息

七、其他不常用的命令:

ACCT 用户帐号\r\n 发送PASS命令并接收到332代码之后才应发送
SMNT 另一个文件数据系统的路径\r\n 允许用户装配另一个文件系统的数据结构而无需改变登录
MODE 字符\r\n 指定传输类型:默认为流模式(S为流)(B为块)(C为经过压缩)
STRU 字符\r\n 指定结构类型:F为文件结构(默认值,就是流式传输)
ALLO 逻辑字节数\r\n 上传文件前,使用此命令申请内存(本人还没见到需要的,都是直接上传)
NOOP 测试通信
HELP 帮助,会列出有效命令

FTP服务端的响应码:

150 文件状态良好,打开数据连接
200 命令成功
212 目录状态
213 文件状态
110 重新启动标记应答
500 格式错误,命令不可识别
501 参数语法错误
502 命令未实现
120 在X分钟内准备好
125 连接打开准备传送
214 帮助信息,信息仅对人类用户有用
215 名字系统类型
220 对新用户服务准备好
221 服务关闭控制连接,可以退出登录
202 命令未实现
211 系统状态或系统帮助响应
225 数据连接打开,无传输正在进行
226 关闭数据连接,请求的文件操作成功
227 进入被动模式
230 用户登录
331 用户名正确,需要口令
332 登录时需要帐户信息
350 请求的文件操作需要进一步命令
421 连接用户过多
425 不能打开数据连接
426 关闭连接,中止传输
450 请求的文件操作未执行
451 中止请求的操作:有本地错误
452 未执行请求的操作:系统存储空间不足
250 请求的文件操作完成
257 创建"PATHNAME"
503 命令顺序错误
504 此参数下的命令功能未实现
530 账号或密码错误
532 存储文件需要帐户信息
550 未执行请求的操作
551 请求操作中止:页类型未知
552 请求的文件操作中止,存储分配溢出
553 未执行请求的操作:文件名不合法

关于与Serv-U搭建FTP服务器通信返回的文件格式:

举例:发送LIST命令到服务端,返回一个文件列表,每一个文件最前面带有:drwxr-xr-x
(这应该是Linux下用户权限与文件类型的表达方式)
(我对Linux不熟,所以一开始我还以为是什么加密的数据,其实他代表用户权限与文件类型)

drwxr-xr-x    10个域   Linux下表示用户拥有的权限
顺序:从左到右
第1位(文件类型):d(目录文件)、l(链接文件),-(普通文件),p(管道)
第2-4位(权限):r(读)、w(写)、x(可执行)
第5-7位(此文件属主的用户组权限)
第8-10位(其他用户所具有的权限)

网络编程之FTP文件传输协议相关推荐

  1. Linux运维系列总结-Linux系统启动过程、WEB工作原理、DHCP工作原理、DNS解析原理、NFS网络文件系统、FTP文件传输协议、PXE+KICKSTART自动安装系统

    Linux运维系列总结-Linux系统启动过程.WEB工作原理.DHCP工作原理.DNS解析原理.NFS网络文件系统.FTP文件传输协议.PXE+KICKSTART自动安装系统 1.Linux系统的启 ...

  2. Linux网络编程之socket文件传输示例

    本文所述示例程序是基于Linux平台的socket网络编程,实现文件传输功能.该示例是基于TCP流协议实现的socket网络文件传输程序.采用C语言编写.最终能够实现传输任何格式文件的文件传输程序. ...

  3. 网络协议从入门到底层原理(10)WebSocket、WebService、RESTful、HTTPDNS、FTP文件传输协议、邮件相关协议、IPv6

    其他协议 WebSocket WebSocket - 建立连接 WebService RESTful HTTPDNS FTP文件传输协议 邮件相关的协议(SMTP.POP.IMAP) POP vs I ...

  4. Day4:应用层——FTP :文件传输协议、电子邮件(EMail)、DNS(Domain Name System)、P2P应用(一类应用)

    加油!偷博人! 一.FTP文件传输协议  向远程主机上传输文件或从远程主机接收文件  客户/服务器模式  客户端:发起传输的一方  服务器:远程主机  ftp: RFC 959  ftp服 ...

  5. 浅谈FTP(文件传输协议)

    FTP(文件传输协议) FTP(File Transfer Protocol) ,是一种处于应用层的用于文件传输的协议.是基于TCP协议的应用层协议,用于在网络上传输文件. 该协议使用的端口号为20和 ...

  6. asc码转换 linux_Linux网络服务04——FTP文件传输服务

    Linux网络服务04--FTP文件传输服务 一.FTP连接及传输模式 1.控制连接:TCP 21,用于发送FTP命令信息 2.数据连接:TCP 20,用于上传.下载数据 3.数据连接的建立类型: ( ...

  7. 计算机网络 P43 网络应用模型 P44 DNS系统 P45 FTP文件传输协议

    DNS系统: FTP文件传输协议  

  8. FTP文件传输协议(实现windows与linux文件互传)

    FTP文件传输协议(实现windows与linux文件互传) 目录 FTP文件传输协议(实现windows与linux文件互传) 一.FTP概述 二.FTP通信端口 三.FTP数据连接 四.FTP连接 ...

  9. FTP文件传输协议原理详解(两种工作模式)

    初始FTP     文件传输协议(File Transfer Protocol,缩写:FTP)是一个用于在计算机网络上在客户端和服务器之间进行文件传输的应用层协议.文件传送(file transfer ...

最新文章

  1. hbase 可视化工具_Hadoop工具TOP 9:
  2. matplotlib markers的类型
  3. 《Nmap渗透测试指南》—第6章6.6节源端口欺骗
  4. Java自动化测试框架-07 - TestNG之Factory篇 - (详细教程)
  5. h3cIP和TCP抓包分析实验
  6. oracle sql 执行计划分析_ORACLE数据库查看执行计划
  7. voices——最后的决赛
  8. 解决vue项目首页加载过慢的情况
  9. Android应用神器:高级终端Termux
  10. 期权定价Python实现
  11. 超好用的iOS设备管理软件——iMazing
  12. 神策 FM | 桑文锋:2018,行与思
  13. RE:Working outside of application context
  14. 利用 eutils 实现自动下载序列文件(python实现)
  15. FM收音机 RDS的强大功能
  16. 2021会同一中高考成绩查询,2021年怀化高考状元是谁分数多少分,历年怀化高考状元名单...
  17. JS的报错处理(throw、try、catch)
  18. 戴尔刀片服务器盘柜型号,戴尔PowerEdge 4220 42U 机架式盘柜
  19. 第一次去中关村图书大厦
  20. 惯性导航原理(1):导航坐标系及相互转换

热门文章

  1. 难倒刘强东的奥数题,京东智能供应链解开了
  2. VMware 安装Ubuntu系统后,启动一直黑屏
  3. 字符数组与字符串处理函数
  4. 给网页设计师和前端开发者看的前端性能优化
  5. oracle查询sql走索引吗,Oracle SQL不走索引小记
  6. 线性表之顺序表的基本操作
  7. psvm怎么补全_vi/vim使用进阶: 自动补全
  8. 简明解释算法中的大O符号
  9. 年初五,迎财神 | 一张码如何实现多渠道(微信、支付宝、云闪付...)收款
  10. Unity开发HTC vive 五、拾取和触碰