TCP链接的建立与关闭

三次握手

  1. 客户机的 TCP 先向服务器的 TCP 发送一个连接请求报文. 这个特殊的报文中不含应用层数据, 其首部中的 SYN 标志位被置 1. 另外, 客户机会随机选择一个起始序号 seq=x
  2. 服务器端的 TCP 收到连接请求报文后, 若同意建立连接, 就向客户机发送确认报文,SYN 和 ACK 位都被置为 1, 确认号字段的值为 x+1, 并且服务器随机产生起始序号 seq=y
  3. 当客户机收到确认报文后, 还要向服务器给出确认, 这个报文的 ACK 标志位被置为 1, 序号字段为 x+1, 确认号字段为 y+1

四次挥手

  1. 客户机打算关闭连接,就向其 TCP 发送一个连接释放报文,并停止再发送数据,主动关闭 TCP 连接, 该报文的 FIN 标志位被置 1, seq=u(u等于前面已经传送过的数据的最后一个字节的序号加 1)
  2. 服务器接收连接释放报文后即发出确认, 确认号是 ack=u+1, 这个报文自己的序号是 v, 等于它前面已传送过的数据的最后一个自己的序号加 1. 此时, 从客户机到服务器这个方向的连接就释放了, TCP 连接处于半关闭状态. 但服务器若发送数据, 客户机仍要接收, 即从服务器到客户机的连接仍未关闭.
  3. 若服务器已经没有了要向客户机发送的数据, 就通知 TCP 释放连接, 此时其发出 FIN=1 的连接释放报文
  4. 客户机收到连接释放报文后, 必须发出确认. 在确认报文中, ACK 字段被置为 1, 确认号 ack=w+1, 序号 seq=u+1. 此时, TCP 连接还没有释放掉, 必须经过等待计时器设置的时间 2MSL 后, A 才进入到连接关闭状态.

ps.

  1. 等待2MSL的原因:为了保证客户端发送的最后一个ACK报文段能够到达服务器;防止已失效的报文段,还在网络中滞留;
  2. 为什么建立时三次握手,关闭则需要四次:建立时,服务端收到客户端的连接请求后,可以直接同时发送SYN和ACK报文;关闭时,服务端收到客户端的FIN请求时,可能还存在未发送完的报文,只能先回复ACK报文,当所有报文发送完毕后,服务端才能发送FIN报文,所以,需要四次。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值