发送方如何认出接收方传过来的序列号为Syn-Cookie?
来源:2-4 TCP的三次握手_2

YogurtJ
2020-02-19
老师您好,在课程中您有提到,在接收端的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回答
-
同学好,首先你需要理解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即可,剩下的由服务方静默处理
032021-06-18
相似问题