以前我也谈过,国内带宽成本基本上由内容提供方付费,自建机房的直接向运营商买带宽,没有的向阿里云这类买服务器,价格不是一般贵,这也就是百来块钱一个月的国内服务器带宽就给个10Mbps。国外带宽成本大多由宽带用户付费,一个月的宽带上网费是很贵,而国外服务器大都给很大的带宽,稍微便宜一点的也基本上共享G口起步。
有一种想法是买国外服务器給国内用,最初我也这样想,直到买的服务器很慢很卡,意识到发生了丢包,之前提到过与运营商有关,这次讲下怎么直观感受线路质量。
重要的是路由直连
廉价机房会导致中国运营商路由绕美,因为运营商在美国互联成本极低,导致很多廉价主机绕美西洛杉矶,延迟200ms以上,可以算是高ping网络了,遇到这样的主机还是换掉罢。
表现为:路由跟踪时 广州——洛杉矶——东京——香港——新加坡,堪称环太平洋观光线路,这种神绕在走TATA或者HE的线路上常见。
更重要的是低丢包率
一般来讲,丢包率在5%的时候就有感受了,传统TCP是很绅士的协议,一旦丢包发生,就认为网络拥塞了,传输速度指数下跌。丢包率10%以上几乎就没法用了,本文主要讲的是丢包率的检测。
安装MTR
想起我英语不好,讲这个工具很多人以为我讲NTR,
什么牛头人給爷爪巴,所以我一般把N念嗯。
安装mtr工具,方法可以通过yum或者自己编译,如果要编译可以参考编译Python3这篇文章。
再扯一下,Linux下装软件,我分成三种类型:
- 官方安装法,这也是最正式的,通过yum或者apt-get安装的,自动解决依赖和冲突
- 野鸡编译法,自己下源码来编译,期间会遇到找不到依赖,没有这个库缺失那个库的问题,装还以后有的功能用不了发现没在configure的时候开启,又来重新编译,很费时间。
- 绿色版软件,直接就是一个二进制文件,可能是别人编译好的,直接拿来用就是。
测试原理
Mtr会一直发包,比如ICMP或者UDP和TCP,原理是设置每个报文的TTL,让它在每一跳都超时,每个中间路由返回ICMP错误(超时)报文,这样就可以取得类似于traceroute的效果,比tracert强的是,它具有一些统计功能,能帮助我们判断线路的质量。
使用哪种协议测试?
mtr支持有TCP、UDP、ICMP三类报文测试,个人建议用UDP。
ICMP:一些国外服务商,特别是严重超售的,会针对ICMP优化,把ICMP的Qos等级调高,使得ICMP永不丢包,造成ping值低很好看的假象,而TCP频繁丢包。
TCP:用TCP跟踪主要是基于带[SYN]标志位的握手包,毕竟TCP是基于流的,没有建立连接而带有内容的报文,违反TCP的状态机,大概率会被中间路由丢掉。另一个缺点在于TCP有快速重传Fast retransmit机制,有的包是已经丢包了,导致了快速重传,造成没丢包的假象。但是可以从延迟看出,会有上千毫秒的延迟,所以TCP来测量丢包率也不靠谱多少。
如上图,虽然丢包率为0,但最差的延迟要1223ms,很明显是发生了丢包后的快速重传。
UDP:UDP没有快速重传的干扰,有的文章讲到运营商会对UDP进行额外Qos,导致丢包略高于TCP,所以UDP没有丢包,TCP肯定也不会丢,UDP测试的少量丢包也可能不影响TCP,以UDP兜底作为测试最佳。
在什么时候测试?
建议在晚高峰(晚上6点半到次日凌晨1点),这个时候中国大陆国际出口很拥堵,最能看出链路质量。有很多线路的服务器白天几乎不丢包,晚上几乎丢包到不能用,特别上游是Cogentco和Telia作为运营商的国外服务器。
测试命令
mtr --udp -s 1000 -z -c 100 -i 0.1 -r [你的国内IP]
解释:
- –udp 用udp测试,不加它默认用icmp测试
- -s 每个数据包的负载大小,不要开太大,否则超过MTU有可能会被分片,或者被丢弃
- -z 把每一跳自治域(AS号码)显示出来
- -c 本次测试发送的数据包数量
- -i 每个数据包发送的间隔,建议0.1s或者0.2s,太小的数可能会被误认为ddos攻击,太大看不出负载高时的丢包率
- -r 输出报告
- [你的国内IP] 注意这个没有-,查找你的出口IP可以通过百度搜索ip获得,如果遇到下面的第三种情况,可以试着把IP最后一段换成.1再测试,如百度IP得111.59.246.123,那么换成111.59.246.1。
怎么看mtr数据
中间的路由器很多时候会偷懒,也就是TTL减为0了也不回复,或者选择性回复,因此分三类情况。
1.中间有丢包,最后的目的地不丢包,或者丢包是这之中最少的。
那么丢包率取最后一跳,如图所示为中国联通工业精品网AS9929线路(前网通骨干网)。
2.中间有丢包,且一直丢到最后一跳还在丢。
那么这样的线路就不要了罢,说明这个线路负载非常高,如图所示日本NTT到中国移动的香港互联点疯狂丢包。
3.最后一跳不响应,显示?
说明你的目标路由器(可能是你的网关)不想配合你的测试,它不响应超时报文,建议换个IP测试。
参见上面的命令解释7,把最后一段换成.1尝试。
建议
- 购买国外服务器的时候,先进行网络测试再购买,可以向商家客服申请样机测试。
- 花点小钱选购强制中国联通AS4837回程的线路,中国联通用户是三大运营商里最少的,带宽稍微多一些。
- 加点大钱选购上游是中国电信精品网CN2,或者中国联通工业网AS9929线路,这种线路全天不丢包,效果极佳。
原文链接:https://schoolgov.org/index.php/archives/28/
原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/6508