概述
- 用户输入URL地址
- 浏览器解析URL解析出主机名
- 浏览器将主机名转换成服务器ip地址(浏览器先查找本地DNS缓存列表 没有的话 再向浏览器默认的DNS服务器发送查询请求 同时缓存)
- 浏览器将端口号从URL中解析出来
- 浏览器建立一条与目标Web服务器的TCP连接(三次握手)
- 浏览器向服务器发送一条HTTP请求报文
- 服务器向浏览器返回一条HTTP响应报文
- 关闭连接 浏览器解析文档
- 如果文档中有资源 重复6 7 8 动作 直至资源全部加载完毕
1、输入网址
浏览器引入了 DNS 预取技术。它是利用现有的 DNS 机制,提前解析网页中可能的网络连接。
当我们开始在浏览器中输入网址的时候,浏览器其实就已经在智能的匹配可能得 url 了。它会从历史记录,书签等地方,找到已经输入的字符串可能对应的 url ,找到同输入的地址很匹配的项,然后给出智能提示,让你可以补全 url 地址。用户还没有按下 enter 键, 浏览器已经开始使用 DNS 预取技术解析该域名了。
对于 chrome 的浏览器,如果有该域名相关的缓存,它会直接从缓存中把网页展示出来,就是说,你还没有按下 enter,页面就出来了。如果没有缓存,就还是会重新请求资源。
2、查询 DNS 查找对应的请求 IP 地址
假设输入 www.baidu.com,大概过程:
- 浏览器搜索自己的 DNS 缓存。
- 在浏览器缓存中没找到,就在操作系统缓存中查找,这一步中也会查找本机的 hosts 看看有没有对应的域名映射。
- 在系统中也没有的话,就到你的路由器来查找,因为路由器一般也会有自己的 DNS 缓存。
- 若没有,则操作系统将域名发送至 本地域名服务器——递归查询方式,本地域名服务器 查询自己的 DNS 缓存,查找成功则返回结果,否则,采用迭代查询方式。本地域名服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动。
- 本地域名服务器 将得到的 IP 地址返回给操作系统,同时自己也将 IP 地址缓存起来。
- 操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存起来,以备下次别的用户查询时,可以直接返回结果,加快网络访问。
至此,浏览器已经得到了域名对应的 IP 地址
3、建立 TCP 连接(三次握手,四次挥手)
三次握手:
1、客户端发送TCP报文段,首部设置参数SYN为1给服务器,服务器为此分配缓存和变量
2、服务器向客户端发送允许连接的SYN+ACK报文段。
3、客户端收到服务端发来的TCP报文段,也要为此分配缓存与变量,然后客户端再向服务端发送ACK报文段。
通俗理解:
A: 喂,在吗!
B: 在!
A: 噢
四次挥手
- 客户端发送一个 FIN 置为 1 的报文段。
- 服务器回送一个确认报文段。
- 服务器发送 FIN 置为 1 的报文段。
- 客户端回送一个确认报文段。
1、客户端向服务端发送第一次FIN报文时,告诉服务端,我想断开连接
2、服务端可能还有数据需要发送,所以收到信息后先返回一个ACK报文,告诉客户端我知道了,这样客户端就不会重复发想断开连接的请求。
3、服务端在处理完数据后,给客户端发送FIN报文,然后进入超时等待
4、客户端向服务端发送ACK报文,双方断开连接,释放内存。
题外话,SYN泛洪攻击 (DDOS【拒绝服务攻击】中的一种)
SYN泛洪攻击就是客户端给服务端发送SYN,服务端开辟空间,然后回复ACK,客户端不再予以回复,让服务端的资源一直挂着,还不断地给客户端发送ACK确认是否收到,这样如果攻击者发多次SYN给服务端,全都不予以回复,这样占用的内存、CPU就越来越多,最后导致死机。
如何防范SYN泛洪攻击?
有好几种方法
1、缩短SYN TimeOut的时间
缺点:
(1)过低的TimeOut会影响客户的正常访问
(2)适用于攻击者攻击不频繁的情况下
2、设置SYN Cookie,就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,并记录地址信息,以后从这个IP地址来的包会被一概丢弃。
缺点:
(1)这样做的结果也可能会影响到正常用户的访问。
(2)SYN Cookie更依赖于对方使用真实的IP地址,如果攻击者以数万/秒的速度发送SYN报文,同时利用SOCK_RAW随机改写IP报文中的源地址,就毫无意义。
3、Syn Cache技术
这种技术是在收到SYN数据报文时不急于去分配TCB,而是先回应一个SYN ACK报文,并在一个专用HASH表(Cache)中保存这种半开连接信息,直到收到正确的回应ACK报文再分配TCB。在FreeBSD系统中这种 Cache每个半开连接只需使用160字节,远小于TCB所需的736个字节。在发送的SYN ACK中需要使用一个己方的Sequence Number,这个数字不能被对方猜到,否则对于某些稍微智能一点的Syn Flood攻击软件来说,它们在发送Syn报文后会发送一个ACK报文,如果己方的Sequence Number被对方猜测到,则会被其建立起真正的连接。因此一般采用一些加密算法生成难于预测的Sequence Number。
后续没写完,慢慢写
最后
以上就是笨笨向日葵为你收集整理的浏览器渲染页面全过程(TCP详解、HTTP详解)1、输入网址2、查询 DNS 查找对应的请求 IP 地址3、建立 TCP 连接(三次握手,四次挥手)的全部内容,希望文章能够帮你解决浏览器渲染页面全过程(TCP详解、HTTP详解)1、输入网址2、查询 DNS 查找对应的请求 IP 地址3、建立 TCP 连接(三次握手,四次挥手)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复