转自:http://blog.csdn.net/wwwlh/article/details/5118457
网络速率和FTP传输速度关系的问题
考虑过我们ftp的实际速度的问题吗,为何我们不能达到100M以上的速度?
先讲一点网络速率和传输速度的问题呵呵,我先是一个CCNP,然后才是一个DBA
注意下面B-字节 b-位的区别 1B=8b,不理解的回去看计算机基础知识
1000M网络速度是指bit位的速度,理论网络传输速度上限是1000/8=128MB/S
可是这个速度是在物理层的理论值,呵呵我们要用的TCP/IP协议和FTP协议中间还有好多个协议层.
基于种种原因的考虑,每个协议层都要在数据包头封装一些东西,因此我们一般只能实现用10个字节来描述一个有效的数据
换算成传输速率就是1000/10=100MB/S
另外要考虑的一个事情是,你的应用是否是单向传输的业务,如果是的话,你最多只能实现100MB/S的速率,如果是双向对称传输的协议话呵呵,你的最大传输速率是100/2=50MB/S
这样的业务典型的就是双向的视频会议.
回到FTP传输的问题来,大家要问,FTP不是单方向传输的吗?为何我们经常只能实现30-40MB/S,最多不过60-70MB/S的速度,不对FTP是一个典型的不对称的传输协议,在我们下载的时候,可能下载流量占用了大部分的带宽,但是大家要注意到,FTP必须在服务器和客户端之间传输一些控制命令和交换一些数据请求包什么的,典型的上行流量大概能占用到整个传输10%,呵呵我们上面提到的100M/S的理论上限一下少了10M/S变成90M/S.
接着你又问了不还有90M/S吗?剩下那些速度都在那里产生瓶颈了,呵呵,让我慢慢道来
1.你的客户端和服务器最少都可能在同一台千兆交换机上吧,对不起,交换机会对数据传输产生一定的时延,因为千兆交换机一定是基于存储转发的,这个时延根据厂商算法和芯片的不同,可以造成传输速率下降,下降的幅度在2-10%之间变动,按照平均5%来计算吧,现在是多少了,90*0.95=85.5MB/S
2.服务器的千兆网卡和客户机的千兆网卡是接在那里的,你一定会说是在主板上集成的,没错,可是你知道它们到底接在那里吗?呵呵告诉你如果是接在主板上的一定是在南桥总线上的,典型的南桥总线是2GB/S(INTEL ICH8),没完这南桥总线不是千兆网卡独享的,是N多设备共享的,网卡,IDE硬盘接口/SATA接口,声卡等等一大堆东西,一般来说,网卡能达到理论带宽的90%就很不错了,呵呵再算一下,85.5*0.9=76.95MB/S
3.没完,FTP协议使用网络传输的数据从那里来?呵呵从硬盘来,到那里去?到硬盘去.这一来一去有个问题,硬盘并非能全速达到理论传输上限,哪怕你组成一个很快的RAID 0,硬盘传输数据都会有一点延迟,这个延迟来自于硬盘的传输原理,FTP一个大文件要在磁盘中移动磁头,找到这个数据块,然后读到内存中,有个5-10%的延迟不为过吧,写入同样,要找到空闲的块,同样可能有5-10%的延迟,取小一点,两边都按5%来计算,呵呵10%的延迟呀,现在你一定冒汗了,降到多少了?76.95*0.9=69.255MB/S
4.数据仅仅是到了内存,还没传输到网卡上,这时后,CPU肯定要处理,DMA通道也要处理,内存虽然读得飞快,网卡处理芯片要处理数据,这一大堆玩意虽然都很快,可是同样有延迟,考虑到这些因素,降个5%是很正常的,实际上,基于内存的网络传输速率测试不比硬盘快多少,这时的速率是69.255*0.95=65.79MB/S
这个速率我想大多数使用过千兆网络FTP传输的人,都见过这样的速度吧,一般来说千兆网络FTP传输很难超过80M/S
5.操作系统,FTP SERVER 和FTP CLINET的软件处理能力的问题,这个是一个更复杂的问题,但是可以肯定的是不同的平台和版本,性能差异可能巨大,我用过N多的FTP SERVER和FTP CLINET,访问同一个内部服务器的时候,性能差异巨大,相同的环境下,例如IIS 6的SERVER 配合WINDOWS FTP命令能到40-50MB/S,换一个LINUX下的LFTP客户端就能达到60-65MB/S的性能.
这上面还有一个因素,如果遇到交换机繁忙,或者交换机交换容量不够的情况下,上面许多因素再打大一点折扣,例如磁盘延迟很大,上面的数字还要大大打个折扣.不幸的是我们的许多系统大部分的部件,经常处于繁忙的阶段,上面的数字最多只能实现80%的效能,呵呵所以大多数的千兆FTP传输在30-40MB/S间波动是很正常的.