记一次FTP上传文件总是超时的解决过程
好久没写博,还是重拾记录一下吧。
背景:买了一个阿里云的云虚拟机用来搭建网站(起初不了解云虚拟主机和云服务器的区别,以为都是有SSH功能的,后来发现不是这样样子啊,云虚拟机就是FTP上传网页+MySQL存储数据,对于只做网站来说还行,但是想做一些扩展或高级功能就不行了,强烈建议还是买云服务器ECS)。
使用的时候遇到一个非常奇怪的现象。在家里的网络环境下(使用DLink做路由器),连接FTP服务器和下载文件都没有问题,但是上传文件总是到100%然后卡住很久,然后出现Timeout,服务器上的文件被覆盖,但字节为0。一开始以为是FileZilla设置的问题,于是在主动被动模式,字符集这些调了半天,还是不行;后面更换了Transmit,Mac终端的ftp,Windows虚拟机里面的Explorer,CuteFtp,FlashFXP这些进行测试,发现还是一样的结果。但是后面我在公司网络环境下使用任何一个客户端进行上传都没有出现问题。
我怀疑是阿里云的云虚拟机FTP有限制,我在阿里云工单系统提交了一个工单要求解决两个问题:
发送超时问题:
ftp> put ~/common.css /htdocs/common.css
Entering Extended Passive Mode (||||).
Ok to send data.
% |***********************************| 21.08 MiB/s : ETA
Failure reading network stream.
bytes sent in : (0.28 KiB/s)
登录失败问题:
421 There are too many connections from your internet address.
但通过讨论发现第二个问题应该是我在上传超时时多次断开和连接造成的,容易解决。问题在于上传超时问题,售后认为可能是IP遭到屏蔽,但查询后并没有。没有更好的思路解决问题,只好在家里各种测试,多次测试后发现只要是一个比较"小"的文件(小于1KB),上传成功;但是“大”一点的文件(比如2KB以上),就总是上传失败。跟文件的类型无关。反馈给售后后认为是我本地的网络环境不稳定导致的,但是我用的是以太网,使用的过程中HTTP下载、QQ微信登录都没有问题,玩DOTA2也没有出现掉线情况,应该不会“不稳定”到2KB的文件都上传不上去。最终我测试得出文件<=1432B都能上传,>1432B就上传不了了,更排出了“不稳定”的问题,因为不稳定的话上传失败不可能一直处于1433B这个临界值。
在Google上搜索相关中文网页,但很少有相关的信息,不过有一些引导我向防火墙、路由器这些方面思考,反馈给售后那边却表示没有更多办法帮忙了。Mac的防火墙我都是关闭的;路由器防火墙管理方面只能自己动手把功能都试一下。但是DMZ,防火墙规则,端口转发这些设置弄了遍也没有解决问题。
还是回到Google,在更换了多次英文关键词后,终于找到了一些跟我同病相怜的人。其中最为有用的是https://trac.filezilla-project.org/ticket/5533#no1,通读了一遍终于找到了问题所在。大意就是FTP使用两个TCP连接来通信,一条控制连接(control connection)用来提交命令和接受回复;一条数据连接(data connection)来处理实际的文件传输。在文件传输过程中,控制连接是很容易进入空闲状态的,TCP标准也没有规定一个连接的最大空闲时间。但是路由器和防火墙经常会把空闲的连接给关闭掉,并且不通知双方,就造成了传输100%但最后还是超时的现象。后面的评论就是解决问题的关键了:TCP传输过程中有最大的包上限MTU(Maximum Transmission Unit,不超过1500),超过这个大小的传输就要拆成多个包(packet)。所以比较“小”的文件不用拆包,一次就传输完了;“大”的文件需要拆包,分多次发送,就出现超时的问题。对于不同的ISP提供商来说,不同的MTU存在最优值。于是在路由器管理页面找到MTU设置,发现原来是1492,随手用网上找的值1472填进去,重启路由器,It works!!
记一次FTP上传文件总是超时的解决过程的更多相关文章
- PHP利用FTP上传文件连接超时之开启被动模式解决方法
初始代码: <?php $conn = ftp_connect("localhost") or die("Could not connect"); ftp ...
- .net FTP上传文件
FTP上传文件代码实现: private void UploadFileByWebClient() { WebClient webClient = new WebClient(); webClient ...
- 通过cmd完成FTP上传文件操作
一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...
- FTP上传文件到服务器
一.初始化上传控件. 1.我们这里用dropzone.js作为上传控件,下载地址http://www.dropzonejs.com/ 2.这里我们使用一个div元素作为dropzone载体. < ...
- 再看ftp上传文件
前言 去年在项目中用到ftp上传文件,用FtpWebRequest和FtpWebResponse封装一个帮助类,这个在网上能找到很多,前台使用Uploadify控件,然后在服务器上搭建Ftp服务器,在 ...
- FTP上传文件提示550错误原因分析。
今天测试FTP上传文件功能,同样的代码从自己的Demo移到正式的代码中,不能实现功能,并报 Stream rs = ftp.GetRequestStream()提示远程服务器返回错误: (550) 文 ...
- FTP 上传文件
有时候需要通过FTP同步数据文件,除了比较稳定的IDE之外,我们程序员还可以根据实际的业务需求来开发具体的工具,具体的开发过程就不细说了,这里了解一下通过C#实现FTP上传文件到指定的地址. /// ...
- Java ftp 上传文件和下载文件
今天同事问我一个ftp 上传文件和下载文件功能应该怎么做,当时有点懵逼,毕竟我也是第一次,然后装了个逼,在网上找了一段代码发给同事,叫他调试一下.结果悲剧了,运行不通过.(装逼失败) 我找的文章链接: ...
- C# FTP上传文件至服务器代码
C# FTP上传文件至服务器代码 /// <summary> /// 上传文件 /// </summary> /// <param name="fileinfo ...
随机推荐
- Eclipse设置、调优、使用(转自)
转自http://yuanzhifei89.iteye.com/blog/974082 eclipse调优 一般在不对eclipse进行相关设置的时候,使用eclipse总是会觉得启动好慢,用起来好卡 ...
- CCS3.3下执行优化
最近想研究一下CCS下的程序优化,之前也了解一些,现在查阅一下资料,整理一下. 当然优化有很多种,我本次先说的是执行优化方式. 首先打开我们自己的工程.工程文件若显示为黄色的,则表示此文件默认优化选项 ...
- windbg学习----.process
.process 命令指定要用作进程上下文的进程(Set Process Context) .process显示当前进程的EPROCESS,这里显示当前进程为test.exe kd> .proc ...
- jquery实现幻灯片
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- npm install 出现UNABLE_TO_GET_ISSUER_CERT_LOCALLY
解决方式 As a workaround you can turn ssl checking off in your .npmrc 执行 npm config set strict-ssl false ...
- MySQL数据库引擎介绍、区别、创建和性能测试的深入分析
本篇文章是对MySQL数据库引擎介绍.区别.创建和性能测试进行了详细的分析介绍,需要的朋友参考下 数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎 ...
- 在iis中设置文件下载而不是在浏览器上打开
点击网页链接的*.txt,*.jpg,*.xml等文件时会在浏览器上直接显示,并没有像*.doc那样弹出下载提示框. 解决方法: 在部署的网站上,选择存放文件的目录,选择 HTTP响应标头 ,添加一个 ...
- java file类的常用方法和属性
1 常用方法 a.createNewFile方法 public boolean createNewFile() throws IOException 该方法的作用是创建指定的文件.该方法只 ...
- python random
import randoma = random.randrange(0,5)print(a)本来很正常的一段代码,用pycharm就报错,控制台就可以运行,原来random 和自带的random 同名 ...
- cell选中后进入重用池出来选中状态消失
#import "XXViewController.h" @interface XXViewController ()<UITableViewDelegate,UITable ...