讨论/《计算机网络面试突击》 - 第 2 次握手传回了ACK,为什么还要传回 SYN/
《计算机网络面试突击》 - 第 2 次握手传回了ACK,为什么还要传回 SYN
共 5 个回复

SYN应该是服务端请求连接

29

首先ACK和SYN是合并为一个报文段发送的,由服务端发送给客户端,被动建立连接的一方(服务端)发送SYN报文主要是为了把自己的ISN(Initial Sequence Number)发送给主动建立连接的一方(客户端),并且会一直等待客户端的ACK报文,如果客户端没有回复ACK或者回复的ACK报文丢失了,服务端会持续发送SYN,直接收到客户端的ACK为止。

2

ACK是确认,表示我收到了一个快递。
SYN是序号,表示我收到的这个快递号确实是你发的那个。

1

服务器端防止SYN泛洪攻击时,回传回一个initial sequence,这个seq以源IP 源端口号,目的地IP,端口号还有只有服务器知道的一个秘密数,经过散列函数散列而来,之后客户端传回的ack号就是用这个序号,由于IP什么的都没有改变,所以可以确认仍然是之前的客户机。所以,从这个角度上,SYN可以理解为是服务器端传回数据的初始序号,也可以说是确认服务器端收到的消息来自于同一个客户机

第一次握手SYN=1,seq=x;
第二次握手ACK,SYN=1,ack=x+1,seq=w;
第三次握手ACK=1,ack=w+1,seq=x+1;
ACK 是为了告诉客户端发来的数据已经接收无误,而传回 SYN 是为了告诉客户端,服务端收到的消息确实是客户端发送的消息。