您的位置:首页 > 理论基础 > 计算机网络

TCP的三次握手建立连接与四次挥手释放连接

2016-04-11 21:41 721 查看

一、TCP的三次握手建立连接

三次握手,指通信双方建立TCP连接时,需要发送三次包,其执行过程如下图所示:



第一次握手:Client端联系Server端(SYN=1,seqc=x),意思是告诉对方“我想跟你建立连接”,同步信号SYN=1及我的初始序号为Seqc=x;



第二次握手:Server端回复Client端(SYN=1,ACK=1,ackc=x+1,seqs=y),意思是“好的,已收到,我同意建立连接”,同步信号SYN=1,确认信号ACK=1,对对方的初始序号的确认ackx+1我的初始序号Seqs=y;



第三次握手:Client回复Server端(ACK=1,acks=y+1,seqc=x+1),意思是“好的,已收到,我准备发送数据了”,确认信号ACK=1,对对方的序列号确认acks=y+1,如果自己这一端发送数据则Seqc=x+1



二、TCP四次挥手释放连接

四次挥手,指的是通信双方结束本次通话需要发送四次数据包,其过程如下图所示:



第一次挥手:主动方回复另一方(ACK=1,FIN=1,seq1=u),意思是“你刚才发的东西我已收到,我没有数据发送了”,所以ACK=1是对上一报文的确认,FIN=1表示自己这边已没有数据了;

第二次挥手:被动方回复主动方(ACK=1,ack1=u+1,seq2=v),意思是“收到你的信息,我可能还有数据要发”,所以ACK=1,ack1=m+1是对报文的确认,同时自己这边的序号到Seq2=n了;

第三次挥手:因为主动方没有数据了,一直处于等待状态,所以这一次由被动方发起(ACK=1,FIN=1,ack1=u+1,seq2=w),意思是“我也没有数据发送了,可以结束连接了”;

第四次挥手:主动方回复被动方(ACK=1,ack2=w+1,seq1=u+1),意思是“收到”。

然后主动方等待一定时间,如果没有收到对方重发的FIN报文则表示对方已成功关闭连接,自己这边也可以关闭连接了;如果对方等待超时仍没有收到ACK报文则肯定会重新发送FIN报文,所以这个一定时间就是指TIME_WAIT状态,所以等待是否重新发送ACK报文

三、为什么建立连接需要三次握手,而释放连接需要四次握手?

:因为建立连接时,服务端一直就处于Listen状态下,当收到客户端的SYN请求后,就将ACK和SYN放在一个报文中发送给客户端;而释放连接时,主动方发送FIN报文只表示当前自己已没有数据发送了,但对方可能还有数据发送,所以被动方先回复一个ACK报文确认收到该报文,然后当被动方也没有数据发送时就会再发起一个FIN报文报告自己没有数据发送时,然后再被主动方确认后释放连接。

四、为什么TIME_WAIT状态需要等待一定时间才能真正释放连接?

:首先这个一定时间跟具体实现有关,而需要等待这段时间是为了确认主动方发送的ACK报文被对方收到了并且对方已关闭了连接,否则主动方直接关闭了连接而发送的ACK报文由于网络不可靠中途丢失了,那么另一方就要不断重发FIN报文苦等ACK报文而不得,空浪费资源。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: