0
点赞
收藏
分享

微信扫一扫

计算机网络知识点整理(六)

you的日常 2022-03-31 阅读 54
c++面试

计算机网络之应用层 2

(一)HTTP的长连接和短连接

1、短连接

  • 只在数据传输过程保持连接,请求发起,连接建立,数据返回,连接关闭。
  • 它适用于一些实时数据请求,配合轮询来进行新旧数据的更替。

2、 长连接

  • 在连接发起后,请求关闭连接前客户端与服务端都保持连接,实质是保持这个通信管道,之后便可以对其进行复用。它适用于涉及消息推送,请求频繁的场景(直播,流媒体)。
  • 连接建立后,在该连接下的所有请求都可以重用这个长连接管道,避免了频繁了连接请求,提升了效率。

(二)长短轮询

  • 轮询:在一个循环周期内不断发起请求来得到数据的机制。
  • 短轮询: 短轮询指的是在循环周期内,不断发起请求,每一次请求都立即返回结果,根据新旧数据对比决定是否使用这个结果。
  • 长轮询:而长轮询及是在请求的过程中,若是服务器端数据并没有更新,那么则将这个连接挂起,直到服务器推送新的数据,再返回,然后再进入循环周期。

(三)发起一个HTTP请求后发生什么/从输入url到显示网页全过程

1、 DNS解析:把域名翻译成 IP 地址

(1)浏览器搜索自身的DNS缓存

首先浏览器会去搜索自身的DNS缓存,看缓存有没有过期,过期的话缓存的解析就结束了(chrome缓存的时间只有一分钟,查看chrome的缓存可打开:chrome://net-internals/#dns )。

(2)搜索操作系统自身的DNS缓存

如果浏览器没有找到缓存或者缓存过期失效,浏览器就会做一个系统调用,搜索操作系统自身的缓存,没有找到或者失效,解析结束(操作系统的缓存:window系统是一天,mac系统严格根据DNS协议中的TTL)。

(3)读取本地的hosts文件

若操作系统的缓存也没有找到或失效,浏览器就会去读取本地的hosts文件(Hosts文件也可以建立域名到IP地址的绑定关系,可以通过编辑Hosts文件来达到名称解析的目的。 例如,我们需要屏蔽某个域名时,就可以将其地址指向一个不存在IP地址,以达到屏蔽的效果)。

(4)浏览器发起一个DNS的系统调用

  • hosts中没有找到对应的配置项的话,浏览器发起一个DNS的调用(向本地主控DNS服务器,一般来说是你的运营商提供的)。
  • 运营商服务会先查找自身缓存找到对应条目,没有过期,解析成功
  • 若没找到对应条目,主控服务器会代替浏览器发起一个迭代的DNS解析的请求:
    • 先查找根域的,根域名服务器告诉本地服务器下一次应查询的顶级域名服务器的IP地址;
    • 本地域名服务器向顶级域名服务器进行查询,顶级域名服务器告诉本地域名服务器下一步应查询的权限服务器的IP地址;
    • 本地域名服务器向权限域名服务器进行查询,权限域名服务器告诉本地域名服务器所查询的主机的IP地址。
    • 运营商服务器拿到域名的IP,返回给操作系统的内核,同时缓存在了自己的缓存区,操作系统内核从DNS服务商拿来的IP地址返回给浏览器。(从客户端到本地服务器属于递归查询,而DNS服务器之间的交互属于迭代查询。)

2、 发起TCP3次握手

  • 拿到域名对应的IP地址之后,User-Agent(一般是指浏览器)会以一个随机端口(1024 < 端口 < 65535)向服务器的WEB程序的80端口发起TCP的连接请求。
  • 这个连接请求(原始的http请求经过TCP/IP4层模型的层层封包)到达服务器端后(这中间通过各种路由设备,局域网内除外),进入到网卡,然后是进入到内核的TCP/IP协议栈(用于识别该连接请求,解封包,一层一层的剥开),还有可能要经过Netfilter防火墙(属于内核的模块)的过滤,最终到达WEB程序,最终建立了TCP/IP的连接。

3、 建立TCP连接后发起HTTP请求在这里插入图片描述

4、 服务器端响应http请求,浏览器得到html代码;浏览器解析html代码,并请求html代码中的资源在这里插入图片描述

  • 浏览器拿到html文件后,就开始解析其中的html代码,遇到js/css/image等静态资源时,就向服务器端去请求下载(会使用多线程下载,每个浏览器的线程数不一样),这个时候就用上keep-alive特性了,建立一次HTTP连接,可以请求多个资源,下载资源的顺序就是按照代码里的顺序,但是由于每个资源大小不一样,而浏览器又多线程请求请求资源,所以请求成功显示的顺序并不一定是代码里面的顺序。
  • 浏览器在请求静态资源时(在未过期的情况下),向服务器端发起一个http请求(询问自从上一次修改时间到现在有没有对资源进行修改),如果服务器端返回304状态码(告诉浏览器服务器端没有修改),那么浏览器会直接读取本地的该资源的缓存文件。
  • 浏览器对页面进行渲染呈现给用户:浏览器利用自己内部的工作机制,把请求到的静态资源和html代码进行渲染,渲染之后呈现给用户。

5、归纳

  • 浏览器通过 DNS 把域名解析成对应的IP地址;
  • 根据这个 IP 地址在互联网上找到对应的服务器,建立 Socket 连接;
  • 客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档;
  • 在服务器端,实际上还有复杂的业务逻辑:服务器可能有多台,到底指定哪台服务器处理请求,这需要一个负载均衡设备来平均分配所有用户的请求;
  • 还有请求的数据是存储在分布式缓存里还是一个静态文件中,或是在数据库里;
  • 当数据返回浏览器时,浏览器解析数据发现还有一些静态资源(如:css,js或者图片)时又会发起另外的请求,而这些请求可能会在CDN上,那么CDN服务器又会处理这个用户的请求。
  • 客户端与服务器断开。由客户端解释HTML文档,在客户端屏幕上渲染图形结果。
举报

相关推荐

0 条评论