TCP三次握手四次挥手

2021-05-21  本文已影响0人  devilisdevil

三次握手

服务器:

服务器可以选择半连接池满后是否开启syn cookies。可以在不使用半连接队列的情况下建立全连接,直接在收到ACK的时候校验即可。
可以选择0关闭功能,1仅当半连接队列满时才使用,2无条件开启
可以防止syn flood攻击:但这种方式建立的连接,许多 TCP 特性都无法使用(?)。所以,应当把 tcp_syncookies 设置为 1,仅在队列满时再启用

syncookies严重违反了TCP协议,不允许使用TCP扩展,可能导致一些服务的严重退化(比如SMTP relaying?)。
如果你看到了syn flood警告但你并没有被真正攻击,那么你的一些配置可能有问题(半连接数量可以调高点)
你如果想要测试syncookies的效果,你可以把它设置为2,无条件使用syn cookies

四次挥手

把主动关闭连接一方记做A,被动关闭一方记做B

FIN_WAIT_1

A调用close,发送FIN,进入FIN_WAIT_1

FIN_WAIT_2

A收到对面对FIN的ACK,进入FIN_WAIT_2,等待对方发送FIN

CLOSE_WAIT

B收到A的FIN后,发送ACK,等待进程调用 close 函数关闭连接(发送FIN给A)

TIME_WAIT

A收到B的FIN后,回复一个ACK,但还没有结束,它不知道这个ACK有没有被收到,所以要保持在TIME_WAIT状态2MSL

注意

如果出现很多CLOSE_WAIT说明自己没有及时在收到对面的FIN后也关闭连接(没有调用close函数)
如果出现很多FIN_WAIT_2表示在等待对面的FIN,而对面迟迟没有发,说明对面没有调用close函数

Refs

上一篇 下一篇

猜你喜欢

热点阅读