打开一个浏览器,输入网址 www.baidu.com,点击回车,很快,你将看到一个全国人民喜闻乐见的页面,那么从你点击回车开始到你看到页面这个时间段内,究竟都发生了哪些事情呢?
如果浏览器每天都正常的在工作,你恐怕没有闲情雅致来思考这个问题,但我相信,大多数人都遇到过这样的问题,QQ可以正常登陆,浏览器却无法打开任何网址的情况,我第一次遭遇这种经历时百思不得其解,后来在学习思科这门课时才对这里面的东西有了稍微清晰的了解,最近的工作涉及到了这方面的知识,就顺带着整理了一下。
大多数程序猿都知道,点击回车后,浏览器向服务器发起了get请求,大家也都知道,http请求要想到达目标主机是要走tcp的,但是我们要明白,要想建立TCP连接,是需要知道对方的IP地址和端口号的,没这玩意,是无法建立TCP连接的。对于网站,如果你输入的网址里没有指明端口号,那么,默认就是80端口,端口很容易获得,所以,我们现在需要知道服务器的IP地址。
这个时候就该DNS服务器上场了,这就是这个家伙
你可以选择自动获得DNS服务器地址,也可以自己设置DNS服务器的地址,每当发生QQ可以上线而网页都打不开的情况时,十之八九就是自动选择的DNS服务器出了问题了,所以这个时候只需要找到一个公共的可用的DNS服务器地址手动设置一下就好了。当我们访问百度时,其实我们先去访问了DNS服务器,DNS服务器拿到www.baidu.com这个网址后就开始找到它所对应的IP地址,如果这个DNS服务器没找到,它会把这个网址发往更高一级的DNS服务器,找不到,再继续向更高级DNS服务器发送,只要网址正确,最终总是可以找到其对应的IP地址的。
有了服务器的IP地址和端口号以后,我们的浏览器就可以和服务器建立起TCP连接了,把我们的Http请求发送给服务器,服务器收到请求后,再将http响应数据发送给浏览器,浏览器收到数据后再进行渲染展示。
以上的过程描述非常粗糙,实际过程很复杂,后续的博客将逐步对其进行拆解。