TCP三次握手、四次挥手

    使用TCP协议进行通信的流程,TCP协议为面向连接的,且具有可靠传输的协议。因此在实现数据收发之前需要建立连接。建立TCP连接、以及断开连接是一个较为复杂的过程。当建立一个TCP连接时,需要客户端和服务器端总共发送3个包以确认连接的建立,这个过程被称为“三次握手”。而当断开TCP连接时,需要客户端和服务器端总共发送4个包以确认连接的断开,这个过程被称为“四次挥手”。

三次握手的过程如下。
(1)服务器必须准备好接收外来的连接。这通常通过调用socket、bind和listen这3个函数来完成,我们称之为被动打开。
(2)客户通过调用connect发送主动打开。这导致客户TCP发送一个SYN(同步)分节,它告诉服务器客户端在(待建立的)连接中发送的数据的序列号。通常SYN分节不携带数据。
(3)服务器必须确认(ACK)客户的SYN,同时自己也发送一个SYN分节,它含有服务器将在同一连接中发送的数据的初始序列号。服务器在单个分节中发送SYN和对客户SYN 的ACK.
(4)客户必须确认服务器的SYN。
这种交换至少需要3个分组,因此称之为TCP的三次握手。其过程如下图8.3所示,客户端的初始序列号为J,服务器的初始序列号为K。

在这里插入图片描述
TCP建立一个连接需要3个分节,终止一个连接则需要4个分节。四次挥手的过程如下。
(1)某个应用进程首先调用close,称该端执行主动关闭。该端的TCP于是发送一个FIN分节,表示数据发送完毕。
(2)接收到这个FIN的对端执行被动关闭。它的接收也作为一个文件结束符传递给接收端应用进程。FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
(3)一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字,这导致它的TCP也发送一个FIN。
(4)接收这个最终的FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。
类似SYN,一个FIN也占据1个字节的序列号空间。因此,每个FIN的ACK确认号就是这个FIN的序列号加1。由于TCP连接是全双工的,因此,每个方向都必须单独进行关闭。这一原则是当一方完成数据发送任务之后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动,即不会再收到数据。但是这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。其挥手过程如下图8.4所示。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值