网络结构、网络协议和网络分层
首先,我们可以通过借用蟹堡王的比喻来理解网络结构的目的。
以外卖为例,我们需要知道谁要吃外卖、吃什么以及送到哪里去。在网络中,我们有以下角色和概念:
顾客:客户端 分店:服务端 转发分店:路由器 转发表格:网络协议 整体的网络结构如下: 服务器 -> 企业路由器 -> ISP 路由器 -> 家庭路由器 -> 终端
此外,根据网络规模的不同,我们可以将比奇堡、几个分店和全国通信分别比作网络的局域网、城域网和广域网。而电路交换和分组交换则可以类比电话和传真。
接下来,我们将使用快递体系来比喻网络协议的分层。
网络分层的结构如下:
应用层(快递员) 传输层(卡车) 网络层(高速公路) 链路层 物理层 协议定义了通信实体之间交换的报文格式、顺序以及报文发送和接收后的动作。报文主要由标头和载荷组成。在应用层,寄件人和收件人关注寄件和收件地址以及相关信息;而在网络层,快递公司还需要关注中间的集散地。
下面是一些报文的展示:
链路层帧(frame):介质、源地址、目标地址(可能还包括协议类型) IP 分组(packet):协议版本、源 IP 地址、目标 IP 地址、载荷长度、下一个协议(可能还包括其他字段) TCP 报文段(segment):源端口号、目标端口号、序列号(seq)、确认序号(ack,通常为 seq+1)、头部长度、窗口大小 HTTP 报文(message):请求方法、路径、协议版本、请求头(可能还包括其他字段)
此外,还有 TCP 报文的结构,但这里我们不展开详细介绍。
在网络协议的发展过程中,出现了 HTTP 1.0、HTTP 1.1、HTTP 2.0 和 HTTP 3.0。
HTTP 协议的基本报文结构如下:
请求:
请求行:方法、路径、协议版本 请求头/空行 请求体 响应:
响应行:协议版本、状态码 响应头/空行 响应体 针对 HTTP 的发展,出现了一些问题:
短连接浪费:在 HTTP 1.0 中,每次请求都需要建立一个新的连接,造成了连接的频繁建立和关闭,浪费了资源。为了解决这个问题,HTTP 1.1 引入了默认的长连接,不需要在每个请求之后关闭连接,而是可以在一个连接上发送多个请求和接收多个响应,提高了效率,减少了资源消耗。
队头堵塞:在 HTTP 1.x 版本中,存在队头堵塞的问题。当一个请求在传输过程中遇到延迟或阻塞时,后续的请求也必须等待,导致了性能下降。为了解决这个问题,HTTP 2.0 引入了帧的概念,实现了一条 TCP 连接上的多路复用,可以同时发送和接收多个请求和响应,提高了并发性能。此外,HTTP 2.0 还引入了头部压缩和服务端推送等特性,进一步优化了性能和效率。
TCP 自身的队头堵塞问题:在传输层,TCP 本身也存在队头堵塞的问题。当一个数据包丢失或延迟时,后续的数据包都必须等待,造成了延迟和性能问题。为了解决这个问题,引入了QUIC(Quick UDP Internet Connections)协议,它融合了 TCP 和 TLS,通过使用 UDP 协议传输数据,并采用更灵活的连接管理和错误恢复机制,从而降低了延迟和提高了性能。QUIC 的握手过程只需要一次往返时间(1-RTT),并且支持零往返时间(0-RTT)重连。
CDN 运行原理:
CDN(内容分发网络)旨在减轻服务器的负载并降低延迟。其工作原理如下:
DNS 解析:当用户请求访问某个资源时,首先进行 DNS 解析。如果解析发现该资源可以通过 CDN 服务提供,那么会将解析请求交给专门的 CDN DNS 服务器处理,并返回适合负载和位置的 CDN 服务器的 IP 地址。
内容缓存和分发:当用户发送请求到 CDN 服务器时,CDN 服务器会根据用户的位置选择最近的节点,从缓存中获取请求的资源。如果缓存中不存在,CDN 服务器会通过一定的策略(如拉策略或推策略)从源服务器获取资源,并将其缓存在节点上,以便下次请求时可以直接从节点获取,提高访问速度。
WebSocket:
WebSocket 是一种有状态的持久连接协议,它允许在客户端和服务器之间建立双向通信,实现实时数据传输和服务器主动推送数据的能力。以下是关于 WebSocket 的一些特点和用法:
与 HTTP 的关系:WebSocket 是通过 HTTP 升级而来的协议。在建立 WebSocket 连接之前,客户端会发送一个特殊的 HTTP 请求,请求头包含了协议升级的信息。服务器如果同意升级,就会返回状态码 101 Switching Protocols,并进行协议切换,从而建立 WebSocket 连接。
持久连接:与传统的 HTTP 请求-响应模式不同,WebSocket 连接是一种持久连接,不需要为每个请求都建立新的连接,减少了连接建立和关闭的开销。
双向通信:WebSocket 支持双向通信,客户端和服务器可以随时发送消息给对方。这使得服务器可以实时向客户端推送数据,而不需要客户端发起请求。
低延迟:由于建立了持久连接,WebSocket 可以实现实时的数据传输,对于需要频繁通信和实时更新的应用场景非常有用,如聊天应用、实时游戏等。
协议独立性:WebSocket 是一种独立于应用层协议的传输协议,可以在多种应用层协议上使用,如 HTTP、HTTPS 等。
安全性:WebSocket 支持加密传输,可以通过使用 SSL/TLS(Secure Sockets Layer/Transport Layer Security)协议来保证数据的安全性。
网络安全(HTTPS/SSL/TLS):
网络安全的三个主要要素是机密性、完整性和身份验证。
机密性:机密性保证数据在传输过程中的保密性,防止被未授权的人窃听和解读。HTTPS 是一种基于 SSL/TLS 的加密协议,它使用公钥和私钥来加密和解密数据,确保传输过程中的机密性。
完整性:完整性确保数据在传输过程中的完整性和未被篡改。密码散列函数(哈希函数、摘要函数)是一种常用的保证完整性的机制,它将任意长度的输入数据转换为固定长度的哈希值,即使输入数据发生微小的变化,哈希值也会产生显著的变化。
身份验证:身份验证用于确认通信双方的身份和确保数据的来源可信。数字签名是一种常见的身份验证机制,它使用私钥对明文内容的哈希值进行加密,生成数字签名。服务器将自己的信息和公钥登记到证书颁发机构(CA),CA 会颁发带有数字签名的公钥证书。客户端在接收到服务器的公钥证书后,使用植入浏览器的 CA 公钥对数字签名进行解密,并与生成的哈希值进行比对,从而验证证书的真实性和完整性。这样,客户端就可以使用服务器的公钥进行加密,安全地发送协商密钥等信息给服务器。
总结:
网络结构、网络协议和网络分层是构成计算机网络的重要概念。
网络结构通过比喻蟹堡王的外卖流程和转发分店的角色,解释了服务器、路由器和终端之间的关系和通信方式。
网络分层利用快递体系的比喻,将应用层、传输层、网络层、链路层和物理层归类,并介绍了各层的报文格式和功能。
HTTP 协议的发展从 HTTP 1.0 到 HTTP 3.0,通过详细描述了请求和响应的报文结构,以及每个版本引入的改进和解决的问题。
CDN 的运行原理包括 DNS 解析、内容缓存和分发,通过选择最近的节点和拷贝策略来减轻服务器压力和降低延迟。
WebSocket 是一种有状态的持久连接协议,支持双向通信和低延迟传输,可以通过 HTTP 升级实现连接,并可以在多个应用层协议上使用。
网络安全涉及 HTTPS、SSL 和 TLS,其中 HTTPS 通过加密保证机密性,密码散列函数确保完整性,数字签名用于身份验证,以确保安全的通信和数据传输。
这些概念和技术都是计算机网络中非常重要的部分,对于理解和构建网络系统至关重要。