TCP协议三次握手四次挥手

本文详细解析TCP协议的三次握手建立连接的过程及原因,同时深入探讨四次挥手的连接关闭流程,并讨论了SYN攻击及其防范措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tcp协议的三次握手四次挥手虽然在我的实际工作中并不常用,但是面试的时候似乎经常被问到,最近好好学习了一把,总结一下。

TCP协议是传输控制协议,位于tcp/ip协议模型的传输层,提供可靠的连接服务。


三次握手:

1.TCP协议的三次握手,总体可以分为三个步骤:请求-应答-再次确认。

握手过程如图所示:


  • 客户端发送连接请求的报文
  • 服务端接受连接后,回复ACK报文,并为这次连接分配资源
  • 客户端接收到ACK报文后也向服务端发送ACK报文,并分配资源,这样tcp连接就建立了。
2.为什么要三次握手,两次确认?

为了防止失效的连接请求突然又传到了服务器,服务器发送确认包(SYN-ACK)之后,一直等待客户端发送数据,并且重发确认,直至超时,导致服务器资源浪费。

3.SYN攻击

原理:在短时间内伪造出大量不存在的IP地址,向服务器不断发送SYN包,请求连接服务器。服务器在回复确认包(SYN-ACK)之后到收到客户端的ACK之前的TCP连接称为半连接,由于源IP地址不存在服务器无法收到客户端的ACK确认,服务器要不断的重发确认包,直至超时。     这些伪造的SYN包,将长时间占用未连接队列导致正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。

检测:SYN攻击是典型的DDOS攻击,当在服务器上看到大量的半连接状态时,尤其是源IP地址都是随机的,基本上可以断定这是一次SYN攻击。Linux下可以使用如下命令检测SYN攻击:netstat -n -p TCP当查看到很多连接状态为SYN_RECV,或者使用命令:netstat -n -p TCP | grep SYN_RECV | grep :22 | wc -l查看某个端口下的未连接数。

防范:SYN网关(代替客户先发送ACK确认包),SYN代理(代替服务器先发送SYN-ACK确认包,看是否有客户端的ACK确认包),SynAttackProtect机制,SYN cookies技术,增加最大半连接数,缩短超时时间。

四次挥手:

1.言简意赅通俗易懂的说法:

A:我没数据要发给你了。

B:好的,我知道了,我还有点数据要给你。

......

B:我也没有数据要发给你了,我准备好要关闭数据连接了。

A:好的,你先关吧。(等2MSL没有回复,说明B端已经正常关闭)那我也关了。

2.上图显示四次挥手:


这是从百度图库偷来的图,因为第一次挥手的请求可能是服务端发出的也可能是客户端发出的,所以这图我是不认同他说的客户端和服务端的说法的,只说AB.

  • 主机A向主机B发送一个FIN报文段,还有一个序号为seq的数据包,主机A进入FIN_WAIT_1状态。表示A没有数据要发送给主机B了。
  • 主机B向A回一个ACK报文段,请求的数据包序号为seq+1,主机A进入到FIN_WAIT_2状态。表示B知道了A 的关闭请求,但是有可能B还有数据要传送给A,这时候B还可以向A发送数据。
  • 主机B向主机A发送一个FIN报文段,请求关闭连接。表示B也没有数据要发送给A了,请求关闭连接。
  • 主机A向主机B发送发送ACK报文段,然后主机A进入TIME_WAIT状态,主机B收到A这个ACK报文段之后就关闭连接了;而A在TIME_WAIT状态等待2MSL之后没有收到回复,说明B已经正常关闭了,主机A也可以关闭连接了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值