网络学习笔记 | 豆包MarsCode AI刷题

48 阅读6分钟

一、网络传输

当我们输入一个网址,打开一个网页时,主要涉及DNS、TCP、HTTP(或HTTPS)等协议。

1.DNS协议

DNS协议本质上是将我们输入的域名(url)转换为IP地址,从而实现传输。 用户输入域名时,DNS客户端与本地DNS交互,本地DNS查询缓存或执行后续的查询操作(如果缓存中没有要查询的内容)。 DNS查询分为递归和迭代查询。递归查询指,本地DNS服务器会请求根DNS服务器,之后根DNS查询到对应记录后,请求下一级DNS,直到查询到用户要访问的url。迭代查询指,本地DNS服务器会请求根DNS服务器,之后根DNS查询到对应记录后,将下一级DNS的地址返回给本地DNS,本地DNS访问下一级DNS,直到查询到用户想要访问的地址。

TCP与UDP

TCP与UDP是重要的传输层协议,主要负责处理应用层的数据,将应用层的数据封装为TCP\UDP包,并交给网络层处理。 TCP是一种面向连接的可靠的传输层协议,建立连接和断开连接的过程又分别被称为三次握手和四次挥手。TCP有着重传、差错控制、确认、拥塞控制等机制,所以传输的可靠性很高。 TCP的连接是逻辑上的连接,并非实际的连接,两个主机间的实际连接需要依赖于更加底层的协议(如物理层),因此实际连接中断(如网线断了),TCP连接仍然不会中断。 UDP相对来说较为简单,因为UDP协议不需要建立可靠的连接,也无重传、确认等机制,所以传输效率通常较高,适用于对效率有一定要求,但可以容忍一定的丢包的情况(如直播)。

HTTP协议

HTTP协议即超文本传送协议,是一种非常重要的应用层协议,相比较更加底层的TCP协议,HTTP规定了更多关于数据包的语义的信息。 我认为HTTP与TCP的设计实际上是"Keep it simple, stupid"的体现,TCP专注于逻辑连接建立、差错控制、拥塞控制等底层功能,而关于数据包语义的解析则交给应用层的HTTP。每个协议专注于自己的功能,简化了设计和实现,这也符合OSI七层协议最初设计的理念。 HTTP1.1相比较HTTP有以下改进:

  • 缓存处理
  • 长连接:HTTP1.1默认使用长连接(keep-alive),可以在一个TCP连接上发送多个请求和响应,避免了频繁建立和关闭连接的开销。
  • Host头,HTTP1.1要求请求中必须包含Host头,这样可以支持虚拟主机和域名共享。

HTTPS协议

HTTPS的产生主要是考虑到了访问的安全因素,使用HTTPS可以有效避免页面篡改、信息泄露等风险。 HTTPS主要是使用位于应用层和传输层之间的TLS/SSL协议保护HTTP数据。 通常情况下,HTTPS连接需要经过密钥协商和传输的过程。 密钥协商具体使用哪种算法,取决于客户端和服务器所支持的加密套件,以及服务器的公钥证书类型,TLS协商过程中,密钥交换算法可以是Diffie-Hellman(DH)或者其椭圆曲线版本(ECDH),也可以是RSA或者其椭圆曲线版本(ECDSA)。总结来说,密钥交换依赖于非对称算法。 加密过程也取决于客户端和服务器所支持的加密套件,以及服务器的公钥证书类型,通常来说是对称加密算法,因为对称加密算法效率更高。 为什么不采用非对称加密?因为非对称加密的复杂度通常较高,效率不高。以RSA举例,RSA解密需要计算cd(modn)c^d(mod\quad n),通常来说,d的值非常大,位数很高,因此即使使用快速幂,也需要经过大量的运算,运算速度远不如现有的对称加密算法。 因此总结来说,HTTPS使用服务器证书中的公钥进行密钥协商,之后使用对称加密进行通信。 为了确保网站的证书是可信的,浏览器通常会保存一些他们信任的根证书,由根证书签署的证书即被认为是可信的。

二、网络提速

1.HTTP2.0

HTTP2.0相比1.x有以下几个重大改进:

  • 二进制分帧:HTTP2.0将请求和响应的数据分割成更小的帧,并采用二进制编码,从而提高了传输效率和可靠性。
  • 多路复用:HTTP2.0允许在一个TCP连接上同时发送多个请求和响应,而不需要按照顺序等待,从而减少了延迟和网络阻塞。
  • 头部压缩:HTTP2.0对请求和响应的头部进行压缩,减少了冗余的头部数据,节省了带宽。

2.QUIC

使用QUIC主要有以下几个原因:

  • 建立连接的握手延迟大:HTTPS包含两个握手,即TCP三次握手(1个RTT)和TLS握手(2个RTT或1个RTT)。完整握手总共需要3个RTT(或2个RTT),对于直播等需要首帧秒开场景,握手延迟太大。
  • TCP的队首阻塞:HTTP2.0中,多个HTTP连接作为不同的流,共用一条TCP连接发送,对于所有的流,应用层都必须按序处理。若某个流的数据丢失,后面其他流的数据都会被阻塞,直到丢失的流数据重传完成其他流才能被继续传输。 QUIC建立连接时间大约0~1 RTT,在两方面做了优化: 1)传输层使用了UDP,减少TCP三次握手(1RTT)的延迟,也可以避免TCP造成的队头阻塞问题。 2)加密协议采用了TLS 协议的最新版本TLS 1.3,相对之前的TLS 1.1-1.2,TLS1.3允许客户端无需等待TLS握手完成就开始发送应用程序数据的操作,可以支持1 RTT和0RTT。 QUIC在用户态实现主要是因为TCP协议的更新滞后,TCP协议是实现在操作系统内核内,但是用户端的操作系统版本升级非常困难,很多老旧的系统还有大量用户使用,因此TCP协议的一些更新很难被快速推广。所以为了快速推广,选择在用户态实现QUIC。

3.同运营商访问

同一运营商网络内服务的QoS较好,所以通常通过解析实现访问同一运营商网络下的服务器。

4.CDN

利用了缓存的思想,将一些静态内容(如图片、视频)缓存到离用户较近的节点(边缘机房),可以大大提高用户访问这些静态资源的效率,减少因网络拥塞和网络传输的成本。

5.DSA

对网络中节点进行探测,根据算法选择最优路径。

三、容灾

容灾主要是分为故障感知、自动切换与故障恢复。 总结来说:容灾在技术上包括冗余(如RAID 5、冗余的网络连接、缓存容灾)等技术,在管理上需要做到排查、响应、止损、修复。通常来说,故障止损要在第一时间做(灾备预案的建设),故障的排查需要沟通。