三次握手与四次挥手

简介

传输层在前面的博文中已经详细的介绍了,以漫画 + 画图的方式,因此这里不在赘述。但是相关的细节叙述的不是太好,因此主针对TCP的三次握手和四次挥手再次进行叙述。联系上socket套接字编程进行说明。?传输层漫画版
三次握手
1、图示

拿上一次博文的图继续说在这里插入图片描述注意红色框内的接口。
2、补充

由于上一篇博文叙述的顺序,所以并没有说,如果ACK丢失或者SYN丢失会怎么样。所以现在进行补充。
①第一次握手失败,即SYN丢失,客户端接重传。
②第二次握手失败,即服务端发送的ACK丢失,也就意味着服务端的SYN也丢失了,客户端和服务端都会重新发送SYN
③第三次握手失败,即客户端给服务器的ACK丢失,这个时候, 如果此时ACK在网络中丢失,那么Server端该TCP连接的状态为SYN_RECV,并且依次等待3秒、6秒、12秒后重新发送SYN+ACK包,以便Client重新发送ACK包。如果重发指定次数后,仍然未收到ACK应答,那么一段时间后,Server自动关闭这个连接。 但是Client认为这个连接已经建立,如果Client端向Server写数据,Server端将以RST包(用于强制关闭tcp连接)响应,方能感知到Server的错误。
3、三次握手的原因

这个问题其实同为什么不是两次,为什么不是四次等回答是相似的。TCP是全双工通信,3次握手完成两个重要的功能,既要双方都能够通信,也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。如果只是两次握手,只能确定单向是可以通信的,这样当客户端发起请求,服务端响应,服务端创建新的套接字开始与客户端通信,但是如果这是一个无效的连接请求,如网络滞留的一个请求,这样会造成服务器的资源浪费。
不需要四次,是因为前四次就可以确定双方可以通信,由于ACK只是一个比特位,因此可以让回复一端发送SYN时带上ACK,这样提高了连接效率
四次挥手
1、图示

在这里插入图片描述
2、TIME_WAIT

这个状态是非常重要的状态,在这个状态是属于主动关闭方的,在第三次挥手完毕后,主动关闭方会自动等待2MSL,这样等待的意义则是:

1、保证最后一次握手报文能到被动关闭方,到不了还能能进行超时重传。
2、2MSL后,这次连接的所有报文都会消失,不会影响下一次连接。
3、如果重传的FIN包或者ACK丢失,也不影响,最后会直接关闭当前连接。
3、FIN包和ACK

第二次挥手和第三次挥手之所以不能同时,是因为如果被动关闭方还有数据没有发送完,它会先回复一个ACK,等数据发送完后再发送FIN。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值