计算机网络----三次握⼿和四次挥⼿

三次握手在这里插入图片描述
第一次握手:客户端–发送带有 SYN 标志的数据包–服务端
第二次握手:服务端–发送带有 SYN/ACK 标志的数据包–客户端
第三次握手:客户端–发送带有带有 ACK 标志的数据包–服务端
为什么要三次握⼿
三次握⼿的⽬的就是双⽅确认⾃⼰与对⽅的发送与接收是正常的。
第⼀次握⼿:Client 什么都不能确认;Server 确认了对⽅发送正常,⾃⼰接收正常
第⼆次握⼿:Client 确认了:⾃⼰发送、接收正常,对⽅发送、接收正常;Server 确认了:对⽅发送正常,⾃⼰接收正常
第三次握⼿:Client 确认了:⾃⼰发送、接收正常,对⽅发送、接收正常;Server 确认了:⾃⼰发送、接收正常,对⽅发送、接收正常
所以三次握⼿就能确认双发收发功能都正常,缺⼀不可。
四次挥手
在这里插入图片描述
简要概述
第⼀次挥手:客户端-发送⼀个 FIN,⽤来关闭客户端到服务器的数据传送
第二次挥手:服务器-收到这个 FIN,它发回⼀ 个 ACK,确认序号为收到的序号加1 。和 SYN ⼀样,⼀个
FIN 将占⽤⼀个序号
第三次挥手:服务器-关闭与客户端的连接,发送⼀个FIN给客户端
第四次挥手:客户端-发回 ACK 报⽂确认,并将确认序号设置为收到序号加1

为什么要四次挥⼿
任何⼀⽅都可以在数据传送结束后发出连接释放的通知,待对⽅确认后进⼊半关闭状态。当另⼀
⽅也没有数据再发送的时候,则发出连接释放通知,对⽅确认后就完全关闭了TCP连接。

详细解析
①第一次:最开始客户端和服务器都是连接建立的状态(establish)
客户端向服务器发送FIN,客户端进入FIN_WAIT_1状态

②第二次:服务器回ACK,服务器进入CLOSE_WAIT状态;
客户端收到ACK后,进入FIN_WAIT_2状态
③第三次:服务器发送FIN,进入LAST_ACK状态(等待对方的ACK报文,当收到ACK后,进入到CLOSED状态);

④第四次:客户端收到FIN报文段后,发送ACK,进入TIME_WAIT状态;服务器收到ACK,进入close状态,服务器关闭连接;
此时,客户端等待2MSL,为了防止服务器没收到ACK,则服务器超时重传FIN请求,经过2MSL后进入close状态,客户端才可以关闭连接。

为什么要有TIME_WAIT这个状态?

主要有两个原因:
1.可靠的关闭TCP连接:
在客户端发送的ACK可能丢失,这时服务器会重发FIN, 如果客户端处于 CLOSED 状态 ,则会响应RST而不是ACK。所以客户端要处于 TIME_WAIT 状态,而不能是 CLOSED 。
2.防止重传的FIN包影响新连接

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值