首页 > 代码库 > TCP传输中序号与确认序号的交互

TCP传输中序号与确认序号的交互

本实验通过SSH远程登录服务器,然后使用Wireshark抓包分析。开头的三次握手已经省略。关于序号的交互过程,需要记住一点:TCP首部中的确认序号表示已成功收到字节,但还不包含确认序号所指的字节,希望下一次能收到确认序号所指的字节。

当在远程登录软件上键入命令时,客户端便开始了数据的发送,TCP头如下:



初始化序列号ISN = 1,这个序列号是客户端对发送数据的一个标记,以1作为起始值。根据SSH包长度计算下一次将会发送的起始序号为65。确认序号为1表示我希望下次收到起始序号为1的TCP包。

服务器端返回的TCP头如下:


客户端想要序号1,那服务器就发送序号1,所以服务器发送的TCP包起始序号为1。同时,服务器又希望下一次收到起始序号为65的包,这和客户端下一次会发送起始序号为65的包完全吻合。

客户端发送的TCP头如下:


服务器要序号65,那我客户端这边就发送65。同时我希望下一次收到序号65。

服务器的TCP头如下:


服务器果然又满足客户端的要求返回65。同时希望获得序号129。

客户端和服务器两端反复进行这样的过程直至连接中断(见文章“四次握手终止连接”)。每一个TCP包头都在满足对方的需求同时希望对方会满足自己的需求...

参考:
《TCP/IP详解》 P172、P175.