浏览器渲染页面全过程(TCP详解、HTTP详解)

  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。

后续没写完,慢慢写

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值