[经典小题一道] 在浏览器中输入:http://www.baidu.com/后到底发生了神马?
2015-12-24 00:00
344 查看
今天看到一句话很喜欢,就顺手记了下来:“真正的坚持到最后靠的不是激情,而是恰到好处的喜欢和投入”。
一直看到有这样一道题,感觉很有意思,因为在看到这个问题之前,我怎么没有想过这个呢?看来还是思想不够深入啊,以后要多多思考。
在浏览器输入:http://www.baidu.com/ 到最后浏览器出现相应的网页,这个过程究竟发生了神马?
首先是我们主动在浏览器输入,说明我们想请求与目的服务器连接,要想连接目的服务器,我们首先必须知道的是它的IP地址,这样我们才能找到它,所以我们首先做的NO.1
第一步:根据输入的内容,找到目的主机IP。
但是为什么我们输入是字母(域名)也可以呢?这里就涉及到了一个DNS域名解析的问题,它会帮你把你输入方便的域名转化为目的IP而给你哦,感觉这个人好厉害啊!那具体它又是如何解析的呢?
(1)假如你浏览器之前访问过这个地址那么它会缓存这个IP一段时间,如果有缓存,那就方便就近了,直接返回IP,否则进行下一步。
(2)如果缓存中没有这个IP,浏览器会进行一个系统调用,查询本地有个hosts文件,如果找到,直接返回IP,否则进行下一步(在计算机这里指Linux系统的目录etc下有个host文件,hosts文件中保存着域名和对应IP的对应解析)
(3)进行了本地(1)(2)查询无果后,只能借助于网络。路由器一般都会有自己的DNS缓存。如果无果,这能借助于DNS递归解析了。
(4)这时DNS服务器就会开始从根域名服务器开始递归搜索(感觉DNS服务器也挺辛苦的啊),从.com顶级域名服务器到baidu的域名服务器。到这里浏览器获得了IP,达到了第一步的目的。
有了我们心心念的IP地址后,感觉瞬间有了方向,那么接下来就是和网站服务器进行连接,这样我们才能和它传输数据啊。
第二步:浏览器与网站建立TCP连接
至于TCP的连接,这里又涉及了很多重要的知识点需要我们知道。采用大家都熟知的TCP三次握手就能够完成与服务器的连接,具体的过程要心中有数,这里面先省略。通过这个让我想到了一些小问题,都是需要知道,也是经常被问到的,TCP连接为什么是三次握手?不是两次、四次呢?这些道理需要我搞懂。(后续会整理好)
第三步:浏览器发起请求(请求类型GET POST.......)
之前的步骤都为我们打通了和服务器之间的通道了,所以接下来我们想要干啥就可以直接请求了。只管感觉和easy啊,但是。这里面设计了太多的关于http协议、Web开发之类的宝贵东西,只想说需要看的东西太多了。。
第四部:显示页面或返回其他
每一个点细扣都有太多的相关点,本事学识短浅,整理好后继续补充。
一直看到有这样一道题,感觉很有意思,因为在看到这个问题之前,我怎么没有想过这个呢?看来还是思想不够深入啊,以后要多多思考。
在浏览器输入:http://www.baidu.com/ 到最后浏览器出现相应的网页,这个过程究竟发生了神马?
首先是我们主动在浏览器输入,说明我们想请求与目的服务器连接,要想连接目的服务器,我们首先必须知道的是它的IP地址,这样我们才能找到它,所以我们首先做的NO.1
第一步:根据输入的内容,找到目的主机IP。
但是为什么我们输入是字母(域名)也可以呢?这里就涉及到了一个DNS域名解析的问题,它会帮你把你输入方便的域名转化为目的IP而给你哦,感觉这个人好厉害啊!那具体它又是如何解析的呢?
(1)假如你浏览器之前访问过这个地址那么它会缓存这个IP一段时间,如果有缓存,那就方便就近了,直接返回IP,否则进行下一步。
(2)如果缓存中没有这个IP,浏览器会进行一个系统调用,查询本地有个hosts文件,如果找到,直接返回IP,否则进行下一步(在计算机这里指Linux系统的目录etc下有个host文件,hosts文件中保存着域名和对应IP的对应解析)
(3)进行了本地(1)(2)查询无果后,只能借助于网络。路由器一般都会有自己的DNS缓存。如果无果,这能借助于DNS递归解析了。
(4)这时DNS服务器就会开始从根域名服务器开始递归搜索(感觉DNS服务器也挺辛苦的啊),从.com顶级域名服务器到baidu的域名服务器。到这里浏览器获得了IP,达到了第一步的目的。
有了我们心心念的IP地址后,感觉瞬间有了方向,那么接下来就是和网站服务器进行连接,这样我们才能和它传输数据啊。
第二步:浏览器与网站建立TCP连接
至于TCP的连接,这里又涉及了很多重要的知识点需要我们知道。采用大家都熟知的TCP三次握手就能够完成与服务器的连接,具体的过程要心中有数,这里面先省略。通过这个让我想到了一些小问题,都是需要知道,也是经常被问到的,TCP连接为什么是三次握手?不是两次、四次呢?这些道理需要我搞懂。(后续会整理好)
第三步:浏览器发起请求(请求类型GET POST.......)
之前的步骤都为我们打通了和服务器之间的通道了,所以接下来我们想要干啥就可以直接请求了。只管感觉和easy啊,但是。这里面设计了太多的关于http协议、Web开发之类的宝贵东西,只想说需要看的东西太多了。。
第四部:显示页面或返回其他
每一个点细扣都有太多的相关点,本事学识短浅,整理好后继续补充。
相关文章推荐
- 人工智能初体验(二):开发简单的图灵智能聊天工具
- http://blog.csdn.net/tswisdom/article/details/41823881
- MYSQL 错误 :Out of resources when opening file './datagather/mx_domain#P#p178.MYD' (Errcode: 24) 解决办法
- 利用spark进行层次社团发现(louvain算法测试)
- 年终盘点:2015年人工智能的五大关键词
- 1106. Lowest Price in Supply Chain (25)
- raid
- linker command failed with exit code 1 (use -v to see invocation)解决办法
- Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
- winmail mail server的安装和使用方法
- 【VisualSVN Server】Custom action GenerateSSLKey failed: Command terminated with non-zero exit code
- ERROR: Failed to load /usr/local/ERL_LIBS_FILE/esdl/rebar.config
- 表单验证(email,手机号,座机等)
- Daily Scrumming* 2015.12.22(Day 14)
- Daily Scrum- 12/23
- mybaits入门(含实例教程和源码)
- mybaits入门(含实例教程和源码)
- Yocto tips (16): Yocto 制作SDK分发Toolchain 脱离Yocto环境开发
- HDU-1023 -Train Problem II(卡特兰数)
- hdu1151Air Raid——最小路径覆盖