计算机网络相关
# TCP的三次握手与四次挥手
# 三次握手
# 
- 客户端发送链接请求携带
SYN
询问是否能够建立连接 - 服务端收到后发送
SYN
包和ACK
包确认连接。 - 客户端收到服务端的确认连接后,发送
ACK
包到服务端,连接建立
# 三次握手而不是两次握手的原因
客户端发送一次SYN1
包给服务端,因为网络原因没有发送到服务端。这时客户端再次发送一个SYN
包给予服务端,服务端收到后返回ACK
包。
如果此时第一次发送的SYN1
包网络突然回复发送到了服务端,此时如果是两次握手就建立连接的情况下,会多建立一个网络连接。所以采用三次握手,就是为了解决网络信道连接不可靠的问题。
# 如何保证可靠连接
- 每个连接都有一个发送缓冲区
- 发送时从发送时从发送缓冲区取一部分报文,加上序列号和长度。
- 回复确认需要携带的
ACK
包需要通过序列号的长度确认:ACK = 序列号 + 长度 = 下一包起始序列号
- 接收端可以根据序列号的长度重组数据,如果此时发生丢包,接收端还可以根据序列号,要求发送端再次发送该数据包到接收端。
# TCP的四次挥手
- 第一次握手:客户端发起
FIN
包表示关闭连接 - 第二次挥手:服务端发送
ACK
包到客户端进入关闭等待状态 - 第三次挥手:服务端发送
FIN
包到客户端进入发送等待 - 第四次挥手:客户端接收后发送
ACK
包到服务端,客户端进入超时等待状态,超时后关闭连接。服务端立即关闭连接
此时客户端有一个超时等待状态,是因为如果当ACK
包发送因为网络原因如果未被服务端接收到时,服务端再次尝试发送FIN
包请求关闭客户端仍可以收到请求,进入正常关闭流程。
# TCP与UDP的差异与使用场景
- TCP:稳定可靠,但是比较消耗资源。
- 📁 文件发送
- ✉️ 邮件发送
- 🌐 浏览网页等场景
- UDP:无状态,速度快但是不可靠的网络传输。适用于对信息实时要求较高的场景。
- 🔗 域名查询
- 📴 语音通话
- 📺 视频直播等
编辑 (opens new window)
上次更新: 2022/02/21, 05:57:00