TCP三次握手四次挥手


一.连接建立

A(客户)---------------------B(服务器)


1.A发送连接建立请求,包含:同步位 SYN=1,初始序列号seq=1,此时A进入AYN-SENT(同步已发送)状态。


2.B收到连接请求报文后,同意则发送确认报文,包含:SYN,ACK置1,确认号ack=x+1,B的序列号seq=y,此时B进入

SYN-RCVD(同步收到)状态。


3.A收到B的确认后,还要向B给出确认,包含:ACK=1,确认号ack=y+1,A的序列号:seq=x+1,A进入

ESTABLISHED(连接建立)状态,B收到确认后也进入ESTABLISHED(连接建立)状态。


问题:为什么A还要多发送一次确认,而不是两次握手呢?

答:防止已经失效的连接请求报文突然又传送到了B,产生错误。

例子:A发送连接请求,但是因为连接请求报文丢失未收到确认,A再次重传连接请求,A一共发送了2次连接请求,假设A在第二次请求后,建立连接然后释放。

而此时第1次消失的连接请求并非丢失,而是在某个网络节点滞留,到达B后,B误认为是A的连接请求,就向A发送确认,如果是2次握手建立连接,那么此时连接已经建立。

因为A没有发送连接请求,不会理睬B的确认,也不会向B发送数据,B一直等待A发来数据,造成了B的资源浪费。

而3次握手可以防止这种情况发生,B没收到A的确认,知道A没建立连接。


二.TCP的连接释放

A(客户)---------------------B(服务器)


1. A主动释放连接,包含:终止控制位FIN=1,seq=u(u=前面传送数据最后一个字节序号+1),A进入FIN-WAIT-1

(终止等待1)状态。


2.B收到释放连接报文后发出确认,包含:ACK=1,确认号ack=u+1,B的序号seq=v(v=前面传送数据最后一个字节序号+1),B进入CLOSE-WAIT(关闭等待)状态。A接受到这段报文,就进入CLOSE-WAIT-2(终止等待2)

状态。


3.若B已经没有向A发送的数据,则通知TCP释放连接,B发出的报文段包含:FIN=1,ACK=1,seq=w(在B进入关闭等待状态可能又发送了数据),重复上次的确认号ack=u+1,B进入LAST-ACK(最后确认)状态,等待A的确认。


4.A收到B的连接释放报文段后,必须发出确认报文段:ACK=1,自己序列号seq=u+1,,确认号;ack=1;然后进入

TIME-WAIT(时间等待)状态,时长=2MSL,然后CLOSE,B接收到也CLOSE。


问题:为什么要等待2MSL?

1.保证A的最后一个ACK报文到达B,如果B没收到,则重传第3次挥手内容,此时A还可以接收到,并反应。直到正常结束。

2.防止“已经失效的请求报文段”出现在本连接,等待2MSL,可以使本连接持续时间内产生的所有报文段从网络消失。


保活计时器:连接过程中,B如果2个小时没收到数据,就发送探测报文,以后每隔75分钟发送一次,连续10次没收到回复就关闭连接,收到就重置计时器。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值