TCP三次握手、四次挥手及UDP详解

本文详细解读了UDP和TCP的概念、应用场景,重点解析了三次握手和四次挥手的过程及背后原理,同时探讨了TCP的可靠性以及如何通过应用层实现UDP的可靠传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


UDP

概念

用户数据协议 UDP(User Datagram Protocol),提供无连接的数据传输服务。

应用场景

即时通信,比如: 语音、视频 、直播等

TCP

概念

传输控制协议 TCP(Transmission Control Protocol),提供面向连接的,可靠的数据传输服务。

应用场景

文件传输、发送和接收邮件、远程登录等

三次握手

过程

三次握手

为什么要进行“三次”握手?

因为两次握手只能保证单向连接是畅通的。只有经过第三次握手,才能确保双向都可以接收到对方的发送的数据。

第二次传回了 ACK,为什么还要传回 SYN?

服务端传回 ACK 是为了告诉客户端,接收到的信息确实就是客户端所发送的信号,这表明从客户端到服务端的通信是正常的,而回传 SYN 则是为了建立并确认从服务端到客户端的通信。

四次挥手

过程

四次挥手

为什么要进行“四次”挥手?

因为要确保服务端和客户端都停止发送数据。

为什么最后一次需等待2MSL(TIME_WAIT)?

MSL:最大分段寿命,表示一个 TCP 分段可以存在于互联网系统中的最大时间。

1、保证客户端发的报文到达服务端且若失败可重发。
2、确保所有旧数据消失,新的连接中不会存在旧的请求。

为什么会出现大量 CLOSE_WAIT 的现象?

在对方已经发送 FIN 后,由于服务器自己及时没有发送 ACK 确认,程序无法检测关闭,此时一直保持连接状态无法关闭,因此出现 close_wait 。
解决:检测出对方已经关闭的 socket 并关闭。
1、代码需要判断 socket,一旦读到 0,就断开连接,read返回负,检查一下error,如果不是AGAIN,就断开连接。
2、给每个 socket 添加一个时间戳,定期检查所有时间戳,如果时间戳与当前时间的差值超过一定阈值,即关闭此连接。


TCP 和 UDP 的区别

协议是否可靠是否面向连接传输效率传输形式通信首部字节
TCP字节流一对一20字节
UDP报文各种形式8字节

为什么 TCP 是面向连接的?

因为 TCP 在数据传输之前会先建立连接,即三次握手。

为什么 TCP 是可靠的?

1、校验和: TCP 的检验和是为了检测数据在传输过程中的任何变化。如果检验和有差错,TCP 将丢弃这个报文段。
2、TCP 的接收端会丢弃重复数据
3、流量控制: TCP 的接收端只允许发送端发送缓冲区能接纳的数据,防止丢包。(TCP 利用滑动窗口实现流量控制)
4、拥塞控制: 当网络拥塞时,减少数据的发送。
5、ARQ(自动重发请求)协议: 每发完一个分组就停止发送,等待对方确认,在收到确认后再发下一个分组。
6、超时重传: 当 TCP 发出一个段后,它会启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

如何使 UDP 做到可靠传输?

应用层模仿传输层 TCP 的可靠传输性。
1、添加 seq/ack 机制,确保数据发送到端。
2、添加发送和接收缓冲区。
3、添加超时重传机制。

参考文章:https://blog.youkuaiyun.com/meism5/article/details/90414236

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值