2024年3月9日发(作者:)

目录

解决TCP连接数过多的问题 ................................................................................................................... 1

解决方法:.......................................................................................................................................... 6

解决半开攻击的方法.................................................................................................................................. 6

解决方法:........................................................................................................................................ 11

解决TCP连接数过多的问题

TCP状态迁移,CLOSE_WAIT & FIN_WAIT2 的问题

TCP状态迁移

对netstat -a命令很熟悉,但是,你有没有注意到STATE一栏呢,基本上显示着est

ablished,time_wait,close_wait等

大家很明白TCP初始化连接三次握手吧:发SYN包,然后返回SYN/ACK包,再发A

CK包,连接正式建立。但是这里有点出入,当请求者收到SYS /ACK包后,就开始建立

连接了,而被请求者第三次握手结束后才建立连接。但是大家明白关闭连接的工作原理吗?

关闭连接要四次握手:发FIN包,ACK 包,FIN包,ACK包,四次握手!!为什么呢,因

为TCP连接是全双工,我关了你的连接,并不等于你关了我的连接。

客户端TCP状态迁移:

CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WA

IT->CLOSED

1

服务器TCP状态迁移:

CLOSED->LISTEN->SYN收到 ->ESTABLISHED->CLOSE_WAIT->LAST_ACK->C

LOSED

当客户端开始连接时,服务器还处于LISTENING,

客户端发一个SYN包后,他就处于SYN_SENT状态,服务器就处于SYS收到状态,

然后互相确认进入连接状态ESTABLISHED.

当客户端请求关闭连接时,客户端发送一个FIN包后,客户端就进入FIN_WAIT_1状态,

等待对方的确认包,

服务器发送一个ACK包给客户,客户端收到ACK包后结束FIN_WAIT_1状态,进入FI

N_WAIT_2状态,等待服务器发过来的关闭请求,

服务器发一个FIN包后,进入CLOSE_WAIT状态,

当客户端收到服务器的FIN包,FIN_WAIT_2状态就结束,然后给服务器端的FIN包给

以一个确认包,客户端这时进入TIME_WAIT,

当服务器收到确认包后,CLOSE_WAIT状态结束了,

这时候服务器端真正的关闭了连接.但是客户端还在TIME_WAIT状态下,

2