三次握手和四次挥手

一、三次握手

一开始客户端处于Close状态,服务端处于Listen状态  

三次握手就是建立一个TCP连接

第一次握手,由客户端向服务端发送一个包(发送syn同步序列号请求,seq序列号)此时客户端处于SYN_SENT 状态。

 首部的同部位SYN=1,初始序号seq=a,SYN=1的报文不能携带数据,但是要消耗掉一个序号。

第二次握手,服务端收到客户端的SYN报文后,向客户端发送一个包,也是指定了自己的初始化序列号。同时把客户端的seq+1作为ACK(确认号)的值,表示收到了客户端的请求,此时服务端处于SYN_RCVD 的状态。

  初始序号seq=b,ack=a+1,ACK=1

第三次握手,客户端收到SYN报文后,会发送一个包表示已经收到服务端的SYN报文,发送后客户端处于ESTABLISHED 状态。服务器收到 ACK 报文之后,也处于 ESTABLISHED 状态此时双方已建立起了连接。

初始序列号seq=a+1,ack=b+1

第一次握手表示客户端有发送能力

第二次表示服务端有接受发送能力

第三次表示客户端有发送能力

二、四次挥手

第一次挥手,客户端发送(FIN=1,序号seq=a+1,ack=b+1)给服务端,客户端处于FIN_WAIT1 状态。

第二次挥手:服务端收到FIN后向客户端发送ACK报文,(seq=b+1 ack=a+2),表明已接收到客户端报文,同时服务端处于CLOSE_WAIT 状态。客户端收到服务端的确认后,进入FIN_WAIT2(终止等待2)状态,等待服务端发出的连接释放报文段。

第三次挥手:如果服务端也想断开连接,发送给客户端(FIN=1,seq=b+1  ack=a+2),此时服务端处于LAST_ACK(最后确认)状态,等待客户端的确认。

第四次挥手:客户端收到FIN后向客户端发送ACK报文作为应答(seq=a+2 ack=b+2),客户端进入TIME_WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,客户端才进入CLOSED状态。

关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据。

服务器收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值