我的理解TCP中SYN Cookie

  提及SYN Cookie仍是得从TCP3次握手开始提及,先给出计网的体系结构图缓存

 

 

 而后解释一下SYN,seq,ack,ACK的相关名词安全

SYN(创建链接) ACK(确认后所有为1) PSH(传送) FIN(结束) RST(重置) URG(紧急)服务器

 

 

 

产生SYN Flood(一种dos攻击方式):在创建三次握手的状况时,第2、三次握手,双方分别分配缓存和变量供创建链接使用,如此在第一次握手时,若是攻击者不断发送TCP SYN包给服务器,那么就会形成服务器很大的系统开销进而致使系统不能正常工做cookie

 

解决方法:(SYN Cookie):就是在服务器端第一次收到客户端的SYN包时不分配数据区,而是由seq计算一个Cookie值附带到SYN Ack的初始序列号(在第二次握手的包中)中,下一次(即第三次握手)时若是序列号=初始序列+1(这里说明一下,第一次客户端seq是个随机数,服务器收到后也发送seq随机数,可是ack倒是客户端的seq+1值,同理客户端也是这样,客户端的ack是服务器的seq+1),就分配资源.  简单来讲就是发送给客户端,返回消息检查后才分配资源,而以前是一来就分配好了函数

细化SYN Cookie实现过程:spa

 

 1 实现的关键在于cookie的计算,cookie的计算应该包含本次链接的状态信息,使攻击者不能伪造。  2 
 3 
 4 cookie的计算:  5 
 6 
 7 服务器收到一个SYN包,计算一个消息摘要mac。  8 
 9 
10 mac = MAC(A, k); 11 
12 
13 MAC是密码学中的一个消息认证码函数,也就是知足某种安全性质的带密钥的hash函数,它可以提供cookie计算中须要的安全性。 14 
15 
16 在Linux实现中,MAC函数为SHA1。 17 
18 
19 A = SOURCE_IP || SOURCE_PORT || DST_IP || DST_PORT || t || MSSIND 20 
21 
22 k为服务器独有的密钥,其实是一组随机数。 23 
24 
25 t为系统启动时间,每60秒加1。 26 
27 
28 MSSIND为MSS对应的索引。
相关文章
相关标签/搜索