知识列表
- socket编程
- 什么是多路复用?如何使用select/poll/epoll
- 如何实现长连接和短连接
- 端口号
- HTTPS与HTTP的区别
- HTTPS的工作原理
- SSL/TLS
- HTTP/1.1 HTTP/2.0 HTTP/3.0
- DNS解析
- 负载均衡
- CDN
- WebSocket
- FTP、SMTP、IMAP 和 POP3 的基本原理和应用场景?
- 零拷贝技术
1.socket编程
(1)socket的基本流程

(1)客户端:
1)socket():使用 socket()函数创建一个套接字,指定协议族、套接字类型和协议。
2)connect():使用 connect()函数连接到服务器的指定 IP 地址和端口。3)send()/recv():使用 send()函数发送数据,使用 recv()函数接收数据。
4)close():使用 close()函数关闭套接字连接。
(2)服务器:
1)socket():使用 socket()函数创建一个套接字。
2)bind():使用 bind()函数将套接字绑定到本地地址和端口。
3)listen():使用 listen()函数使套接字进入监听状态,等待客户端连接。
4)accept():使用 accept()函数接受客户端连接,返回新的套接字用于通信。
5)send()/recv():使用 send()函数发送数据,使用 recv()函数接收数据。
6)close():使用 close()函数关闭套接字连接。
(2)如何通过socket实现可靠数据传输
- 序列号和确认号序列号:表示数据包的顺序,确保接收方按正确顺序组装数据确认号:接收方发送确认号,通知发送方已成功接收的数据
- 超时重传超时机制:在指定时间内未收到确认,发送方重传数据包,确保数据到达
- 流控制接收窗口:接收方通过接收端口通知发送方当前可接受的数据量,避免缓冲区溢出
- 拥塞控制拥塞窗口:发送方根据网络状况调整拥塞窗口大小,避免网络拥塞,提高传输效率。
2.什么是多路复用?如何使用select/poll/epoll
多路复用是一种技术,允许一个单独的进程可以同时监控多个文件描述符,以查看是否有任何一个文件描述符准备好了进行I/O操作,这种技术在需要同时处理大量并发连接的网络服务器中非常有用,因为它可以有效地提高系统的资源利用率和响应速度
(1)select:
1)创建一个文件描述符集合(fd_set)。
2)将需要监控的文件描述符添加到集合中。
3)调用 select 函数,并传递文件描述符集合和超时时间。
4)select 函数返回准备好进行 I/O 操作的文件描述符数量。
fd_set readfds;
FD_ZERO(&readfds);
FD_SET(sockfd, &readfds);
struct timeval tv;
tv.tv_sec = 5;
tv.tv_usec = 0;
int retval = select(sockfd + 1, &readfds, NULL, NULL, &tv);
优点:简单易用,几乎在所有平台上都可用。
缺点:在处理大量文件描述符时性能较差,因为每次调用 select 都需要遍历所有文件描述
符。
(2)**Poll:**
1)创建一个 pollfd 结构数组,并将需要监控的文件描述符添加到数组中。
2)调用 poll 函数,并传递文件描述符数组和超时时间。
3)poll 函数返回准备好进行 I/O 操作的文件描述符数量。
struct pollfd fds[2];
fds[0].fd = sockfd1;
fds[0].events = POLLIN;
fds[1].fd = sockfd2;
fds[1].events = POLLIN;
int retval = poll(fds, 2, 5000);
优点:没有文件描述符数量限制。
缺点:在处理大量文件描述符时性能仍然较差,因为每次调用 poll 都需要遍历整个数组
(3)**Epoll:**
1)使用 epoll_create 创建一个 epoll 实例。
2)使用 epoll_ctl 添加、修改或删除需要监控的文件描述符。
3)使用 epoll_wait 等待事件,并获取准备好进行 I/O 操作的文件描述符。
优点:性能优越,适用于大量并发连接的场景;不需要每次调用都遍历所有文件描述符。
缺点:仅在 Linux 系统上可用。
3.如何实现长连接和短连接
- 长连接在TCP建立连接后,保持连接状态,进行多次请求和响应,而不是每次请求后立即关闭连接实现是在服务器和客户端在第一次连接保持连接,通过心跳包等机制保持连接状态适用于需要频繁通信的场景,如数据库连接,消息队列
- 短连接每次请求和响应之后,立即关闭连接,下一次请求时重新建立连接每次请求和响应完成后,客户端和服务器立即关闭连接适用于请求频率较低,每次请求的场景,如HTTP 1.0请求
4.端口号
在网络通信中,端口号用于标识特定的网络服务,每个端口号对应一个网络服务,范围从0到65535
http:80,https:443,FTP:21,SSH:22,DNS:53
5.HTTPS与HTTP的区别
HTTP端口是80,HTTPS是443,
HTTP的数据以明文的形式传输,容易被窃听和篡改,HTTPS的数据通过SSL/TLS加密传输,确保数据的机密性和完整性
HTTP不需要证书,HTTPS需要SSL/TLS证书来验证服务器身份
HTTP的开销较低,HTTPS加密和解密过程增加了一定的处理开销
搜索引擎对HTTP站点的排名较低,搜索引擎对HTTPS更倾向,排名较高
HTTP适用于一般的非敏感数据传输,HTTPS适用于需要保护铭感数据的传输,如银行等
6.HTTPS的工作原理
- 建立连接,客户端向服务器发送HTTPS请求,服务器返回SSL/TLS证书,包含公钥和服务器身份信息
- 身份验证:客户端验证服务器的证书是否由可信的CA(证书颁发机构)签发,并且证书是否有效
- 加密秘钥协商:客户端生成一个会话秘钥,并使用服务器的公钥加密这个会话秘钥,然后发送给服务器,服务器使用自己的私钥解密会话秘钥,双发都拥有相同的会话秘钥
- 加密通信:双方使用会话秘钥对数据进行加密和解密,确保传输的数据不会被窃听和篡改
7.SSL/TLS
SSL(Secure Sockets Layer,安全套阶层)和TLS(Transport Layer Security,传输层安全)是用于在网络层上建立安全连接的协议。TLS是SSL的升级版本,提供了更强的安全性。SSL/TLS通过加密数据传输,认证服务器和客户端身份,并保证数据完整性,确保通信的安全性
SSL/TLS的基本工作流程
- 客户端问候(Client Hello)客户端向服务器发送一个”Client Hello”消息,消息中包含客户端支持的SSL/TLS协议版本,加密算法列表,压缩方法以及一个随机数
- 服务器问候(Server Hello)服务器接收到”Client Hello”消息后,选择一个协议版本,加密算法和压缩方法,并将这些选择通过”Server Hello”消息返回给客户端。同时服务器也会生成一个随机数
- 服务器证书(Server Certificate)服务器向客户端发送其SSL/TLS证书,证书中包含服务器的公钥以及由CA(证书颁发机构)签名的服务器身份信息
- 服务器秘钥交换(Server key Exchange)如果使用的加密算法需要,服务器还会发送一个”Server Key Exchange”消息,包含Diffie-Hellman 参数或其他密钥交换信息。
- 服务器问候完成(Server Hello Done)服务器发送一个”Server Hello Done”消息,表示服务器端的问候阶段完成
- 客户端秘钥交换(Client Key Exchange)客户端会生成一个预主秘钥(Pre-Master Secret),用服务器的公钥加密该预主秘钥,然后发送给服务器
- 会话秘钥生成(Session Key Gengration)客户端和服务器分别使用之前的Client Random,Server Random和预主秘钥生成主秘钥(Master Secret),并从主秘钥中派生出会话秘钥(Session Keys),这些秘钥用于对后续的数据传输进行加密
- 客户端完成(Client Finished)客户端 发送一个 “Finished” 消息,包含所有握手消息的哈希值并用会话密钥加密,表示客户端的握手阶段已完成
- 服务器完成(Server Finished)服务器 接收到 “Client Finished” 消息后,也发送一个 “Finished” 消息,包含所有握手消息的哈希值并用会话密钥加密,表示服务器的握手阶段已完成。
- 加密数据传输(Encrypted Data Transfer)客户端和服务器 使用会话密钥对后续的数据进行加密和解密,确保数据传输的机密性和完整性
8.HTTP/1.1 HTTP/2.0 HTTP/3.0
HTTP/1.1 特点:
持续连接:HTTP/1.1引入了持久连接(Persistent Connections),允许在一个TCP连接上发送多个请求和响应,减少了建立连接的开销。 管道化:支持请求的管道化(Pipelining),允许客户端在等待响应时发送多个请求,但并不广泛使用,因为响应顺序的问题。 缓存控制:引入了更多的缓存控制机制,允许更细粒度的缓存管理。 分块传输编码:支持分块传输编码,允许在不知道内容长度的情况下发送数据。
问题:
请求和响应是按顺序处理的,导致队头阻塞(Head-of-Line Blocking),即一个请求的延迟会影响后续请求的处理。 由于每个请求都需要建立和维护TCP连接,导致连接开销较大。
HTTP/2.0 特点:
二进制分帧:将数据传输从文本格式改为二进制格式,允许更高效的解析和传输。 多路复用:允许在一个连接上并行发送多个请求和响应,解决了HTTP/1.1中的队头阻塞问题。 优先级:支持请求优先级,允许客户端指定哪些请求更为重要,服务器可以根据优先级处理请求。 服务器推送:允许服务器主动推送资源到客户端,减少延迟。
解决的问题:
通过多路复用,HTTP/2解决了HTTP/1.1中的队头阻塞问题,多个请求可以同时进行而不互相影响。 二进制格式提高了数据传输的效率和可靠性。 服务器推送功能减少了客户端获取资源的延迟。
HTTP/3.0 特点:
基于QUIC协议:HTTP/3使用QUIC(Quick UDP Internet Connections)协议作为传输层,而不是传统的TCP。这使得HTTP/3能够在UDP之上实现多路复用和更快的连接建立。 零延迟握手:QUIC支持零延迟握手,能够在之前的连接基础上快速恢复连接,减少延迟。 内置加密:QUIC内置了TLS加密,提供更高的安全性。
解决的问题:
HTTP/3完全消除了TCP的队头阻塞问题,因为QUIC在应用层实现了多路复用。 由于QUIC的设计,连接建立时间显著减少,尤其在移动网络环境下表现更佳。 内置加密简化了安全连接的建立过程,提高了安全性。
总结 HTTP/1.1:引入了持久连接和缓存控制,但存在队头阻塞和连接开销问题。 HTTP/2.0:通过多路复用和二进制分帧解决了队头阻塞问题,提高了效率。 HTTP/3.0:基于QUIC协议,消除了TCP的队头阻塞,减少连接延迟,增强了安全性。

HTTP/1.1
- 持久连接:HTTP/1.0每次请求需要建立一个新的TCP连接,而HTTP/1.1引入了持久连接,允许多个连接和响应复用一个TCP连接,减少了连接的建立和关闭的开销优点:减少了频繁建立和关闭连接的开销,提升了传输效率。
- 管道化:允许客户端在发送第一个请求后,未等待其响应就发送第二个请求,虽然理论上可以提高效率,但在实际中由于中间节点和服务器对管道化支持不佳,头阻塞问题严重,因此并未广泛采用优点:可以提高请求的并发性,减少整体响应时间。缺点:头阻塞问题严重,实际应用中支持不佳。
- 分块传输编码:服务器在响应体未知大小时可以使用分块传输编码,将数据分成若干块进行传输,每个块都有自己的大小标识,接收端根据块大小逐一接受并组装优点:支持大文件和流式数据的传输
- 缓存机制:提供了丰富的缓存控制头部字段,如Cache-Control、ETag、Expires 等,用于控制客户端和代理服务器的缓存行为优点:提高了资源利用率,减少了重复请求
- 性能瓶颈:1).请求/响应头部未经压缩,信息越多延迟越大。2).每次发送相同的头部信息,导致了大量的冗余和浪费。3).服务器按请求顺序响应,头阻塞问题严重。4).无法控制请求的优先级,重要的请求不能优先处理。5).请求只能由客户端发起,服务器只能被动响应。
HTTP/2.0
- 二进制协议:相较于HTTP/1.1的文本协议,HTTP/2.0使用二进制格式传输,解析更高效且减少了协议解析中的错误。优点:提高了数据传输的效率和可靠性
- 多路复用在一个TCP连接上同时发送多个请求和响应,每个请求/响应对应一个流(Stream)通过流标识符区分不同的请求和响应,避免了HTTP/1.1中的头阻塞问题优点:解决了头阻塞问题,提高了连接的效率
- 头部压缩使用HPACK算法对头部进行压缩,显著减少了头部的大小,尤其是对于频繁重复的头部字段,如Cookie优点:减少了头部信息的传输开销,提高了传输速度
- 服务器推送服务器可以在客户端为明确请求时主动推送资源,提高页面加载速度,例如,服务器在响应 HTML 文档时,可以同时推送相关的 CSS、JS 文件。优点:减少了客户端的请求次数,提升了用户体验
- 流优先级客户端可以为每个流设置优先级,告诉服务器哪些资源更重要,应该优先传输,提升关键资源的加载速度优点:提升了关键资源的加载速度
- 性能瓶颈基于 TCP,仍然存在 TCP 层的头阻塞问题。
HTTP/3.0
1.基于 QUIC:
描述:HTTP/3.0 使用基于 UDP 的 QUIC 协议而不是 TCP,QUIC 提供了类似 TCP 的可
靠传输和连接管理,但具备更低的延迟和更好的抗丢包性能。QUIC 的握手结合了传输层和 TLS
的握手过程,使得连接建立速度更快。
优点:避免了 TCP 层的头阻塞问题,提高了连接建立速度和抗丢包性能。
2.内置加密:
描述:默认使用 TLS 1.3 加密,QUIC 协议本身包含加密机制,提供更高的安全性,简化了
配置和部署。
优点:提供了更高的安全性和隐私保护。
3.无头阻塞:
描述:QUIC 的多路复用特性避免了 TCP 中的头阻塞问题,即使某个流的数据丢失,也不会
阻塞其他流的数据传输。
优点:提高了整体数据传输的效率和可靠性。
4.更快的连接建立:
描述:QUIC 通过结合 TLS 和传输层握手,通常只需一次往返时间 (RTT) 就能完成连接建
立,相比 TCP+TLS 通常需要两次往返时间,大幅减少了连接建立时间。
优点:显著减少了连接建立时间,提升了用户体验。
5.改进的错误恢复:
描述:QUIC 协议中,每个数据包都有独立的序列号,丢包时可以仅重传丢失的数据包,不像
TCP 需要重传整个窗口的数据,提高了网络效率。
优点:提高了数据传输的可靠性和效率
底层原理详细解析
1.持久连接和多路复用
1).HTTP/1.1 持久连接: 使用 Connection: keep-alive 头部字段来保持连接,多个请求复用
一个 TCP 连接,减少了频繁建立和关闭连接的开销。
2).HTTP/2.0 多路复用: 基于帧 (Frame) 的概念,每个 HTTP 消息被拆分成多个帧,每个
帧都有流标识 (Stream Identifier),这些帧可以在一个 TCP 连接中并行传输,接收端根据流标识
重新组装。
2.头部压缩
1).HTTP/1.1: 每个请求和响应的头部字段都是完整的文本格式,容易造成冗余,尤其是在多
次请求相同资源时。
2).HTTP/2.0: 使用 HPACK 算法,对头部字段进行动态表 (Dynamic Table) 和静态表
(Static Table) 压缩,大大减少了重复头部字段的传输开销。
3.QUIC 和 TCP 的区别
1)TCP: 基于连接的传输协议,提供可靠的数据传输,但建立连接需要三次握手,且丢包时整
个连接受影响。
2)QUIC: 基于 UDP,但提供类似 TCP 的可靠性和顺序保证,同时结合 TLS 加密,减少连
接建立时间,具备更好的抗丢包性能,适用于高延迟和不稳定的网络环境。
9.DNS解析

DNS(Domain Name System)解析是将域名转换为 IP 地址的过程。DNS 解析的过程可
以分为以下几个步骤:
(1)客户端缓存:
当用户在浏览器中输入域名(例如:www.example.com)时,浏览器首先会检查本地 DNS
缓存,看看是否有对应的 IP 地址。如果有,则直接使用缓存中的 IP 地址,不再进行后续的查询。
(2)操作系统缓存:
如果浏览器缓存中没有找到对应的 IP 地址,操作系统会检查其缓存。
(3)本地 hosts 文件:
如果操作系统缓存也没有找到对应的 IP 地址,操作系统会检查本地的 hosts 文件是否有对应
的条目。
(4)本地 DNS 服务器(递归解析器):如果以上步骤都未能找到对应的 IP 地址,浏览器会将查询请求发送到配置的本地 DNS 服务器
(通常是 ISP 提供的 DNS 服务器或公司内部的 DNS 服务器)。
本地 DNS 服务器会先检查自身的缓存。如果缓存中有对应的 IP 地址,则返回给客户端。
(5)根 DNS 服务器:
如果本地 DNS 服务器的缓存中没有对应的 IP 地址,它会向根 DNS 服务器发出查询请求。根
DNS 服务器会告诉本地 DNS 服务器应该查询的顶级域名服务器(例如,.com、.net 等)。
(6)顶级域名服务器(TLD 服务器):
本地 DNS 服务器接到根 DNS 服务器的响应后,会向相应的顶级域名服务器发出查询请求。顶
级域名服务器会告诉本地 DNS 服务器应该查询的权威 DNS 服务器(例如,负责 example.com 域
的 DNS 服务器)。
(8)权威 DNS 服务器:
本地 DNS 服务器接到顶级域名服务器的响应后,会向权威 DNS 服务器发出查询请求。权威
DNS 服务器会返回最终的 IP 地址给本地 DNS 服务器。
(9)返回结果给客户端:
本地 DNS 服务器接到权威 DNS 服务器的响应后,会将 IP 地址缓存起来,并返回给客户端
(浏览器)。
(10)浏览器建立连接:
浏览器接到本地 DNS 服务器返回的 IP 地址后,会使用该 IP 地址与目标服务器建立连接,发
送 HTTP 请求,获取网页内容。
10.负载均衡
负载均衡(Load Balancing)是一种分布式计算技术,通过将工作负载和请求分配到多个服务
器(或其他计算资源)上,来优化资源使用、提高响应速度、增加系统的可用性和稳定性。负载均
衡器(Load Balancer)是执行这一任务的设备或软件,其主要目标是确保没有单一服务器被过度
使用,从而避免性能瓶颈和系统故障。

11.CDN

CDN(Content Delivery Network,内容分发网络)是一种通过在全球范围内部署多个服务
器节点,帮助用户更快速、更稳定地访问网站内容的技术。CDN 的主要目标是提高内容传输的速
度和可靠性,减小服务器负载,提升用户体验。
CDN 的优势
1)加速内容传输:通过将内容缓存到靠近用户的节点,减少了传输延迟,提高了访问速度。
2)减轻源站负载:大量请求由 CDN 节点处理,减少了源站服务器的压力,提高了网站的稳
定性。3)提高可用性:CDN 节点分布在全球各地,即使某些节点发生故障,其他节点仍可以继续
提供服务,保证网站的高可用性。
4)安全性增强:CDN 可以提供 DDoS 攻击防护、WAF(Web 应用防火墙)等安全功能,
保护源站服务器免受恶意攻击。
5)带宽优化:通过缓存和内容优化,减少了冗余数据传输,节省了带宽资源。
12.WebSocket
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。WebSocket 允许服务器和
客户端之间进行实时、双向的数据传输,特别适用于需要频繁更新数据的应用,如在线聊天、游
戏、股票行情推送等。
WebSocket 的工作原理
1)建立连接:WebSocket 连接从 HTTP 请求开始,客户端发送一个带有特殊头部字段的
HTTP 请求到服务器,表示希望升级到 WebSocket 协议。这个请求被称为“握手”请求。服务
器响应握手请求,确认可以切换协议。握手成功后,HTTP 连接升级为 WebSocket 连接。
2)数据传输:建立连接后,客户端和服务器之间可以通过这个单一的 WebSocket 连接进行
双向通信。WebSocket 使用帧(frame)来传输数据。帧可以包含文本数据或二进制数据,且通
信时无须每次都携带头部信息,减少了传输开销。
3)关闭连接:连接可以由客户端或服务器任意一方主动关闭,通过发送一个关闭帧。另一方
收到关闭帧后,会发送一个关闭帧以确认关闭,

WebSocket 的优势
1)实时通信:WebSocket 支持双向通信,允许服务器和客户端实时互相发送数据,减少了
延迟,提高了实时性。
2)降低开销:一旦建立连接,后续数据传输不需要重复传输头部信息,降低了带宽开销和处
理开销。
3)保持连接状态:WebSocket 连接是持久的,适用于需要持续数据更新的应用场景。
13.FTP、SMTP、IMAP 和 POP3 的基本原理和应用场景?
(1)FTP(File Transfer Protocol)
1)基本原理: FTP 是一种用于在客户端和服务器之间传输文件的协议。FTP 使用两个不同
的连接:控制连接和数据连接。控制连接用于发送命令和接收响应,数据连接用于实际的数据传
输。FTP 支持两种模式:主动模式(Active Mode)和被动模式(Passive Mode)。
2)主动模式:客户端向服务器发送 PORT 命令,告诉服务器用于数据传输的端口,服务器使
用这个端口连接客户端。
3)被动模式:客户端向服务器发送 PASV 命令,服务器打开一个随机端口并通知客户端,客
户端连接这个端口进行数据传输。
(2)SMTP(Simple Mail Transfer Protocol)
基本原理: SMTP 是一种用于在电子邮件服务器之间传输电子邮件的协议。SMTP 工作在
TCP 的 25 端口,通过简单的文本命令和响应进行通信。电子邮件客户端使用 SMTP 将邮件发送
到邮件服务器,邮件服务器之间也使用 SMTP 传输邮件。
邮件发送流程:
1)客户端连接到 SMTP 服务器。
2)客户端通过 EHLO 或 HELO 命令向服务器问候。
3)客户端通过 MAIL FROM 命令指定发件人地址。
4)客户端通过 RCPT TO 命令指定收件人地址。
5)客户端通过 DATA 命令发送邮件内容。
6)客户端通过 QUIT 命令结束会话。
(3)IMAP(Internet Message Access Protocol)
基本原理: IMAP 是一种用于从邮件服务器读取电子邮件的协议。IMAP 允许用户在多个设
备上查看和管理他们的电子邮件,因为邮件存储在服务器上,并且客户端只需同步邮件的状态和内
容。IMAP 工作在 TCP 的 143 端口(IMAP4)或 993 端口(IMAPS,使用 SSL/TLS)。
邮件读取流程:
1)客户端连接到 IMAP 服务器。
2)客户端通过 LOGIN 命令进行身份验证。
3)客户端通过 SELECT 命令选择邮箱。
4)客户端通过 FETCH 命令获取邮件。
5)客户端通过 STORE 命令修改邮件状态(如标记已读)。
6)客户端通过 LOGOUT 命令结束会话。(4)POP3(Post Office Protocol 3)
基本原理:**POP3 是一种用于从邮件服务器下载电子邮件的协议。**与 IMAP 不同,POP3 通
常会将邮件从服务器下载到本地设备,并从服务器上删除。POP3 工作在 TCP 的 110 端口或
995 端口(POPS,使用 SSL/TLS)。
邮件读取流程:
1)客户端连接到 POP3 服务器。
2)客户端通过 USER 和 PASS 命令进行身份验证。
3)客户端通过 LIST 命令列出邮件。
4)客户端通过 RETR 命令下载邮件。
5)客户端通过 DELE 命令删除邮件。
6)客户端通过 QUIT 命令结束会话

14.零拷贝技术
零拷贝(Zero-Copy)技术是一种减少或消除数据在内存中拷贝次数的方法,以提高数据传输
效率。其主要目标是在网络传输、文件操作等场景中,减少 CPU 负载和内存带宽的使用。
(1)零拷贝的实现方式
1)sendfile:
描述:将数据从一个文件直接发送到网络接口,而不需要经过用户空间。
应用:用于文件服务器、HTTP 服务器等需要高效传输大文件的场景。
2)mmap + write:
描述:使用 mmap 将文件映射到进程的虚拟地址空间,然后通过 write 将数据发送到网络
接口。
应用:适用于需要频繁读取和写入文件的场景。
3)splice:
描述:将数据在两个文件描述符之间直接移动,而不需要经过用户空间。
应用:用于高效的数据管道操作,如网络通信、日志记录等。
(2)零拷贝的优点
1)减少 CPU 负载:通过减少数据拷贝次数,降低了 CPU 的负载,提高了系统的整体性
能。
2)提高传输速度:由于减少了数据在内存中的移动,提高了数据传输的速度。
3)降低内存带宽使用:减少了内存带宽的使用,避免了不必要的数据传输,提高了内存的利
用率。