前言

最近因项目需要,需要把一定数量的中等文件从开发板上传到电脑上,分别选择了FTP和TCP自定义协议两种方式进行传输,进行了简单的对比测试,故做如下记录。

测试环境

开发板:Linux,ARMv7 单核,内存512M

PC:winodw, i7,8G内存,SSD

网络:100M,局域网

文件:大小4.06M,数量50个

四种方案简述

1、FTP上传,短连接,单线程

2、FTP上传,长连接,单线程

3、TCP上传,短连接,单线程

4、TCP上传,短连接,多线程

5、TCP上传,长连接,单线程

说明

1、这里提的TCP上传,是指使用自定义协议TCP方式上传。

2、短连接是指每上传一个文件就连接一次,传完后就关闭连接。

3、长连接是指先连接,再上传多个文件,到退出程序时再关闭连接。

4、单线程是指所有文件的连接、发送、关闭都是在一个线程内完成。

5、多线程是指一个文件对应一个线程,多个文件同时使用多个线程发送。

自定义文件传输协议

自定义文件协议设计得非常简单。

客户端发送数据包= 128B文件名+ 4B文件长度+文件数据

服务端响应数据包=“OK”

之所以如此设计,列如下几点原因:

1、固定文件名长度,方便处理,也方便定位到文件长度字段。

2、4字节文件长度刚好和整型相等,在两个32位小端机器上直接拷贝发送,代码简单。

3、文件长度字段可以方便检查数据是否接收完全,解决粘包问题。

4、局域网内网络相对比较好,所以没带文件校验。

测试结果

方案1,2分钟

方案2,45秒

方案3,20秒

方案4,20秒

方案5,20秒

结果分析

分析之前,先计算一下理论的传输速度应该是多少,文件总大小约为203M,按100M网络计算,速度应该是203/(100/8) = 16秒。所以说20秒是一个比较不错的速度了,毕竟还有一些文件操作等操作,需要占用一些时间。

方案1和方案2比较

FTP建立连接相对复杂,不断的连接和断开肯定消耗不少时间,所以长连接比短连接传输速度快也是应该的。

FTP方案和TCP方案比较

FTP方案整体上比TCP方案慢得多,毕竟FTP协议肯定比自定义的文件传输协议要复杂得多,交互指令越多,速度越慢。

方案3和方案4比较

两个方案的差别在于是否使用多线程发送。从结果来看,速度相差不大。因为网络的极限速度就是100M,同时发送再多的数据也没有用,都会阻塞在网络上。即使发送的速度可能快一点点,但开启多个线程、线程同步锁等也需要时间,可能相抵消了。

方案3和方案5比较

两个方案的差别在于是否使用长连接。从结果来看,速度相关不大。和上面分析一样,网络的极限速度是100M,而TCP在局域网内建立连接(三次握手)、关闭都非常快。对于发送大量数据的情况,是否使用长连接影响都不大。

从上面的测试和分析结果来看,在本项目中使用方案3或5(TCP上传,单线程),是比较合适的。首先传输速度上表现不错,而且避免使用多线程,不需要线程同步,代码设计更简单,越简单越容易做得更可靠。

当然上面的测试是不充分的,对于其他情况没有进行测试分析。例如,使用FTP多线程发送、更小的文件(小于1k)、更大的文件(大几百M)、更多的数量等等,因时间有限不做测试了。不过通过上面的分析,考虑各个因素对速度的影响,也大概可以选择出比较优的方案。如有机会再测试分析。

欢迎各位评论,指出不足之处。

内容来源于网络如有侵权请私信删除

linux主机ftp传输文件效率,FTP和TCP的文件传输效率对比测试分析相关推荐

  1. linux和电脑之间文件传输,Linux主机之间传输文件的几种方法对比

    1.scp传输 scp -r /data/file root@ip:/data/ scp -C /data/sda.img root@ip:/data/img/ #-r: 支持目录 #-C: 启用压缩 ...

  2. ftp传输速率测试用什么软件,FTP和TCP的文件传输效率对比测试分析

    前言 最近因项目需要,需要把一定数量的中等文件从开发板上传到电脑上,分别选择了FTP和TCP自定义协议两种方式进行传输,进行了简单的对比测试,故做如下记录. 测试环境 开发板:Linux,ARMv7 ...

  3. IBM云对象存储 - Linux主机通过rclone和COS API上传大文件

    云对象存储作为主流公有云数据存储服务已大规模应用,但其基于HTTP/HTTPs协议(RESTful API).扁平数据结构和网络依赖等特性,在某些文件归档和备份场景中,通过类似s3fs转成文件系统挂载 ...

  4. 在Virtualbox环境下win10与虚拟机通过FileZilla传输文件(FTP传输)

    在Virtualbox环境下win10与虚拟机通过FileZilla传输文件(FTP传输) 使用FileZilla传输文件(FTP传输)好处 什么是FTP传输 需要的环境以及软件等 使用FileZil ...

  5. mac 上传ftp服务器文件大小,mac与windows通过ftp传输文件

    1.两个系统相互传文件,比较通用的方式是用QQ,两台电脑一台各登陆一个qq,发文件就行了,在同一个网段时,qq会自动转换为按局域网的方式传输. 2.本人不愿安装qq,以ftp方式进行传输,先在wndo ...

  6. Linux下scp命令加强版 优化scp命令 批量对多个Linux主机传输文件

    例如搭建集群或者区块链或者分布式,需要把文件传输到其它多台机器上,而且这个步骤可能会重复n次,通过此脚本即可解决 Linux批量scp命令执行工具 可批量对多个Linux主机执行传输文件命令 方便省力 ...

  7. ftp软件工具android,安卓ftp传输工具,安卓ftp传输工具,软件详情

    安卓ftp传输工具,ftp传输工具有安卓版吗?安卓ftp传输工具除了可以应用于在Windows 操作系统下面可视化地远程Linux操作系统,还可以在安卓操作系统下面可视化地远程连接windows的操作 ...

  8. 用python实现FTP传输

    用python自己实现一个文件传输.其实python的ftplib模块中封装好了实现FTP传输的功能.但是为了理解文件传输机制,决定自己写一个. 客户端可以向服务器上传和下载文件. get从服务器下载 ...

  9. linux下敏感文件(账号密码)查找—内网渗透linux主机密码收集

    目录 find命令 命令格式 按照文件/目录名搜索 linux正则表达式 find同时查找符合多个格式的文件 grep命令 管道符| egrep xargs命令 案例 内网渗透中linux主机查找账号 ...

最新文章

  1. 前端笔记(9)元素的隐藏与显示,css用户界面样式,vertical-align垂直对齐,溢出文字省略号显示,css精灵技术,过渡,焦点,滑动门,margin负值
  2. 各种SQL在Pig中实现
  3. 第五讲 一阶自治ODE
  4. 移除元素--双指针法
  5. java 怎么用 string method return数量_java教程之Map应该怎么用
  6. 用Python标准库turtle画一头金牛,祝您新年牛气冲天!
  7. 分支语句---- if …… else if …… else
  8. Android之哭笑不得的BUG--xml设置的padding不起作用,幕后黑手竟然是?
  9. JSP访问Spring中的bean
  10. c语言变量按作用域分类,C语言总结之变量的种类
  11. mac通过u盘启动linux系统,在mac下制作linux启动U盘
  12. c语言运行太短怎么毡筒,C语言程序设计 最简单的C程序设计.ppt
  13. 罗马音平假名中文可复制_这首歌,代表了我们的青春,你会唱吗(附op罗马音中文音译)...
  14. OVS使用VLAN隔离VM流量
  15. 开发团队如何选型支付网关
  16. Java用户注册手机短信验证码校验功能实现
  17. 用于数据科学和机器学习的GitHub存储库和Reddit主题
  18. MYSQL学习日记(三)
  19. 支付宝官方接口配置教程
  20. 超声波风速风向传感器

热门文章

  1. kafka数据可靠性深度解读
  2. CTO要我把这份MySQL规范贴在工位上!
  3. Spring Cloud Gateway 整合阿里 Sentinel网关限流实战
  4. 关于语音发送/接收 方法和装置发明专利正式发布
  5. 在3kbps的带宽下还能清晰地语音聊天?
  6. 这才是真正的Git——Git实用技巧
  7. chroma_format_idc表示的色度采样结构
  8. 如何将文件加添加成webapp
  9. 阿里文娱测试开发专家谈《算法基石:实时数据质量如何保障?》
  10. Google布隆过滤器与Redis布隆过滤器详解