我是靠谱客的博主 笨笨向日葵,这篇文章主要介绍浏览器渲染页面全过程(TCP详解、HTTP详解)1、输入网址2、查询 DNS 查找对应的请求 IP 地址3、建立 TCP 连接(三次握手,四次挥手),现在分享给大家,希望可以做个参考。

  1. 用户输入URL地址
  2. 浏览器解析URL解析出主机名
  3. 浏览器将主机名转换成服务器ip地址(浏览器先查找本地DNS缓存列表 没有的话 再向浏览器默认的DNS服务器发送查询请求 同时缓存)
  4. 浏览器将端口号从URL中解析出来
  5. 浏览器建立一条与目标Web服务器的TCP连接(三次握手)
  6. 浏览器向服务器发送一条HTTP请求报文
  7. 服务器向浏览器返回一条HTTP响应报文
  8. 关闭连接 浏览器解析文档
  9. 如果文档中有资源 重复6 7 8 动作 直至资源全部加载完毕

1、输入网址

浏览器引入了 DNS 预取技术。它是利用现有的 DNS 机制,提前解析网页中可能的网络连接。

当我们开始在浏览器中输入网址的时候,浏览器其实就已经在智能的匹配可能得 url 了。它会从历史记录,书签等地方,找到已经输入的字符串可能对应的 url ,找到同输入的地址很匹配的项,然后给出智能提示,让你可以补全 url 地址。用户还没有按下 enter 键, 浏览器已经开始使用 DNS 预取技术解析该域名了。

对于 chrome 的浏览器,如果有该域名相关的缓存,它会直接从缓存中把网页展示出来,就是说,你还没有按下 enter,页面就出来了。如果没有缓存,就还是会重新请求资源。

2、查询 DNS 查找对应的请求 IP 地址

假设输入 www.baidu.com,大概过程:

  1. 浏览器搜索自己的 DNS 缓存。
  2. 在浏览器缓存中没找到,就在操作系统缓存中查找,这一步中也会查找本机的 hosts 看看有没有对应的域名映射。
  3. 在系统中也没有的话,就到你的路由器来查找,因为路由器一般也会有自己的 DNS 缓存。
  4. 若没有,则操作系统将域名发送至 本地域名服务器——递归查询方式,本地域名服务器 查询自己的 DNS 缓存,查找成功则返回结果,否则,采用迭代查询方式。本地域名服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动。
  5. 本地域名服务器 将得到的 IP 地址返回给操作系统,同时自己也将 IP 地址缓存起来。
  6. 操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存起来,以备下次别的用户查询时,可以直接返回结果,加快网络访问。
    至此,浏览器已经得到了域名对应的 IP 地址

3、建立 TCP 连接(三次握手,四次挥手)

三次握手:

1、客户端发送TCP报文段,首部设置参数SYN为1给服务器,服务器为此分配缓存和变量
2、服务器向客户端发送允许连接的SYN+ACK报文段。
3、客户端收到服务端发来的TCP报文段,也要为此分配缓存与变量,然后客户端再向服务端发送ACK报文段。

通俗理解:
A: 喂,在吗!
B: 在!
A: 噢

四次挥手

  1. 客户端发送一个 FIN 置为 1 的报文段。
  2. 服务器回送一个确认报文段。
  3. 服务器发送 FIN 置为 1 的报文段。
  4. 客户端回送一个确认报文段。

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、查询内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(90)

评论列表共有 0 条评论

立即
投稿
返回
顶部