讨论/技术交流/今天面试被问了一个问题,tcp连接建立时客户端和服务端报文的初始序列号为什么要不同,如果相同会怎么样/
今天面试被问了一个问题,tcp连接建立时客户端和服务端报文的初始序列号为什么要不同,如果相同会怎么样

找了老半天也没找到原因,有没有大神知道的

共 2 个回复

也谈不上一定不同吧,但是客户端和服务端的序列号都是根据随机数生成的,一般来说是不同的,主要目的是防止dos攻击。因为如果服务端返回数据包的序列号可以预测,那么攻击者发出大量syn报文后就可以继续发送大量ack报文成功建立tcp连接,此时服务端会误以为有这么多连接,然后开辟大量存储空间用于保持会话,导致服务器的空间耗尽,攻击成功。

5

参见三次握手和四次挥手
对于初始序列号有一个协商的过程,只握手两次可能导致死锁, C在S应答分组传输中丢失,C会认为连接还未建立成功,忽略所有数据分组,只等待确认应答分组,S在分组超时后,重复发送同样的分组,形成死锁