后端面试-计算机网络

传输层

TCP

TCP 连接是一种在网络中传输数据时使用的协议,全称为传输控制协议(Transmission Control Protocol)。TCP为每数据流初始化并维护的某些状态信息(socket、序列号和窗口大小)。特点:

  1. 面向连接:在数据传输前,必须先建立一个连接,这个连接是全双工的。
  2. 可靠性:使用序列号和 ACK 机制确保可靠传输
  3. 面向字节流
  4. 流量控制和拥塞控制

TCP 通过提供可靠传输、流量控制、拥塞控制和连接管理,解决了数据在不可靠的 IP 网络上的传输问题:

  1. 可靠性传输:TCP 确保数据包在网络传输过程中不丢失、不重复,并且按顺序到达。通过 ACK、重传机制以及序列号,TCP 能够保证数据在不可靠的 IP 网络上可靠传输。
  2. 流量控制:TCP 通过滑动窗口机制调节发送方的数据发送速率,防止接收方因为处理能力有限而被数据流淹没。
  3. 拥塞控制:TCP 通过拥塞避免算法(慢启动、拥塞避免、快速重传和快速恢复)来防止网络过载。
  4. 连接管理:采用三次握手和四次挥手机制来管理会话。

TCP 报文头部:

+----------------------------+-------------------------------+
| Source Port | Destination Port |
| (2 Bytes) | (2 Bytes) |
+----------------------------+-------------------------------+
| Sequence Number | Acknowledgment Num |
| (4 Bytes) | (4 Bytes) |
+--------------+-------------+---------------+---------------+
| Data Offset | Reserved | Control Flags | Window Size |
| (1 Byte) | (1 Byte) | (1 Byte) | (2 Bytes) |
+--------------+-------------+---------------+---------------+
| Checksum | Urgent Pointer |
| (2 Bytes) | (2 Bytes) |
+----------------------------+-------------------------------+
| Options / Padding (Variable) |
+------------------------------------------------------------+

应用程序:

  • HTTP(Hypertext Transfer Protocol):超文本传输协议
  • HTTPS(Hypertext Transfer Protocol Secure):基于 HTTP 和 TLS/SSL 的安全版本
  • FTP(File Transfer Protocol):文件传输协议,允许不同计算机之间上传和下载
  • SMTP(Simple Mail Transfer Protocol):简单邮件传输协议,用于电子邮件的传输
  • POP3(Post Office Protocol Version3):接受电子邮件的协议
  • IMAP(Internet Message Access Protocol):另一种用于接受电子邮件的协议
  • Telnet:远程登录
  • SSH(Secure Shell)
  • DNS(Domain Name System):用于解析域名和 IP 地址的协议,是互联网基础设置的重要组成部分
  • RTSP(Real-Time Streaming Protocol):用于控制实时数据流的协议

三次握手

客户端首先发送一个 SYN(同步序列编号)消息给服务器,服务器收到后回复一个 SYN-ACK(同步序列编号-确认),最后客户端再发送一个 ACK(确认)消息确认服务器已经收到 SYN-ACK 消息,从而完成三次握手,建立一个可靠的 TCP 连接。

RFC 793 明确指出了使用三次握手的首要原因是:为了阻止历史的重复连接初始化导致的混乱。

  • 帮助通信双方同步初始化序列号。

四次挥手

用于安全关闭一个已建立的连接的过程,确保双方都能完成数据传输并安全的释放连接。

步骤:

  • 次挥手(FIN \(\rightarrow\) ACK):客户端主动关闭连接,发送 FIN 包,进入 FIN_WAIT_1 状态。服务端接收到 FIN 后表示不再接收数据,但仍然可能发送数据。
  • 次挥手(ACK):服务端发送 ACK 包,确认已经收到 FIN。此时服务器进入 CLOSE_WAIT 状态,客户端进入 FIN_WAIT_2 状态。
  • 次挥手(FIN \(\rightarrow\) ACK):服务端完成所有数据传输后,发送 FIN 包,进入 LAST_ACK 状态,客户端收到 FIN 后,准备关闭连接。
  • 次挥手(ACK):客户端发送最后一个 ACK 包,进入 TIME_WAIT 状态,等待可能迟到的 FIN 包。服务端收到 ACK 后关闭连接,进入 CLOSED 状态,客户端在 TIME_WAIT 计时结束后(2MSL),正式关闭连接。

UDP

UDP 用户数据报协议,User Datagram Protocol) 是一种通信协议,属于传输层协议,通常用于需要低延迟和快速传输的应用场景。UDP 是一种无连接的协议,与 TCP(传输控制协议)不同,UDP 不需要建立连接,也不保证数据传输的可靠性。它提供了一种简单、快速的方式来在网络中传输数据。特点:

  1. 无连接:UDP 在发送数据之前不需要建立连接,每个数据包都是独立的。
  2. 不保证可靠性:数据可能会丢失、重复或者乱序
  3. 传输速度快

与 TCP 对比:

类型 是否面向连接 传输可靠性 传输形式 传输效率 所需资源 场景 首部字节
TCP 可靠 字节流 文件传输、邮件传输 20~60
UDP 不可靠 数据报文段 即时通讯 8

Socket:在 TCP/IP 协议中,Socket 是通信的端点。由 IP 地址和端口号组成,如 192.168.0.1:8080

序列号:序列号保证了数据传输的有序性和完整性。在三次握手中,通信双方交换序列号,并在此基础上为后续每个数据段分配序列号。

三元组:由 IP 和端口号的组合,即 IP + 端口号 + 协议类型,比如 192.168.0.1:8080 (TCP) 就是一个三元组。

四元组源 IP 地址 + 源端口号 + 目的 IP 地址 + 目的端口号,这四个要素唯一标识了一个 TCP 连接。

应用层