科学上网的方法
##知其所以然 本文不是教程向,倾向于分析科学上网的一些原理。知其所以然,才能更好地使用工具,也可以创作出自己的工具。 科学上网的工具很多,八仙过海,各显神通,而且综合了各种技术。尝试从以下四个方面来解析一些其中的原理。大致先原理,再工具的顺序。 dns http/https proxy vpn socks proxy ##一个http请求发生了什么? 这个是个比较流行的面试题,从中可以引出很多的内容。大致分为下面四个步骤: dns解析,得到IP 向目标IP发起TCP请求 发送http request 服务器回应,浏览器解析 还有很多细节,更多参考: http://fex.baidu.com/blog/2014/05/what-happen/ http://stackoverflow.com/questions/2092527/what-happens-when-you-type-in-a-url-in-browser http://div.io/topic/609?page=1 从FE的角度上再看输入url后都发生了什么 ##DNS/域名解析 可以看到dns解析是最初的一步,也是最重要的一步。比如访问亲友,要知道他的正确的住址,才能正确地上门拜访。 dns有两种协议,一种是UDP(默认),一种是TCP。 udp 方式,先回应的数据包被当做有效数据 在linux下可以用dig来检测dns。国内的DNS服务器通常不会返回正常的结果。 下面以google的8.8.8.8 dns服务器来做测试,并用wireshark来抓包,分析结果。 dig @8.8.8.8 +tcp www.youtube.com 从wireshark的结果,可以看出在TCP三次握手成功时,本地发出了一个查询www.youtube.com的dns请求,结果,很快收到了一个RST回应。而RST回应是在TCP连接断开时,才会发出的。所以可以看出, TCP通讯受到了干扰,DNS客户端因为收到RST回应,认为对方断开了连接,因此也无法收到后面正确的回应数据包了。 再来看下解析twitter的结果: dig @8.8.8.8 +tcp www.twitter.com 结果: www.twit...