计算机网络和浏览器

102 阅读11分钟

计算机网络

关于https

  • 使用http传输的内容很容易被中间人窃取、伪造和篡改
  • 加密方案
    • 在http和tcp层之间添加了一个安全层ssl/tsl,https先跟安全层通信,然后安全层再跟tcp通信
    • 安全层主要是对发起http请求的数据进行加密,对接收到http的内容进行解密操作
  • 加密步骤
    • 对称加密
      • 对称加密是指加密和解密都是使用相同的密钥,在https发送数据前,浏览器和服务器之间需要先协商加密方式和密钥
      • 步骤
        • 浏览器发送它所支持的浏览器套件列表和一个随机数client-random
        • 服务器会从加密套件列表选取的一个加密套件,并生成一个随机数servive-random,并将加密套件和随机数返回给浏览器
        • 浏览器和服务器拥有相同的client-random和service-random,再使用相同的方法将client-random和service-random混合成密钥master-secret,再利用master-secret和加密套件,双方进行加密传输
      • 缺点
        • 由于client-random和service-random是明文的,所以黑客还是可以拿到协商的加密套件和随机数,合成密钥,数据依然可以被破解
    • 非对称加密
      • 非对称加密有A、B两个密钥,如果使用A加密,只能使用B解密
      • 步骤
        • 浏览器出发送加密套件列表给服务器
        • 服务器返回公钥和加密套件给浏览器
        • 浏览器向服务器发送数据时,使用公钥加密,服务器使用私钥解密
      • 缺点
        • 非对称加密传递数据效率过低
        • 无法保证服务器向浏览器发送的数据是安全的,服务器只能使用私钥进行加密,私钥加密只能使用公钥解密,但是公钥能被拦截获取,所以无法保证服务器向浏览器发送的数据时安全的
    • 数字证书
      • 作用
        • 数字证书向浏览器证明服务器的身份
        • 数字证书里包含了服务器公钥
      • 申请流程
        • 首先A公司需要准备一套私钥和公钥留存备用
        • 然后A公司向CA机构提交公钥、公司、站点等信息等待认证
        • CA验证A公司提供资料的真实性,判断公司是否存在、是否合法等
        • 信息审核通过,CA会向A公司签发认证的数字证书,包含公钥、组织信息、有效时间、证书序列号、CA签名
    • https完整流程
      • 首先浏览器向服务器发送对称加密套件列表、非对称加密套件列表、以及随机数client-random
      • 服务器保存随机数client-random,选择对称加密套件和非对称加密套件,生成随机数service-random,向浏览器发送选择的加密套件、service-random、以及包含公钥的数字证书
      • 浏览器验证数字证书
      • 验证通过,浏览器保存公钥,并生成随机数pre-master,然后使用公钥对随机数进行加密,传递给服务器
      • 服务器拿出私钥,解密出pre-master
      • 服务器和浏览器拥有了共同的client-random、service-random、pre-master。然后服务器和浏览器使用这三组数据生成对称密钥。再使用对称密钥传递数据
      • pre-master是通过公钥加密后传输的,黑客无法获取pre-master,也就无法生成密钥,不能破解传输中的数据

cnd

  • 内容分发网络,依靠部署在各个地方的边缘服务器,通过分布式存储、负载均衡、重定向等功能模块,以就近性和服务器负载的判断,确保内容以一种极为高效的方式为用户提供所需要的资源
  • 流程
    • 输入url后先经过本地dns解析,返回cdn负载均衡服务器的ip地址
    • 浏览器访问这台负载均衡服务器,该服务器会根据浏览器的网络地址在cdn网络中找到一台比较合适提供服务的cdn服务器,把ip地址返回给浏览器
    • 浏览器根据ip地址访问cdn服务器,请求文件资源
    • 如果这台服务器没有相关的缓存文件,就去cdn网络的上层缓存服务器中拉取,如果上层也没有就继续向上查找,最后去原站上拉取数据
    • 任何在每一层刚刚没有拉取到数据的cdn服务器上做缓存

tcp三次握手、四次挥手

  • 三次握手
    • tcp/ip协议时传输层的一个面向连接的安全可靠的传输协议,三次握手是为了确保建立一个安全可靠的连接
    • 第一次握手是客户端发起的,客户端会发送一个报文,在报文里,SYN标志位为1,表示发起新的连接
    • 当服务端接收到这个报文之后就知道客户端想建立一个新的连接,于是服务器端就向客户端发送一个确认消息包,表示确认客户端发起的第一次连接请求
    • 此时对客户端而言,已经明确知道自己既能给服务端发送消息,也能接收到服务端的响应。但是对服务端而言,只能确定自己可以接收到客户端发过来的消息,不确定客户端能否收到自己的响应
    • 所以需要第三次握手,客户端对服务的进行回应
  • 四次挥手
    • 客户端会先发送一个报文,在报文里FIN标志位为1,当服务端接收到这个报文后,知道客户端想和我断开连接,但是服务端可能还有消息未发送完成
    • 服务端会先发送一个消息确认的响应,告诉客户端,已经接收到你的断开请求,然后继续发送未发送完全的消息
    • 待消息发送完后,会发送一个FIN=1的报文给客户端,表示服务端已经做好断开连接的准备,客户端收到这个消息,会发送服务端一个确认消息的报文,经过四次挥手,不管是服务端还是客户端都已经做好了断开连接的准备,于是连接就可以断开了

http1.0,http1.1,http2.0之间区别

  • http1.0和http1.1区别
    • 缓存处理
      • http1.0主要使用if-modified-since(比较资源最后的更新时间是否一致),expires(资源过期时间)来做缓存判断的标准
      • http1.1
        • 使用cache-control来判断是否命中协商缓存
          • max-age
          • no-cache
        • 使用Etag来判断资源的匹配信息
        • 使用if-none-match判断资源是否不一致
    • host头处理
      • http1.0认为每个服务器都绑定一个唯一的ip地址,请求消息中的url并没有传递主机名
      • 但是随着虚拟机技术的发展,一台物理服务器上可以存在多个虚拟主机,共享同一个ip地址
      • http1.1 的请求消息和响应消息都指出host头
    • 长连接
      • http1.0需要使用keep-alive来告知服务器端建立一个长连接
      • http1.1默认支持长连接
  • http1.x和http2.0区别
    • http1.x版本缺陷:线程阻塞,在同一时间,同一域名的请求有一定数量限制,超过限制数目的请求会被阻塞
    • 二进制分帧
      • http1.x的解析是基于文本,基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性需要考虑的方面会有很多。二进制则不同,只认0和1的组合,所以http2.0的协议解析采用二进制格式
      • http2.0在应用层和传输层之间添加了一个二进制分帧层,在二进制分帧层中,http2.0会将所有传输的信息分割为更小的消息盒帧,并对它们采用二进制格式编码
    • 多路复用
      • 多路复用允许同时通过单一的http2.0连接发起多个请求-响应消息,即连接共享,提高连接的利用率,一个request对应一个id,这样一个连接上可以有多个request,接收方根据request的id将request再归属到各自不同的服务器请求里面
    • header压缩
      • http1.x的header带有大量信息
      • http2.0对header数据进行压缩,减少需要传输的header大小
      • 压缩策略
        • http2.0在客户端和服务端使用首部表来跟踪和存储之前发送的键-值对,对于相同的数据,不再通过每次请求和响应发送
        • 首部表在http2.0的连接存续期内始终存在,由客户端和服务器共同更新
        • 每个新的首部键-值对要么被追加到当前表的末尾,要么替换表中之前的值
    • 服务端推送
      • 在客户端请求之前发送数据的机制
      • 服务端可以在发送页面html时主动推送其它资源

说说对http3的了解

  • http3来源
    • google基于UDP开发出了新的协议QUIC,希望取代tcp提高传输效率

http和websocket的区别

  • http协议
    • HTTP是单向的,客户端发送请求,服务器发送响应。举例来说,当客户端向服务器发送请求时,该请求以HTTPHTTPS的形式发送,在接收到请求后,服务器会将响应发送给客户端。
    • 每个请求都与一个对应的响应相关联,在发送响应后客户端与服务器的连接会被关闭。每个HTTPHTTPS请求每次都会新建与服务器的连接,并且在获得响应后,连接将自行终止。 HTTP是在TCP之上运行的无状态协议,TCP是一种面向连接的协议,它使用三向握手方法保证数据包传输的传递并重新传输丢失的数据包。
  • websocket
    • websocket是一种双向通信协议,可以通过重用已建立的连接通道将数据从客户端发送到服务器,或者从服务器发送到客户端,连接保持活动状态,直到被客户端或者服务端终止
    • 几乎所有的实时应用程序(如交易、监视、通知等)都使用websocker在单个通信通道上接收数据

DNS预解析

  • dns优化
    • 减少dns请求次数
    • 缩短dns解析时间dns-preftch
  • dns-prefetch dns预解析
    • 是前端网络性能优化的一种措施,根据浏览器定义的规则,提前解析之后可能会用到的域名,使解析结果缓存到系统缓存中,缩短dns解析时间,进而提高网站的访问速度
    • 原理
      • 当浏览器访问一个域名时,需要解析dns,获得对应域名的ip地址,在解析过程中按照下面顺序依次读取缓存,直到拿到ip地址
        • 浏览器缓存
        • 系统缓存
        • 路由器缓存
        • 运营商dns缓存
        • 根域名服务器
        • 顶级域名服务器
        • 主域名服务器
      • dns-prefetch就是将解析后的ip地址缓存在系统中,因为在本地系统做了dns缓存,使得dns在解析时,提前在系统缓存中找到了对应ip,后续的解析步骤不需要再进行,缩短了dns解析时间
    • 使用方式:
<link rel="dns-prefetch" href="https://baidu.com"/>

DNS劫持

  • DNS
    • dns是用来解析域名的,在正常情况下,用户的每一个上网请求都会通过dns解析指向到与之匹配的ip地址,

    • 用户主机上运行着dns客户端

    • 浏览器将接收到的url中抽取出域名字段,即访问的主机名,并将主机名传送给dns应用客户端

    • dns客户端向dns服务器发送一份查询报文,

    • 该dns客户端最终回收到一份回答报文,其中包括该主机名对应的ip地址

    • 想要获取目标网站ip,除了在本机中查找,还需要第三方服务器参与,只要经过第三方服务器,网络就属于不可控制范围,就有可能产生dns劫持,比如获取的ip并不是实际想要的ip地址,从而打开非目标网站;黑客将本地dns缓存中的目标网站替换成其他网络ip返回,客户端并不知情,依旧按照正常的流程建立连接,