seq + 1
,这就作为了ack的初始值,SYN在前两次握手时都为1,这样通信双方都会有ack的初始值为什么需要三次握手而不是两次握手
TCP传输模式是全双工模式,Server端和Client端是完全对等的,三次握手前两次可以确保Server端可以正常接收并返回请求,后两次可以确保Client端可以正常接收并返回请求
为什么握手要三次,挥手却要四次
因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手
SYN Flood
攻击
Client端在发送第一次握手信息(并接收到第二次握手)之后不回应第三次握手,服务器会以为第二次握手包在传输过程中丢失,会持续发送第二次握手(通常会持续发送5次),如果有大量这种恶意请求,服务器就会大量浪费服务器资源
解决方法:
$ netstat -nap | grep SYN_RECV
原文:https://www.cnblogs.com/yaoomoon/p/11707551.html