计网面试题 | 青训营

44 阅读3分钟

TCP和UDP的区别

UDP 不提供复杂的控制机制,利用 IP 提供面向「无连接」的通信服务。

UDP 协议真的非常简,头部只有 8 个字节(64 位),UDP 的头部格式如下:

UDP 头部格式

  • 目标和源端口:主要是告诉 UDP 协议应该把报文发给哪个进程。
  • 包长度:该字段保存了 UDP 首部的长度跟数据的长度之和。
  • 校验和:校验和是为了提供可靠的 UDP 首部和数据而设计,防止收到在网络传输中受损的 UDP 包。

TCP 和 UDP 区别:

1. 连接

  • TCP 是面向连接的传输层协议,传输数据前先要建立连接。
  • UDP 是不需要连接,即刻传输数据。

2. 服务对象

  • TCP 是一对一的两点服务,即一条连接只有两个端点。
  • UDP 支持一对一、一对多、多对多的交互通信

3. 可靠性

  • TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按序到达。
  • UDP 是尽最大努力交付,不保证可靠交付数据。但是我们可以基于 UDP 传输协议实现一个可靠的传输协议,比如 QUIC 协议

4. 拥塞控制、流量控制

  • TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
  • UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。

5. 首部开销

  • TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是 20 个字节,如果使用了「选项」字段则会变长的。
  • UDP 首部只有 8 个字节,并且是固定不变的,开销较小。

6. 传输方式

  • TCP 是流式传输,没有边界,但保证顺序和可靠。
  • UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序。

7. 分片不同

  • TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装 TCP 数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
  • UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,目标主机收到后,在 IP 层组装完数据,接着再传给传输层。

Https的握手过程

第一步:客户端会发起一个hello client请求,请求中会携带TLS版本信息、加密套件候选列表、压缩算法候选列表以及一个随机数。

第二步:服务端收到请求以后也会给客户端发一个server hello请求,请求中会告诉客户端它选择的协议版本、加密套件、压缩算法以及一个随机数。

第三步:服务端会给客户端发一个server certificate请求,里面包含服务端的数字证书,用于客户端进行校验。

第四步:服务端会给客户端发一个server hello done告诉客户端信息已发送完毕。

第五步:客户端收到证书以后进行校验获取到服务端的公钥。

第六步:客户端会将自己的数字证书发给服务端用于校验。

第七步:客户端计算出一个随机数pre-master,然后用公钥进行加密发送给服务器端。

第八步:服务端和客户端都根据自己的随机数+对端的随机数+pre-master算出对称密钥,然后再根据对称密钥进行通信