请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

发送方如何认出接收方传过来的序列号为Syn-Cookie?

老师您好,在课程中您有提到,在接收端的SYN队列满了的时候,会给发送端发送一个根据源端口目标端口以及时间戳构成的特殊sequence number 即SYN-COOKIE,若发送端,回发了这个SYN-COOKIE,则建立连接

我的想法是:接收端的SYN队列是否满了这个事情, 对于发送端来说是透明的,所以发送端在第一握手发送了 SYN=1,seq=x 之后 期待的应该是 接收方回发过来SYN=1,ACK=1,seq=接收方自己初始化的sequence number 比如说y,以及ack = x + 1。

我的疑问在于:发送方如何认出接收方传过来的序列号为Syn-Cookie?,若接收方只是将自己初始化的y设置为syn-cookie发回给发送方,那么发送方,应该紧接着就发送自己的seq=x+1 以及对这个syn-cookie的ack确认,而不是说回发这个syn-cookie呀。

综上,我想知道的是,发送方是如何辨别这个传过来的序列号是syn-cookie而不是接收方自己初始化的一个序列号呢?

希望祥仔可以解答疑惑,感谢~

正在回答

1回答

翔仔 2020-02-21 02:15:40

同学好,首先你需要理解syn-cookie的概念

SYN Cookie是对TCP服务器端的三次握手协议作一些修改,专门用来防范SYN Flood攻击的一种手段。它的原理是,在TCP服务器收到TCP SYN包并返回TCP SYN+ACK包时,不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值。在收到TCP ACK包时,TCP服务器在根据那个cookie值检查这个TCP ACK包的合法性。如果合法,再分配专门的数据区进行处理未来的TCP连接。

重点看,"SYN Cookie是对TCP服务器端的三次握手协议作一些修改" 服务器端的SYN由服务器自己维护,跟客户端无关,所以它发给客户端的SYN它自己能做主,客户端只需要根据接收到的SYN 回发ACK为SYN+1即可,剩下的由服务方静默处理

0 回复 有任何疑惑可以回复我~
  • 提问者 YogurtJ #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-02-29 23:09:16
  • 老师好,如果这样的话,是不是可以理解成:防护SYN Flood的措施是不在TCP服务器收到TCP SYN包并返回TCP SYN+ACK包时分配数据区,而是在收到TCP ACK包时,TCP服务器才会分配专门的数据区来处理未来的连接。那么不需要计算SYN Cookie,也是可以的啊。我的理解有木有啥问题呢?
    回复 有任何疑惑可以回复我~ 2021-06-16 16:43:29
  • 同学好,不是的,这里只是为了简要表明实现方式 具体可以看看 https://segmentfault.com/a/1190000019292140
    就知道它的价值了
    回复 有任何疑惑可以回复我~ 2021-06-18 21:31:34
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信