图4.1:TCP拆分数据与ACK号
图4.2:实际工作中ACK号与序号的交互过程
首先,客户端在连接时需要计算出与从客户端到服务器方向通信相关的序号初始值,并将这个值发送给服务器(①)。
接下来,服务器会通过这个初始值计算出ACK号并返回给客户端(②)。这是因为初始值有可能在通信过程中丢失,因此当服务器收到初始值后需要返回ACK号作为确认
同时,服务器也需要计算出与从服务器到客户端方向通信相关的序号初始值,并将这个值发送给客户端(②)。
一样的,客户端也需要根据服务器发来的初始值计算出ACK号并返回给服务器(③)。
到这里,序号和ACK号都已经准备完成了,接下来就可以进入数据收发阶段了。数据收发操作本身是可以双向同时进行的。在Web中是先由客户端向服务器发送请求,序号也会跟随数据一起发送(④)。然后,服务器收到数据后再返回ACK号(⑤)。从服务器向客户端发送数据的过程则正好相反(⑥⑦)。