浏览器输入一个网址之后,从输入网址到显示出页面,之间经历了什么过程?
- DNS解析出IP地址
- TCP连接
- 发送Http请求
- 服务器接收到请求并返回Http报文
- 浏览器解析并渲染页面
DNS解析过程
- 浏览器先检查自身缓存中是否有被解析过的该域名对应的IP地址,如果有,缓存结束。同时域名被缓存的时间可通过TTL属性设置。(Time to live,域名解析在DNS服务器中存留时间)
- 如果浏览器自身缓存没有,即还没有命中,浏览器会检查操作系统缓存中是否有对应的已解析的结果。而操作系统也有一个域名解析的过程。在windows里的hosts文件中设置,如果在这里指定了一个域名对应的IP地址,浏览器会首先使用这个IP地址。(但是这种操作系统级别的域名解析很容易被黑客利用,通过修改你的hosts来把特定的域名解析到他指定的地址。所以在windows7中将hosts文件设置成readonly防止篡改)
- 如果还没有命中域名,才会真正请求本地域名服务器LDNS来解析这个域名,这台服务器一般在你城市的某个角落,不会很远,且性能很好,一般会缓存大部分域名解析结果,大概80%域名解析到这里就完成了。
- 如果LDNS还没有命中,就直接跳到Root Server根域名服务器请求解析。
- 根域名服务器返回给LDNS一个所查询域的主域名服务器(gTLD Server,国际顶尖域名服务器,如.com, .cn等)。
- 此时LDNS再发送请求给上一步返回的gTLD。
- 接受请求的gTLD查找并返回这个域名对应的Name Server的地址,这个Name Server就是网站注册的域名服务器。
- Name Server按照映射关系表找到目标IP,返回给LDNS。
- LDNS缓存这个域名和对应的IP。
- LDNS把缓存的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束。
TCP为什么可靠?怎么连接?
连接:三次握手
拆除连接:四次挥手
可靠性:三次握手、四次挥手、确认机制、滑动窗口、超时重传、拥塞机制。