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


发布评论