全部博文(24)
分类: LINUX
2010-11-12 17:55:48
当syn包到来时,会调用net/ipv4/tcp_ipv4.c中的函数tcp_v4_conn_request,此函数用来处理syn包并创建requst_sock存储在半连接队列里,然后发送synack包完成第二次握手。半连接的更新比较关键的是在第三次握手收到ack包时会查找半连接队列,并将符合的requst_sock信息存储到完成三次握手的连接的队列中,然后删除此半连接。
正常情况下,三次握手都能很快完成,半连接队列也不会被填满。但遭受syn攻击时,由于syn包的源ip可能是大量的伪造的ip,主机回的synack包不可能有ack包的回应,如果攻击速度快,会导致半连接队列被填满,后续的连接请求syn就会被无情的丢弃了。如果开起来syncookie,情况将有所变化。下图是函数tcp_v4_conn_request中的片段:
if (inet_csk_reqsk_queue_is_full(sk) && !isn) { |
if (want_cookie) { |
tcp_rsk(req)->snt_isn = isn; |
chinaunix网友2010-11-15 15:15:33
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com