tcp三次握手和time wait --- 转

tcp三次握手和time wait --- 转

第一次握手:建立连接时,客户端发送syn包和一个随机序列号seq=x到服务器,并进入SYN_SEND状态,等待服务器进行确认。(syn,同 步序列编号)。第二次握手,服务器收到syn包,必须确认客户的SYN,然后服务器发送一个ACK=1, SYN=1, seq=y的随机数和ack=x+1的确认数的包发送回去。第三次握手是客户端收到服务器端的SYN+ACK包,然后向服务器端发送确认包 ack=y+1, seq=x+1, ACK=1,客户端和服务器端进入ESTABLISHED状态,完成三次握手。具体图示如下:

 

这里多说一点,既然提到了连接时的三次握手,就顺便把断开连接时的四次挥手也复习一下。首先客户端主动发送Fin=1,seq=u,它等于前面已传 送过去的最后一个字节的序号加1.这是A进入FIN-WAIT-1状态,等待B的确认。B收到连接后立即发出确认,确认号是ack=u+1,而这个报文段 自己的序号是v,等于B前面已传送过的数据的最后一个字节的序号加1.然后B即进入CLOSE-WAIT状态。因而A到B的这个链接现在已经断开了,这时 的TCP连接处于半关闭状态,即A已经没有数据需要发送了。但B若发送数据,A还是要接受的。A收到来自B的确认之后就进入了FIN-WAIT-2状态等 待B发出连接释放报文段。若B已经没有要向A发送数据,其应用进程就通知TCP释放连接。这是B发出的连接释放报文段必须使用FIN=1.现在假定B的序 号为w,B还必须重复上次已发送过的确认号ack=u+1.这时B就进入了LAST-ACK状态,等待A确认。A在收到B的连接释放之后必须对此发出确 认。在确认号中把ACK置1,确认号ack=w+1,而自己的序号是seq=u+1。接着A进入TIME-WAIT状态。为了保证B可以收到确认释放报文 段。如上图:

 


是不是所有执行主动关闭的socket都会进入TIME_WAIT状态呢?
有没有什么情况使主动关闭的socket直接进入CLOSED状态呢?

主动关闭的一方在发送最后一个 ack 后
就会进入 TIME_WAIT 状态 停留2MSL(max segment lifetime)时间
这个是TCP/IP必不可少的,也就是“解决”不了的。

也就是TCP/IP设计者本来是这么设计的
主要有两个原因
1。防止上一次连接中的包,迷路后重新出现,影响新连接
(经过2MSL,上一次连接中所有的重复包都会消失)
2。可靠的关闭TCP连接
在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发
fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以
主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCP三次握手是建立一个可靠连接的过程,保证通信双方都能够正常发送和接收数据。 第一次握手:客户端向服务器发送一个SYN包(片段),通知服务器自己要发起连接。此时,客户端处于SYN_SEND状态。 第二次握手:服务器收到SYN包后,会发送一个SYN+ACK包(片段)作为应答,确认收到了客户端的请求,并通知客户端自己也希望建立连接。此时,服务器处于SYN_RECV状态。 第三次握手:客户端收到服务器的SYN+ACK包后,会发送一个ACK包(片段)作为应答,确认接收到了服务器的通知。此时,客户端处于ESTABLISHED状态。 TCP的四次挥手是正常关闭一个连接的过程,确保双方都能够正确结束连接并释放相关资源。 第一次挥手:客户端向服务器发送一个FIN包(片段),通知服务器自己要关闭连接。此时,客户端处于FIN_WAIT1状态。 第二次挥手:服务器收到FIN包后,会发送一个ACK包(片段)作为应答,确认收到了客户端的关闭请求。此时,服务器处于CLOSE_WAIT状态。 第三次挥手:服务器确认自己的数据已经发送完毕后,会发送一个FIN包(片段)给客户端,通知客户端可以关闭连接了。此时,服务器处于LAST_ACK状态。 第四次挥手:客户端收到服务器的FIN包后,会发送一个ACK包(片段)作为应答,确认接收到了服务器的关闭请求。此时,客户端处于TIME_WAIT状态。 整个四次挥手过程完成后,客户端和服务器都处于CLOSED状态,表示连接已经正常关闭。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值