带你深入浅出新面经:六、什么是连接的半打开、半关闭状态?

此为面经第谈!可以关注我,每日带你深入浅出一个新面经。

我们要了解面经要如何“说”

很重要!很重要!很重要!

我们通常采取总-分-总方式来阐述!(有些知识点,你可以去了解,但是面经并不是需要全部了解的)

码农不易,各位学者学到东西请点赞支持支持

开始部分(半打开状态):

总:半打开状态是处于TCP三次握手过程中发生的,服务端准备好接收数据,但连接尚未完全建立。

分:

结合三次握手流程图更好理解:

它是通过半连接队列(SYN队列)用来存储半打开状态的连接(SYN队列又是通过hash表来实现的)。

当服务端收到客户端第三次握手的ACK包后,连接建立成功:该连接会在SYN队列中移除、并把该连接加入到全连接队列(accept队列)中

如果客户端收到SYN+ACK包(第二次握手),但不回复ACK包:这种情况就会引起SYN泛洪,也出称SYN攻击,DDos攻击。

那我们要如何防御SYN泛洪呢?

我们需要了解一个机制:syncookies。它的原理很简单,直接绕过SYN队列的情况下进行建立连接。当客户端接收到SYN包后,返回SYN cookies给客户端,然后客户端会发送ACK包和cookies,与服务器进行匹配,成功后就加入全连接队列当中。

那么我要有三种方式来防御SYN泛洪:

1.直接增大半连接队列。

2.减少SYN+ACK包的重传次数,这样占用SYN队列的资源的时间就不会太久了。

3.开启syncookies机制。

总:半打开状态主要目的就是牵扯到SYN泛洪,我们要学会如何防御这种情况。

开始部分(半关闭状态):

总:半关闭状态处于四次挥手的过程中,连接的一方已经关闭了自己到另一方的数据传输方向,但另一方仍然可以继续发送数据。

分:

结合四次挥手流程图更好理解:

当服务端收到FIN包,进入CLOSE_WAIT状态,但依然可以向客户端发送数据,这就将FIN包的控制权交给应用层处理。

而服务端FIN包发送的方式有两种:close:服务端关闭读写端口,服务端在CLOSE_WAIT状态下发送数据,客户端(发现服务端的读写端口已关闭无法回复ACK包)将回复RST包,异常结束连接(快速终止连接状态);

shutdown:服务端只关闭写通道,服务端在CLOSE_WAIT状态下发送数据,客户端将回复ACK包。

总:主要是了解服务端的FIN包发送的两种方法。

  学习链接:https://xxetb.xetslk.com/s/3Kif2D

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值