TCP序列号和确认号
这里分两种情况来讲:
一、三次握手
第1步:客户端向服务器发送一个同步数据包请求建立连接,该数据包中,初始序列号(ISN)是客户端随机产生的一个值,确认号是0;
第2步:服务器收到这个同步请求数据包后,会对客户端进行一个同步确认。这个数据包中,序列号(ISN)是服务器随机产生的一个值,确认号是客户端的初始序列号+1;
第3步:客户端收到这个同步确认数据包后,再对服务器进行一个确认。该数据包中,序列号是第2步中,也就是同步请求确认数据包中的确认号值,确认号是服务器的初始序列号+1。
二、数据传输
1.初始序列号随机产生,后续序列号为上一个数据包(对方发送的数据包)的确认号。
2.确认号为上一个对方发送过来的数据包中的序列号+长度Len
3.如果连续发送多个数据包:确认号同样是2中的ACK号,不变;序列号为本地发送的上一个数据包(自己发送的数据包)的序列号+长度Len
连续发送多个数据包的确认和重传问题需要结合窗口滑动机制,这里不再赘述。
读者可以利用TCP连接的协议(如Talnet)和抓包软件Wireshark来分析整个过程。