科学上网的一些原理
来源:http://hengyunabc.github.io/something-about-science-surf-the-internet/知其所以然本文不是教程向,倾向于分析科学上网的一些原理。知其所以然,才能更好地使用工具,也可以创作出自己的工具。科学上网的工具很多,八仙过海,各显神通,而且综合了各种技术。尝试从以下四个方面来解析一些其中的原理。大致先原理,再工具的顺序。dnshttp/https proxyvpnsocks 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-browserhttp://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来抓包,分析结果。1dig @8.8.8.8 www.youtube.comdns-udp-youtube从wireshark的结果,可以看到返回了三个结果,前面两个是错误的,后面的是正确的。但是,对于dns客户端来说,它只会取最快回应的的结果,后面的正确结果被丢弃掉了。因为中间被插入了污染包,所以即使我们配置了正确的dns服务器,也解析不到正确的IP。tcp 方式,有时有效,可能被rest再用TCP下的DNS来测试下:1dig @8.8.8.8 +tcp www.youtube.comdns-tcp-youtube-reset从wireshark的结果,可以看出在TCP三次握手成功时,本地发出了一个查询www.youtube.com的dns请求,结果,很快收到了一个RST回应。而RST回应是在TCP连接断开时,才会发出的。所以可以看出,TCP通讯受到了干扰,DNS客户端因为收到RST回应,认为对方断开了连接,因此也无法收到后面正确的回应数据包了。再来看下解析twitter的结果:1dig @8.8.8.8 +tcp www.twitter.com结果:1www.twitter.com. 590 IN CNAME twitter.com.twitter.com. 20 IN A 199.59.150.7 80twitter.com
阅读更多