本节我们掌握FTP协议的数据包格式,为编码实现奠定基础。我们先看看控制命令的格式。当用户端通过控制命令通道想服务器端发送数据后,服务器端一定会产生回复。回复主要有三个目的,首先是让客户端确定服务端收到了消息,其次是通知客户端请求是否能被接收,第三通知客户端当前服务器的状态。
数据包格式的组成特点是数字与文本信息相混合。服务器返回给客户端的数据包中一定包含回复码,该数值用来通知客户端数据包的格式和内容。不同的服务器在回复的数据包中,同样目的的数据包回复码一定相同,但是字符串内容可能会有所不同,因此对数据包的解读必须根据回复码进行。回复码包含三位数值,每个数字对应不同意义,对于回复码“xyz",第一位数字是x,第二位是y,第三位是z,下面我们依次看他们对应的含有。
第一位数字x表示客户发送的命令是否能成功执行,他的意义对应如下表:
回复码 | 含义 | 描述 |
---|---|---|
1yz | 命令被接受并执行第一步 | 用户发送的命令需要执行多个不再,1表示当前请求正在被执行,用户需要等待服务器后续回复 |
2yz | 命令被接受且成功执行 | 用户发送的请求已经被服务器完全执行 |
3yz | 命令被接受并且正在执行过程中 | 客户端发送命令收到,但执行被推迟,例如客户端发起验证请求,同时发送给服务器用户名但密码还没有发过去时服务器就会返回此回复码 |
4yz | 命令暂时被拒绝 | 客户端发送的命令不能被执行,但是客户端在稍后可以再次发送该命令进行尝试,例如服务器过忙时会返回该命令码,客户端就可以延迟一段时间后再次发送命令 |
5yz | 命令永久被拒绝 | 服务器拒绝执行命令,后续发送也会被拒绝,例如请求服务器上没有的文件时就会返回该命令码 |
接下来看数字y的含义:
回复码 | 含义 | 描述 |
---|---|---|
x0z | 数据格式问题 | 客户端发送的数据包可能不符合格式 |
x1z | 数据包表示相关信息 | 回复客户端发来的信息请求 |
x2z | 连接 | 返回连接状态相关信息 |
x3z | 认证和统计 | 返回登陆和统计方面信息 |
x4z | 未定义 | 该数据包不表示任何含义 |
x5z | 文件系统 | 返回服务器端文件系统信息 |
数字z是对数字y含义的进一步说明。当客户端收到的回复数字码为530时表示请求被永久拒绝,同时这是有关登陆方面的请求被拒绝,0表示被拒绝情况的进一步说明,下面是一次客户端与服务器连接登陆时的会话情景:
还有不少命令我们没有标明,下一节我们通过抓包的方式来查看ftp数据包格式以及详细的连接沟通以及数据传输过程。
更多技术信息,包括操作系统,编译器,面试算法,机器学习,人工智能,请关照我的公众号:
转载:https://blog.csdn.net/tyler_download/article/details/104286842
查看评论