TCP和UDP
TCP和UDP
TCP(传输控制协议)
1. 特点
• 面向连接 :通信前需要建立连接,通信后需要释放连接。
• 可靠传输 :通过确认机制、重传机制、流量控制和拥塞控制确保数据可靠传输。
• 有序传输 :数据按发送顺序到达接收方。
• 面向字节流 :将数据视为无结构的字节流,不保留消息边界。
• 适用场景 :对可靠性要求高的应用,如 HTTP、FTP、SMTP 等。
2. TCP 三次握手(建立连接)
三次握手用于确保客户端和服务器双方都准备好通信。
过程:
第一次握手 (SYN=1, seq=x)
• 客户端向服务器发送 SYN 报文,请求建立连接,并随机生成一个初始序列号
x
。• 客户端进入
SYN_SENT
状态。第二次握手 (SYN=1, ACK=1, seq=y, ack=x+1)
• 服务器收到 SYN 报文后,向客户端发送 SYN+ACK 报文,确认客户端的请求,并随机生成一个初始序列号
y
。• 服务器进入
SYN_RCVD
状态。第三次握手 (ACK=1, seq=x+1, ack=y+1)
• 客户端收到 SYN+ACK 报文后,向服务器发送 ACK 报文,确认服务器的响应。
• 双方进入
ESTABLISHED
状态,连接建立完成。
图示:
Client Server
| |
| SYN, seq=x |
| -----------------------------> |
| |
| SYN+ACK, seq=y, ack=x+1 |
| <----------------------------- |
| |
| ACK, seq=x+1, ack=y+1 |
| -----------------------------> |
| |
3. TCP 四次挥手(释放连接)
四次挥手用于确保双方都同意关闭连接。
过程:
第一次挥手 (FIN=1, seq=u)
• 客户端向服务器发送 FIN 报文,请求关闭连接。
• 客户端进入
FIN_WAIT_1
状态。第二次挥手 (ACK=1, seq=v, ack=u+1)
• 服务器收到 FIN 报文后,向客户端发送 ACK 报文,确认客户端的关闭请求。
• 服务器进入
CLOSE_WAIT
状态,客户端进入FIN_WAIT_2
状态。第三次挥手 (FIN=1, seq=w, ack=u+1)
• 服务器向客户端发送 FIN 报文,请求关闭连接。
• 服务器进入
LAST_ACK
状态。第四次挥手 (ACK=1, seq=u+1, ack=w+1)
• 客户端收到 FIN 报文后,向服务器发送 ACK 报文,确认服务器的关闭请求。
• 客户端进入
TIME_WAIT
状态,等待 2MSL(最大报文段生存时间)后关闭连接。• 服务器收到 ACK 报文后,立即关闭连接。
图示:
Client Server
| |
| FIN, seq=u |
| -----------------------------> |
| |
| ACK, seq=v, ack=u+1 |
| <----------------------------- |
| |
| FIN, seq=w, ack=u+1 |
| <----------------------------- |
| |
| ACK, seq=u+1, ack=w+1 |
| -----------------------------> |
| |
4. TCP 的优缺点
• 优点 :可靠、有序、支持流量控制和拥塞控制。
• 缺点 :建立和释放连接开销大,传输效率较低。
UDP(用户数据报协议)
1. 特点
• 无连接 :通信前无需建立连接,直接发送数据。
• 不可靠传输 :不保证数据可靠到达,不提供确认、重传、排序机制。
• 面向报文 :保留消息边界,每次发送一个完整的报文。
• 高效传输 :开销小,传输速度快。
• 适用场景 :对实时性要求高、允许少量数据丢失的应用,如视频流、语音通话、DNS 等。
2. UDP 的优缺点
• 优点 :传输效率高,延迟低,适合实时应用。
• 缺点 :不可靠,不保证数据顺序和完整性。
TCP 和 UDP 的对比
特性 | TCP | UDP |
---|---|---|
连接方式 | 面向连接 | 无连接 |
可靠性 | 可靠传输 | 不可靠传输 |
传输效率 | 较低 | 较高 |
数据顺序 | 保证顺序 | 不保证顺序 |
报文边界 | 面向字节流 | 面向报文 |
适用场景 | HTTP、FTP、SMTP 等 | 视频流、语音通话、DNS 等 |
总结
• TCP :适合对可靠性要求高的应用,如文件传输、网页浏览等。
• UDP :适合对实时性要求高的应用,如视频流、在线游戏等。