两道计算机网络面试题 4.14
TLS四次握手的过程
第一次握手
首先,客户端向服务端发送加密通信请求,这个请求主要包含三个部分:
- 客户端支持的 TLS 协议版本
- 客户端生成的一个随机数,这个随机数将会参与生成 “会话密钥”
- 客户端支持的密码套件列表,如 RSA 加密算法
第二次握手
服务器收到客户端请求后,向客户端发出响应,主要包含四个部分:
- 确认 TLS 协议版本,如果浏览器不支持,则关闭加密通信
- 服务端生成的一个随机数,这个随机数将会参与生成 “会话密钥”
- 服务端支持的密码套件列表,如 RSA 加密算法
- 服务器的数字证书
第三次握手
客户端收到服务器的回应之后,首先通过浏览器或者操作系统中的 CA 公钥,确认服务器的数字证书的真实性。
如果证书没有问题,客户端会从数字证书中取出服务器的公钥,然后使用它加密报文,向服务器发送如下信息:
- 一个随机数(第三个随机数),这个随机数将会参与生成 “会话密钥”,且该随机数会被服务器公钥加密
- 将加密通信算法改变的通知,告诉服务端随后的信息都将用会话秘钥加密通信
- 客户端握手结束通知,表示客户端的握手阶段已经结束,同时把之前所有内容的发送的数据做个摘要,用来供服务端校验
在第三次握手后,通信双方确定了加密算法和三个随机数,因此可以分别生成同样的会话密钥
第四次握手
服务端将第三个随机数用服务器私钥解密,并计算出会话密钥后,向客户端发送以下信息:
- 将加密通信算法改变的通知,告诉客户端随后的信息都将用会话秘钥加密通信
- 服务端握手结束通知,表示服务端的握手阶段已经结束,同时把之前所有内容的发送的数据做个摘要,用来供客户端校验
接下来双方就可以用会话密钥来加密通信啦!
HTTP和RPC的区别
- HTTP是协议,而RPC不是协议,而是一种调用方式,其具体实现,比如gRPC等,才是实现了RPC调用的协议。PRC存在的目的是希望程序员能像调用本地方法那样来调用远端的服务方法。
- RPC 有很多种实现方式,不一定非得基于 TCP 协议。
- 从发展历史来说,HTTP 主要用于 B/S 架构,而 RPC 更多用于 C/S 架构。但现在其实已经没分那么清了,B/S 和 C/S 在慢慢融合。很多软件同时支持多端,所以对外一般用 HTTP 协议,而内部集群的微服务之间则采用 RPC 进行通讯。
- RPC 出现更早,且比目前主流的 HTTP/1.1 性能要更好,所以大部分公司内部都还在使用 RPC。但是HTTP/2.0在 HTTP/1.1的基础上做了优化,性能可能比很多 RPC 协议都要好,但由于是这几年才出来的,所以也不太可能取代掉 RPC。
两道计算机网络面试题 4.14
https://jlqusername.github.io/2025/04/14/两道计算机网络面试题 4.14/