TCP三次握手四次挥手

三次握手:

第一次握手:建立连接时,客户端发送syn(同步序列编号)包到服务器,并进入SYN_SENT状态,等待服务器确认
第二次握手:服务器收到syn包,先确认用户的syn,同时自己发送syn包(syn+ack)给客户端,进入SYN_RECV状态
第三次握手:客户端收到服务器的syn+ack包,想服务器发送确认包ack,发送完毕进入ESTABLISHED(连接成功)状态。

问:为什么不能两次握手?
答:三次握手双方都做好并且知晓对方都做好发送数据的准备工作。
若只用两次:可能发生死锁。如:C向S发送请求,S收到后向C发送应答。两次握手的话此时已经建立连接。但若第二次应答丢失了,C不知道S是否准备好,此时C认为连接未建立成功,C会一直等待S的应答分组。而S认为成功开始发数据,C一直不处理、S就一直发,形成死锁。

四次挥手:

第一次:客户端发出连接释放报文并且停止发送数据。(客户端发FIN)
第二次:服务器收到连接释放报文后,发出确认报文。此时TCP通知高层应用进程,处于半关闭状态,此时客户端没有数据发送,但服务器发送客户端仍要接受。(服务端发ACK)
第三次:服务器发送完最后数据后,向客户端发送连接释放报文并等待客户端确认(服务端发FIN)
第四次:客户端接收到服务器的连接释放报文后,必须发出确认。此后客户端进入TIME-WAIT(时间等待状态),此时TCP连接还没有释放。(客户端发ACK)

问:四次挥手?
答:四次挥手原因主要是中间两次将fin释放报文和ack确认信号分开发送,因为当服务器收到FIN报文,可能不会立即关闭SOCKET(数据未发送完),只能先发ACK进行确认,让客户端瓣关闭;当服务器内容发送完毕后,再发送FIN进行连接关闭。

问:TIME_WAIT状态?
答:该状态是为了防止最后一个ACK丢失,备用发送最后一个ACK的一段时间。

问:TIME_WAIT时间为什么2MSL?
答:MSL是TCP报文最大生命周期,当TIME_WAIT持续2MSL后,可以保证两个传输方向上尚未接收的报文消失,否则当服务器重启,会收到上一次未处理的数据。同时在理论上保证最后一个报文可靠到达,假设最后一个ACK丢失,服务器再发送一个FIN,客户端进程虽然不在,但TCP连接还在,还可以发送ACK。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔幻音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值