TCP/IP协议栈维护一个叫做TCB(Transmission Control Block)的特殊的数据结构,这个数据结构中记录了用于建立TCP连接的信息

(1) local and remote socket numbers

(2) pointers to the user's send and receive buffers

(3) pointers to retransmit queue and to current segment and other information

大多数OS用backlog来记录TCB的队列,而backlog的大小是有限的。

SYN flood***的本质是

让大量的无效的TCB占据backlog的全部空间导致系统无法提供建立连接所需要的TCB空间,使得合法用户的TCP连接被服务器拒绝

                                     Working Principle

 

TCP 3 次握手建立连接的缺陷

DOS <wbr>之 <wbr>SYN <wbr>flood

如图所示,服务器被动打开连接,端口状态从closed转为listen, 建立TCB。因为服务器的同一个端口号要用于多个连接,所以当端口收到SYN时,服务器复制TCB,把相关信息填入复制的TCB, 将复制的TCB放入队列中,发送SYN+ACK,状态转为SYN-RECEIVED,直到收到对应的ACK才转为ESTABLISHED,同时释放该复制的TCB所占有的资源。

SYN flood ***者发现了这个缺陷,采用2种***方式让服务器的端口无法收到用户的ACK,状态停留在SYN-RECEIVED,所以TCB无法释放,空间很快用完,从而无法响应合法用户的需求

1, SYN包中的[IP address, port]是无效的

2,***者作为客户端,不发送ACK