最近服务器被和谐,连接不上,但是又不想换IP,换IP意味着可能要换机房,换套餐什么的(因为那是绝版特价机房…),所以打算用其他的当跳板(本地代理),来操作它,操作是没问题的,但是发现有些文件,普遍是小文件失败,大文件成功,当然,范围在几K到几十M之间,而且都显示进度到了100%却又连接超时。很纳闷,而且网上很多答案都是相反的,就是小文件成功,大文件失败,后来发现是ssr默认开启了UDP支持导致的,这里做一下记录和相关复习。
1.什么是FTP
文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用於在网络上進行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。我们要分清文件传送(file transfer)和文件存取(file access)之间的区别,前者是FTP提供的,后者是如NFS等应用系统提供的[1]。参考文献RFC959定义了此规范。
FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间,会非常长;并且不时的必须执行一些冗长的登录进程。–wiki
FTP服务一般运行在20和21两个端口,基于tcp协议。端口20用于在客户端和服务器之间传输数据流,而端口21用于传输控制流,并且是命令通向ftp服务器的进口。当数据通过数据流传输时,控制流处于空闲状态。而当控制流空闲很长时间后,客户端的防火墙会将其会话置为超时,这样当大量数据通过防火墙时,会产生一些问题。此时,虽然文件可以成功的传输,但因为控制会话,会被防火墙断开;传输会产生一些错误。
扩展
TFTP 基于udp协议,默认端口69,用来进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务,原因是udp没有tcp可靠。FTP和TFTP的区别可简单理解为tcp和udp的区别:
1.基于连接与无连接
2.TCP要求系统资源较多,UDP较少
3.UDP程序结构较简单
4.流模式(TCP)与数据报模式(UDP)
5.TCP保证数据正确性,UDP可能丢包
6.TCP保证数据顺序,UDP不保证
主动和被动
- 主动模式下,客户端连接服务器命令端口后,服务器会主动连接客户端的数据端口
- 被动模式下,客户端连接服务器命令端口后,服务器(收到客户端出于被动模式的”PASV”命令)会开启一个端口被动监听客户端的数据端口连接,并告诉客户端是哪个端口。在被动方式FTP中,命令连接和数据连接都由客户端,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。一些FTP工具,在使用代理的时候,会强制使用被动模式。
更多资料参阅–RFC959,以及相对安全的SFTP、FTPS
2.FTP的使用
正常的使用新建服务器,正确填写服务器信息,连接即可。若使用SFTP,则还需要设置密钥。
3.代理使用
ss/ssr等一些工具支持使用本地代理
FTP客户端进入代理设置,选择SOCK5/HTTP模式,输入地址127.0.0.1,和相应IP如1087
其他远程代理,可能需要输入用户名密码,还有FTP代理服务器的方式。
4.总结
上传显示进度100%,连接超时(timeout),最后失败的问题,网上提及可能是路由器MTU的问题导致分包不一致或者防火墙问题引起的。若使用了代理,则需要考虑是否代理使用了UDP转发,可以考虑关闭UDP,或者使用其他替代。
No comments:
Post a Comment