以下是来自linux内核的一段代码。它包括syn-cookie中的客户端seq。此方案的问题在于,如果来自客户端的第一个数据包被丢弃,则连接将在第二个数据包上重置。我的问题是为什么你需要在SYN cookie中包含客户序列号?
static __u32 secure_tcp_syn_cookie(__be32 saddr, __be32 daddr, __be16 sport,
__be16 dport, __u32 sseq, __u32 count,
__u32 data)
{
/*
* Compute the secure sequence number.
* The output should be:
* HASH(sec1,saddr,sport,daddr,dport,sec1) + sseq + (count * 2^24)
* + (HASH(sec2,saddr,sport,daddr,dport,count,sec2) % 2^24).
* Where sseq is their sequence number and count increases every
* minute by 1.
* As an extra hack, we add a small "data" value that encodes the
* MSS into the second hash value.
*/
return (cookie_hash(saddr, daddr, sport, dport, 0, 0) +
sseq + (count << COOKIEBITS) +
((cookie_hash(saddr, daddr, sport, dport, count, 1) + data)
& COOKIEMASK));
}
答案 0 :(得分:1)
sseq编号包含在散列操作中,以便在cookie中包含更多状态信息。它是一个普遍的概念,当多个不相交的信息被一起烹饪时,哈希变得更加健壮。并且,关于你担心conn在第二个syn情况下被重置,是的,它会发生,这就是意图。更重要的是,只有在威胁下检测到服务器时,才会启用syn cookie。
请在此处阅读有关syn-cookie实现的大量详细信息以及为什么sseq编号是输入参数之一。
http://www.cisco.com/web/about/ac123/ac147/archived_issues/ipj_9-4/syn_flooding_attacks.html