TCP 三次握手、四次挥手

三次握手

TCP用三次握手(或称三路握手,three-way handshake)过程创建一个连接。在连接创建过程中,很多参数要被初始化,例如序号被初始化以保证按序传输和连接的强壮性。

三次握手
一对终端同时初始化一个它们之间的连接是可能的。但通常是由一端打开一个套接字(socket)然后监听来自另一方的连接,这就是通常所指的被动打开(passive open)。服务器端被被动打开以后,用户端就能开始创建主动打开(active open)。

  • Step 1:
    客户端通过向服务器端发送一个 SYN 来创建一个主动打开,作为三次握手的一部分。客户端把这段连接的序号设定为随机数 x
  • Step 2:
    服务器端应当为一个合法的 SYN 回送一个 SYN/ACKACK 的确认码应为 x+1SYN/ACK 包本身又有一个随机产生的序号 y
  • Step 3:
    最后,客户端再发送一个 ACK。此时包的序号被设定为 x+1,而ACK的确认码则为 y+1。当服务端收到这个 ACK 的时候,就完成了三次握手,并进入了连接创建状态。
举个例子:

假如 X 和 Y 打电话,电话接通后:
X 说:我是 x (姓名 x 相当随机数 x),你能听到我说话吗(可以理解为 SYN)?
Y 说:你好 x(相当于 x+1),我是 y (姓名 y 相当于随机数 y), 我能听到你说话,你能听到我说话吗(可以理解为 ACK)?
X 说:你好 y(相当于 y+1),我能听到你说话(相当于 y+1)。

四次挥手

四次挥手,别名连接终止协议。其性质为终止协议。

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

  • Sept 1:
    客户端(不一定是客户端,也可以是服务端)向服务端发送一个 FINseq 命令,告诉服务器要断开连接。
  • Sept 2:
    服务器接收到 FIN 命令,会送一条带有 ACK、seq 和 随机数 ack 的命令,客户端接收到这条命令后可以关闭输出流。
  • Sept 3:
    此时,服务器可能还有没传送完成的数据在发送给服务器,在 CLOSE-WAIT 状态下继续发送未传输完成的数据,传输完成后会给客户端发送 FIN 、ACK、seq 和 ack 命令,客户端接收到 FIN 命令此时可以关闭输入流,服务器可以关闭输出流。
  • Sept 4:
    客户端接收到服务器的 FIN 命令后,最后向服务器发送一条应答消息,此时,双方断开连接。
PS:

在四次挥手过程中,S3 如果是网络延时或者堵塞,服务端会一直发送 FIN 命令给客户端直到收到客户端的回应 ACK 命令。同理,假如 S4 中,服务器没有收到 ACK 命令, 客户端也是一直发送,知道服务器断开连接。

以上是知识积累,如有错误或者遗漏的地方,可以私信我。
另外,如果觉得博文写的不错,点赞支持下,谢谢。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值