三次握手和四次断开

  • 第一次握手:
    客户端将TCP报文标志位SYN置为1,随机产生一个序号值seq=J,保存在TCP首部的序列号(Sequence Number)字段里,指明客户端打算连接的服务器的端口,并将该数据包发送给服务器端,发送完毕后,客户端进入SYN_SENT状态,等待服务器端确认。
  • 第二次握手:
    服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将TCP报文标志位SYN和ACK都置为1,ack=J+1,随机产生一个序号值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。
  • 第三次握手:
    客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与
  • 1.第一次断开

  • (注意,无论是作为客户端还是服务端,两者都能够主动去断开TCP连接)

    这里我们假设为客户端要断开TCP连接。

    首先,客户端会着服务器发送中断连接请求FIN(完,终结的意思, 用来释放一个连接。 当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。)报文。这是第一次挥手。

    2.第二次断开

    服务器在收到FIN报文后,这个时候因为你们原先建立着TCP传输协议,那么这个时候就有可能还有数据还在传输当中,此时服务器就会发一个ACK回应报文给客户端,告诉对方:我收到了你的请求,但是我还没准备好,请你等一等。这个时候客户端就进入了请求等待状态(FIN_WAIT),等待服务器的下一步消息。

    3.第三次断开

    当服务器确认没有数据在传输了,这个时候服务器就会向客户端发送关闭连接请求报文(FIN),来告诉对方:我已经准备好关闭连接了。

    4.第四次断开

    当客户端收到了来自服务端的FIN报文,这个时候他知道已经可以断开连接了,但是他还是不放心,担心服务端不去关闭连接,这个时候他就会再次发送ACK回应报文,去确认服务端是否关闭了连接(这个时候客户端进入TIME_WAIT状态,如果服务器没有收到ACK报文则可以重传)

    服务端在接收到ACK后断开连接,而客户端则会在等待2MSL后,如果仍旧没有收到消息,则表明服务器已经关闭了连接,自己也可以关闭连接了。

    至此,TCP连就关闭了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值