TCP 的连接与断开(三次握手与四次挥手)

        现在的信息传输那么发达,网络无处不在,以 TCP/IP 为主的网络传输深入了我们生活的方方面面。为了提供可靠的传送,TCP 在发送新的数据之前,以特定的顺序将数据包的序号,并需要这些包传送给目标机之后的确认消息。TCP 总是用来发送大批量的数据。当应用程序在收到数据后要做出确认时也要用到 TCP。

建立 TCP 连接的条件

为了建立连接TCP连接,通信双方必须从对方了解如下信息:

  • 对方报文发送的开始序号。
  • 对方发送数据的缓冲区大小。
  • 能被接收的最大报文段长度MSS。
  • 被支持的TCP选项

三次握手协议的诞生就是为了保证 TCP 的稳定连接。

建立连接的过程(三次握手)

  1. 建立连接时,用户端发送 SYN(同步序列编号 Synchronize Sequence Numbers)包(seq=x)到服务器,并进入 SYN_SENT 状态,等待服务器确认;
  2. 服务器收到 SYN 包,必须确认用户端的 SYN(ack=x+1),同时自己也发送一个 SYN 包(seq=y),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态。
  3. 用户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK(ack=y+1),此包发送完毕,用户端和服务器进入 ESTABLISHED(TCP连接成功)状态,完成三次握手。

        服务器维护一个未连接队列,该队列为每个用户端的 SYN 包(seq=x)开设一个条目,该条目表明服务器已收到 SYN 包,并向用户发出确认,正在等待用户的确认包。这些条目所标识的连接在服务器处于 SYN_RECV 状态,当服务器收到用户的确认包 ACK 时,删除该条目,服务器进入 ESTABLISHED 状态。

半连接存活时间/连接超时时间

        是指半连接队列的条目存活的最长时间,也即服务器从收到 SYN 包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为 Timeout 时间、SYN_RECV 存活时间。

断开 TCP 连接

        有连接就会有断开的时候,连接是依靠三次握手协议,断开 TCP 连接就是依靠连接终止协议(四次挥手)。

断开连接的过程(四次挥手)

        由于 TCP 连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个 FIN 来终止这个方向的连接。收到一个 FIN 只意味着这一方向上没有数据流动,一个 TCP 连接在收到一个 FIN 后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

  • TCP 用户端发送一个 FIN,用来关闭用户到服务器的数据传送。
  • 服务器收到这个 FIN,它发回一个 ACK,确认序号为收到的序号加1。和 SYN 一样,一个 FIN 将占用一个序号。
  • 服务器关闭用户端的连接,发送一个 FIN 给用户端。
  • 用户端发回 ACK 报文确认,并将确认序号设置为收到序号加1。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值