TCP三次握手与四次挥手

TCP三次握手和四次挥手是可靠传输的保证。

三次握手和四次挥手的过程:

TCP有限状态机:

三次握手

建立连接有三步:
1.Client发送SYN至Server
2.Server收到SYN之后,对此SYN进行回应:发送包含ACK和SYN的数据包至Client。
3.Client也对此SYN进行回应,发送ACK至Server。

四次挥手

释放连接有四步:
1.客户端发送FIN至Server。
2.Server对此FIN进行回应:发送ACK给Client。
3.Server也请求关闭连接,发送FIN给Client。(这时FIN和ACK分开,而三次握手中SYN和ACK为同一个包)
4.Client对FIN进行回应:发送ACK至Server。

seq和ack设置原则

起初seq为随机值。之后发送的seq为上一个发送的数据包seq值+1
ack对上一个收到的数据包进行回应,为上一个收到的数据包seq值+1。
若连续发送多个包,则ack不变,依然为上一个收到的数据包seq值+1。seq每一次都自增。

小贴士

注意观察Client和Server的状态变化。

问答环节

为什么会有TIME_WAIT这种状态?为什么要等待两倍报文段寿命后才Close?

参考文档:https://zhuanlan.zhihu.com/p/40013724
主要是为了解决最后FIN的ACK没有收到的情况(比如网络拥塞)。
来看看后果:如果过早的变成Close,但是对方还没有收到ACK,就一直处在LAST_ACK状态。这个时候如果再建立一个连接,发送SYN,对方觉得这是异常,收到的应该是ACK。这时候就会发送RST,连接失败。
来看看作用:超时后,"被动关闭方"如果超时没有收到FIN的ACK,就会重发一遍FIN,收到ACK后连接正常关闭。注意这时候有一方还是会处于TIME_WAIT状态,等待超时。
所以并不是所有的超时都是一场,TIME_WAIT超时后大概率说明对方收到了ACK,连接已经正常关闭了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值