怎么测试一个设备下载速度的极限?
** 测试场景 **
通过 http 或者 FTP下载,客户端查看下载速率,
查看设备能够达到的下载极限是多少?
这方面专门有个标准-----TR143协议文档。
为什么主要关注下载速率?
普通终端用户,绝大部分场景是下载,看网页是下载,看视频也是下载,点播节目还是下载,上传也有,但是不构成瓶颈。
设备下载速率慢的原因是什么呢?
这个原因与环境相关的因素有很多,网络环境中丢包,乱序,服务器或者终端拥塞……,一个与环境无关的一个重要因素是 客户端的报文的处理流程太长.
要想到达极限速率,外在因素需要尽量排除环境的影响。内在因素需要减少TCP报文,在终端的处理流程。
具体来看,在物理端口收到报文之后,都要经过,下面几个步骤:
L1-->L2-->L3-->L4-->CPU-->L4-->L3-->L2--L1 的层层解析,层层处理,最后再发出设备。
已有的优化流程
首包走全流程,后续包从2.5层快转掉。
在下载的流程中,只有首包(第一个出的TCP SYN报文),需要走这个过程,但是建立TCP链接之后,就没有必要走全部的流程了.
通过第一个报文(首包)记录下来,SMAC, DMAC,SIP,DIP,Sport,Dport,也就是说的五元组。
其实不止这些东西,还有VLAN,pppoe的sessionId等,记录这些的目的是为了在这个TCP连接里面的其他报文没有必要再走一遍首包的流程,只用按照首包的流程转发就可以了.
这里还要注意要想达到极限的下载速度,就要快速回ACK,因此ACK里面的信息一定是需要的 .
还要考虑其他情况,
比如分片报文:
分片报文对首包,回复ACK,非首包就不用回复了.
非测速报文:
不进入,测速的缓存收包队列
滑动窗口也要能动态的调整
重传的情况?
重传的报文直接丢弃,怎么判断重传,根据序列号来,如果序列号小于当前就丢弃,那么序列号翻转的情况呢?----翻转的流程要放在这个的前面处理
怎么才能做好这个需求?
1:熟悉TCP的流程,怎么才能熟悉TCP的流程?
对着TCP/IP 卷一里面TCP章节的内容,看看各个过程中的注意事项.
怎么创建环形队列?
怎么在环形队列中插入删除?
不能进入环形队列的报文需要丢弃还是缓存?如果是缓存缓存队列多大?
为了提高效率,环形队列中申请的内存不能释放,需要增加内存使用与否的标记.