要用户判断自己能访问什么网站, 不能访问什么网站, 这很容易. 要判断服务器能否能为其他用户所访问则不那么直接, 我推荐各位使用webkaka.com 的网站测速功能进行测试.
如果大部分国内节点的检测结果是正常, "内容下载速度(KB/s)" 较快, 则可能少数国内节点无法访问目标服务器, 出现了网络问题.
如果出现的问题属于客户端问题, 请向专业的维护人员求助; 如果出现的问题属于服务器问题, 请尽快联系站长; 如果是网络问题, 请按照下文进行排查.
网络是分层的
但是网络是分层的, 我们每天使用的互联网各层之间的分离是如此透明, 导致用户在浏览网站时根本不知道"用浏览器访问一个网页" 这个行为背后到底发生了些什么. 所以在排查网络问题的时候, 也应该用分层的思想来进行排查, 仅仅提出"为什么我上不了某个网站" 这个疑问对于解决问题毫无助益.
按照TCP/IP 参考模型, 网络由低到高可以分成连接层, 网络层, 传输层和应用层 这四层. 在排查网络问题的过程中, 一般只需要通过应用层和传输层就能发现问题的原因, 网络层的ICMP 协议常用于判断连接性, 只有在很特殊的情况下才需要深入到网络层的IP 协议 (如某些长度的packet 不能通过某些路由器).
关于TCP/IP 参考模型, 可以读一读wikipedia 上的词条 http://en.wikipedia.org/wiki/Internet_protocol_suite , 这个网页也可以作为网络协议速查表使用.
访问一个网页的背后
要知道浏览器为什么不能访问某个网络资源, 首先要明白浏览器访问某个网络资源时, 究竟发生了些什么. 从用户输入网址到浏览器开始获取资源, 这个过程可以简化成如下步骤:
客户端进行DNS 查询, 获得目标服务器的ip 地址;
客户端与目标ip 上的目标端口建立TCP 连接(三次握手);
客户端向目标服务器发送HTTP 请求;
目标服务器返回数据
而浏览网页时可能发生的网络问题, 就发生在这些步骤里, 通常为:
客户端无法建立到DNS 服务器的连接 (传输层, 通常为UDP 连接, 也可能为TCP连接);
DNS 服务器没有返回正确的查询结果 (应用层);
客户端无法建立到目标ip 上目标端口的连接 (传输层, TCP连接);
客户端无法建立到目标服务器的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。
在排查时建议从高层向底层逐层排查,
如果 "正在解析主机 urdomain.com" 的结果不是这个样子, 则DNS 查询结果出错, 需要对DNS 服务器进行排查 ( nslookup urdomain.com ).
如果客户端无法建立连接目标服务器的TCP 连接, 需要用tcping 和tracetcp 进行排查.
附: 本文提到的部分工具的项目地址
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/
如果大部分国内节点的检测结果是正常, "内容下载速度(KB/s)" 较快, 则可能少数国内节点无法访问目标服务器, 出现了网络问题.
如果出现的问题属于客户端问题, 请向专业的维护人员求助; 如果出现的问题属于服务器问题, 请尽快联系站长; 如果是网络问题, 请按照下文进行排查.
网络是分层的
但是网络是分层的, 我们每天使用的互联网各层之间的分离是如此透明, 导致用户在浏览网站时根本不知道"用浏览器访问一个网页" 这个行为背后到底发生了些什么. 所以在排查网络问题的时候, 也应该用分层的思想来进行排查, 仅仅提出"为什么我上不了某个网站" 这个疑问对于解决问题毫无助益.
按照TCP/IP 参考模型, 网络由低到高可以分成连接层, 网络层, 传输层和应用层 这四层. 在排查网络问题的过程中, 一般只需要通过应用层和传输层就能发现问题的原因, 网络层的ICMP 协议常用于判断连接性, 只有在很特殊的情况下才需要深入到网络层的IP 协议 (如某些长度的packet 不能通过某些路由器).
关于TCP/IP 参考模型, 可以读一读wikipedia 上的词条 http://en.wikipedia.org/wiki/Internet_protocol_suite , 这个网页也可以作为网络协议速查表使用.
访问一个网页的背后
要知道浏览器为什么不能访问某个网络资源, 首先要明白浏览器访问某个网络资源时, 究竟发生了些什么. 从用户输入网址到浏览器开始获取资源, 这个过程可以简化成如下步骤:
客户端进行DNS 查询, 获得目标服务器的ip 地址;
客户端与目标ip 上的目标端口建立TCP 连接(三次握手);
客户端向目标服务器发送HTTP 请求;
目标服务器返回数据
而浏览网页时可能发生的网络问题, 就发生在这些步骤里, 通常为:
客户端无法建立到DNS 服务器的连接 (传输层, 通常为UDP 连接, 也可能为TCP连接);
DNS 服务器没有返回正确的查询结果 (应用层);
客户端无法建立到目标ip 上目标端口的连接 (传输层, TCP连接);
客户端无法建立到目标服务器的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。
在排查时建议从高层向底层逐层排查,
如果 "正在解析主机 urdomain.com" 的结果不是这个样子, 则DNS 查询结果出错, 需要对DNS 服务器进行排查 ( nslookup urdomain.com ).
如果客户端无法建立连接目标服务器的TCP 连接, 需要用tcping 和tracetcp 进行排查.
附: 本文提到的部分工具的项目地址
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/
--
Posted By GFW BLOG 功夫网与翻墙 to GFW BLOG(功夫网与翻墙) at 7/25/2012 09:39:00 PM --
1、翻墙利器赛风3下载地址: http://dld.bz/caonima326 ,http://dld.bz/caonima745/
2、我们的订阅地址:http://feeds2.feedburner.com/chinagfwblog
3、停止订阅,请发邮件到
gfw-blog+unsubscribe@googlegroups.com
翻越防火长城,你可以到达世界上的每一个角落。(Across the Great Firewall, you can reach every corner in the world.)
没有评论:
发表评论