2012年6月12日星期二

如何排查网络问题

 
 

satan 通过 Google 阅读器发送给您的内容:

 
 

于 12-6-11 通过 鲁夫的爱 作者:鲁小夫

最近我收到很多关于OpenGG.Clean.Player 的问题反馈, 说播放器不能载入, 最后经过排查都是网络问题. 这一类问题的特点就是用户反馈语焉不详而内里的病因又多种多样, 因此排查起来十分困难.

在这里我就网络问题的排查说一点自己的看法.

如何判断一个问题是网络问题

要建立一个网络连接需要两头的节点(客户端/服务器), 和连接这些节点的 "线路" (包括物理的和非物理的); 如果在建立连接和连接过程中出现了问题, 而这个问题又不是由于两头的节点导致的, 那么这个问题有可能是网络问题.

就这个例子来说, 如果某用户(客户端) 不能正常访问player.opengg.me , 却能正常浏览其他网站, 而服务器(player.opengg.me ) 又能为其他用户所访问, 则这个用户与服务器之间发生的问题属于网络问题.

要用户判断自己能访问什么网站, 不能访问什么网站, 这很容易. 要判断服务器能否能为其他用户所访问则不那么直接, 我推荐各位使用webkaka.com 的网站测速功能进行测试:

  1. 在webkaka.com 的网站检测输入框中输入player.opengg.me/player.swf , 点击"check" , 会跳转到一个新网页;
  2. 但这个新网页里"解析IP" 一栏的结果有可能是"百度公司" , 这是webkaka.com 的一个bug , 我们需要在"国内网站测速" 输入框中再次输入player.opengg.me/player.swf , 点击"确定" , 此时"解析IP" 的结果就应该是"66.197.135.232 (美国 宾夕法尼亚)" 了;
  3. 如果大部分国内节点的检测结果是正常, "内容下载速度(KB/s)" 较快, 则可能少数国内节点无法访问目标服务器, 出现了网络问题.

如果出现的问题属于客户端问题, 请向专业的维护人员求助; 如果出现的问题属于服务器问题, 请尽快联系站长; 如果是网络问题, 请按照下文进行排查.

网络是分层的

但是网络是分层的, 我们每天使用的互联网各层之间的分离是如此透明, 导致用户在浏览网站时根本不知道"用浏览器访问一个网页" 这个行为背后到底发生了些什么. 所以在排查网络问题的时候, 也应该用分层的思想来进行排查, 仅仅提出"为什么我上不了某个网站" 这个疑问对于解决问题毫无助益.

按照TCP/IP 参考模型, 网络由低到高可以分成连接层, 网络层, 传输层和应用层 这四层. 在排查网络问题的过程中, 一般只需要通过应用层和传输层就能发现问题的原因, 网络层的ICMP 协议常用于判断连接性, 只有在很特殊的情况下才需要深入到网络层的IP 协议 (如某些长度的packet 不能通过某些路由器).

关于TCP/IP 参考模型, 可以读一读wikipedia 上的词条 http://en.wikipedia.org/wiki/Internet_protocol_suite , 这个网页也可以作为网络协议速查表使用.

访问一个网页的背后

要知道浏览器为什么不能访问某个网络资源, 首先要明白浏览器访问某个网络资源时, 究竟发生了些什么. 从用户输入网址到浏览器开始获取资源, 这个过程可以简化成如下步骤:

  1. 客户端进行DNS 查询, 获得目标服务器的ip 地址;
  2. 客户端与目标ip 上的目标端口建立TCP 连接(三次握手);
  3. 客户端向目标服务器发送HTTP 请求;
  4. 目标服务器返回数据

而浏览网页时可能发生的网络问题, 就发生在这些步骤里, 通常为:

  1. 客户端无法建立到DNS 服务器的连接 (传输层, 通常为UDP 连接, 也可能为TCP连接);
  2. DNS 服务器没有返回正确的查询结果 (应用层);
  3. 客户端无法建立到目标ip 上目标端口的连接 (传输层, TCP连接);
  4. 客户端无法建立到目标服务器的HTTP 连接 (应用层);

把脉

如同所有的医生, 你需要各种器械来进行诊断, 以判断一个问题到底发生在哪一层, 然后才能对症下药. 针对各层, 我推荐如下诊断工具:

 层   协议   Windows   *nix 
 网络层   ICMP   ping   ping 
 网络层   ICMP   tracert   traceroute 
 网络层   ICMP   mturoute   - 
 传输层   TCP   tcping   - 
 传输层   TCP   tracetcp   - 
 传输层   UDP   ftrace   - 
 应用层   DNS   nslookup   - 
 应用层   HTTP   wget   wget 
 应用层   HTTP   firebug   firebug 

*注: ping 系用于检测连通性, trace 系用于寻找问题节点; firebug 是Firefox 的扩展, Chrome 和ie 的开发者工具(F12) 与之功能类似; 本文仅描述思路, 关于这些工具如何使用, 请读者自行Google .

在排查时建议从高层向底层逐层排查, 以player.opengg.me/player.swf 为例.

打开cmd, 输入 wget "player.opengg.me/player.swf" -O -
得到如下结果:
正在解析主机 player.opengg.me... 66.197.135.232, 2607:f878:1:54d:0:18:7137:11, 2
607:f878:1:54d:0:18:7137:10
Connecting to player.opengg.me|66.197.135.232|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK

如果 "正在解析主机 player.opengg.me" 的结果不是这个样子, 则DNS 查询结果出错, 需要对DNS 服务器进行排查 ( nslookup player.opengg.me ).

如果 "Connecting to player.opengg.me|66.197.135.232|:80" 的结果如果不是 "已连接", 则客户端无法建立连接目标服务器的TCP 连接, 需要用tcping 和tracetcp 进行排查.

如果 "已发出 HTTP 请求,正在等待回应" 的结果不是 "200 OK", 则可能目标文件不存在, 或者服务器出错, 请联系站长.

附: 本文提到的部分工具的项目地址

tcping http://www.elifulkerson.com/projects/tcping.php
mturoute http://www.elifulkerson.com/projects/mturoute.php
tracetcp http://tracetcp.sourceforge.net/
ftrace http://www.r1ch.net/stuff/ftrace/
wget http://gnuwin32.sourceforge.net/packages/wget.htm
firebug http://getfirebug.com/

本站文章除注明转载外,均为本站原创编译
转载请注明以下信息
文章转载自:鲁夫的爱 [ http://opengg.me/ ]
本文标题:如何排查网络问题
本文地址:http://opengg.me/803/howto-debug-network-issue/
您可能也喜欢:

不Google,毋宁死 – 实时生成的Google hosts文件

为何我们不能正常使用Google加密搜索

错误的路由广播导致ipv6时断时续

QQ影音在N卡下黑位不准的问题

我所见的,IT人士对安全问题的常见误解
无觅


 
 

可从此处完成的操作:

 
 

没有评论:

发表评论