TCP三次握手和四次挥手中的ACK为什么总是SYN + 1或者FIN +1而不是+其他数值?

414次阅读
没有评论

TCP 三次握手的时候

TCP 三次握手和四次挥手中的 ACK 为什么总是 SYN + 1 或者 FIN + 1 而不是 + 其他数值?

1、客户端 向服务端发起连接请求,这个时候客户端将发送一个 SYN 分节 (假设其值为 J),它告诉服务端我发送数据的初始序列号将是 J。

2、服务端收到这个请求后,必须确认 (ACK) 客户的 SYN(J+1),同时自己也得发送一个 SYN(假设其值为 K) 分节,它也是告诉对端我发送数据的初始序列号将是 K。

3、客户端收到服务端的确认 (ACK=J+1),这个时候客户端还必须向服务端做一个确认 SYN(K+1)。

这样三次握手结束,完全连接。

这里面所有的 ACK 都是收到的一个 SYN 值 + 1,这个 +1 是因为 SYN 占据一个字节的序列号空间,所以每一个 SYN 的 ACK 中的确认号都是该 SYN 的初始序列号 +1.

同样的,每一个 FIN 的 ACK 中的确认号也为该 FIN 的序列号 +1

 

TCP 三次握手中 SYN,ACK,Seq 三者的关系

TCP(Transmission Control Protocol) 传输控制协议

TCP 是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:

位码即 tcp 标志位,有 6 种标示:SYN(synchronous 建立联机) ACK(acknowledgement 确认) PSH(push 传送) FIN(finish 结束) RST(reset 重置) URG(urgent 紧急)Sequence number(顺序号码) Acknowledge number(确认号码)

第一次握手:主机 A 发送位码为 syn=1,随机产生 seq number=1234567 的数据包到服务器,主机 B 由 SYN= 1 知道,A 要求建立联机;

第二次握手:主机 B 收到请求后要确认联机信息,向 A 发送 ack number=(主机 A 的 seq+1),syn=1,ack=1,随机产生 seq=7654321 的包;

第三次握手:主机 A 收到后检查 ack number 是否正确,即第一次发送的 seq number+1,以及位码 ack 是否为 1,若正确,主机 A 会再发送 ack number=(主机 B 的 seq+1),ack=1,主机 B 收到后确认 seq 值与 ack= 1 则连接建立成功。

正文完