发送方如何认出接收方传过来的序列号为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回答

翔仔

2020-02-21

同学好,首先你需要理解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
3
翔仔
回复
慕数据5265627
同学好,不是的,这里只是为了简要表明实现方式 具体可以看看 https://segmentfault.com/a/1190000019292140 就知道它的价值了
2021-06-18
共3条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8441 学习 · 1872 问题

查看课程