后端面试-计算机网络
传输层
TCP
TCP 连接是一种在网络中传输数据时使用的协议,全称为传输控制协议(Transmission Control Protocol)。TCP为每数据流初始化并维护的某些状态信息(socket、序列号和窗口大小)。特点:
- 面向连接:在数据传输前,必须先建立一个连接,这个连接是全双工的。
- 可靠性:使用序列号和 ACK 机制确保可靠传输
- 面向字节流
- 流量控制和拥塞控制
TCP 通过提供可靠传输、流量控制、拥塞控制和连接管理,解决了数据在不可靠的 IP 网络上的传输问题:
- 可靠性传输:TCP 确保数据包在网络传输过程中不丢失、不重复,并且按顺序到达。通过 ACK、重传机制以及序列号,TCP 能够保证数据在不可靠的 IP 网络上可靠传输。
- 流量控制:TCP 通过滑动窗口机制调节发送方的数据发送速率,防止接收方因为处理能力有限而被数据流淹没。
- 拥塞控制:TCP 通过拥塞避免算法(慢启动、拥塞避免、快速重传和快速恢复)来防止网络过载。
- 连接管理:采用三次握手和四次挥手机制来管理会话。
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 不需要建立连接,也不保证数据传输的可靠性。它提供了一种简单、快速的方式来在网络中传输数据。特点:
- 无连接:UDP 在发送数据之前不需要建立连接,每个数据包都是独立的。
- 不保证可靠性:数据可能会丢失、重复或者乱序
- 传输速度快
与 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 连接。