趣谈TCP四次挥手

1.趣谈TCP四次挥手

老样子,在开始正式的讲解TCP四次挥手之前,先来一段小对话来帮助大家更好的理解。
下面展示 对话情景

----------------------------------------------------------------------
对话介绍:
角色:祖安人,萌新
背景:经过了三次对话之后,祖安人和小朋友进入了选择英雄界面。祖安人面带微笑
的让小萌新选择了一个“扫把头”的英雄,而祖安人选择了“鲶鱼”来辅助萌新。
进入游戏界面后,祖安人开始了和萌新友好的互动 ......
----------------------------------------------------------------------

在这里插入图片描述

游戏结束,祖安人和萌新各回各家。

对话结束,下面正式的开始介绍TCP四次挥手连接

2.断开TCP连接:TCP四次挥手

看完上面那个小对话,下面开始正式的来看TCP四次挥手
TCP四次挥手
这里再复习一下seq,FIN,ACK:
1.序号seq:

占32比特,也就是4个字节。一个报文段的序号是该报文段首字节的字节流编号。

2.确认号ack:

占4个字节。确认号就是主机正在等待的数据的下一个字节序号。
例如:客户发送的第一个报文段的序号 seq =  99;那么服务器发送的报文段的
确认号: ACK= 100

3.终止FIN

FIN=1时,表示数据已全部传输完成,发送方不会再传输数据,并且要求释放当前
连接。
FIN=0,正常传输数据。

①为什么需要断开TCP连接?

因为在建立TCP连接(三次握手),连接后的数据传输中,客户和服务器都会为该TCP连接分配TCP缓存和变量。(在分配TCP缓存和变量中,会使得TCP容易收到SYN洪泛的拒绝服务攻击)。所以在连接结束后(TCP四次挥手),客户和服务器中的资源(即缓存和变量)都应该被释放。

②为什么需要四次挥手断开TCP连接?

因为TCP是全双工的通信机制全双工通信信道:双方都可以同时发送和接收),每个方向必须单独进行关闭,并且客户和服务器任何一个都可以选择关闭该TCP连接。

分析四次挥手:断开连接

  1. 客户端首先发出一个关闭连接命令(FIN = 1),也就是向服务器端发送一个首部带有FIN比特标志位的TCP报文段,此时客户端不会再向服务器发送数据,并且会等待服务器返回确认报文段(ACK报文)。

  2. 服务器端接收到了该报文段后,就向客户端发送回一个确认报文段(ACK = 1);但是服务器端此时还没有进入关闭状态,会把剩下没有发送的数据继续发给客户端

  3. 服务器端发送完剩下未发送的数据之后,同样也会向客户端发送一个首部带有FIN比特标志位的TCP报文段,此时服务器端不会再向客户端发送数据,同样会等待客户端返回确认报文段。

  4. 客户端收到该报文段后,客户TCP会对该报文段进行确认,并且会进入定时等待状态,因为假若ACK丢失,该状态会让TCP客户端重新发送最后的确认报文ACK。经过该状态之后,TCP连接就正式关闭了,客户端所有的资源(变量,缓存包括端口号)将会被释放。

定时等待状态:TIME_WAIT,所消耗的时间有30秒、1分钟或者2分钟,一般为2分钟
(MSL)。

总结

TCP四次挥手关闭连接的规则如下:

  • 当一端(可以是客户端或者服务器端)发送一个FIN报文段来关闭这一端的数据发送,需要收到另一端的确认报文段。
  • 又因为TCP是全双工的通信机制(全双工通信信道:双方都可以同时发送和接收),每个方向必须单独进行关闭,所以需要四次挥手关闭连接。

3.小知识:SYN洪泛攻击

SYN洪泛攻击也叫DoS攻击,利用了TCP三次握手建立连接的特点。攻击者发送大量的伪造TCP SYN报文段,而不完成去第三次握手的步骤,导致服务器不断为这些半开连接分配资源(缓存,变量),导致了服务器的连接资源被消耗殆尽。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值