TCP建立连接与释放连接

TCP建立连接与释放连接在这里插入图片描述

第一次握手:客户端作为连接建立发起端,选择客户端初始序列号x,向服务器发送(SYN=1,seq=x)的SYN段。客户状态由LISTEN进入SYN_SEND状态,等待服务器确认。
第二次握手:服务器收到客户发送的SYN段后,选择服务器初始序列号y,向客户发送(SYN=1,ACK=1,seq=y,ack_seq=y+1)的SYNACK段。同时,服务器状态由LISTEN进入SYN_RCVD状态
第三次握手:客户端收到服务器发的SYNACK段后,向服务器发送(ACK=1,seq=x+1,ack=seq=y+1)的ACK段,同时,客户端进入ESTABLISHED状态,客户端确认连接已建立;当服务器收到ACK段后,也进入ESTABLISHED状态,也确认连接已建立。至此,双方确认连接建立成功。

四次挥手

在这里插入图片描述
①当客户端向服务器发送完最后一个数据后,可以发送一个FIN段(FIN=1,seq=u),请求断开客户到服务器的连接,其状态由ESTABLISHED进入FIN_WAIT_1,在这一状态下,只能接收服务器发送过来的数据,而不再发送数据。需要注意的是,FIN段不封装应用层数据,但是也要消耗掉1个序列号。
②服务器收到客户的FIN段后,向客户发送一个ACK段(ACK=1,seq=v,ack_seq=u+1),ACK段可以封装应用层数据(如果有)。服务器状态由ESTABLISHED状态进入CLOSE_WAIT,在这一状态下,服务器仍然可以发送数据,但不再接收数据。当客户收到ACK段后,其状态由FIN_WAIT_1进入FIN_WAIT_2,仍然可以接收来自服务器的数据。此时的TCP连接已经关闭了客户向服务器方向的数据传输,故也称为半关闭。
③当服务器向客户发送完最后一个数据段后,服务器向客户发送FIN段(FIN=1,ACK=1,seq=w,ack_seq=u+1),同样,该FIN段也不携带应用层数据。服务器状态则由CLOSE_WAIT进入LAST_ACK,此时服务器也不再发送数据。
④当客户收到服务器发送的FIN后,向服务器发送ACK段(ACK=1,seq=u+1,ack_seq=w+1),其状态由FIN_WAIT_2进入TIME_WAIT,等待2MSL时间,然后进入CLOSED状态,最终释放连接,服务器在收到最后一次ACK段后,状态由LAST_ACK进入CLOSED,最终释放连接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值