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.

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

时间: 2024-10-12 18:31:48

TCP传输中序号与确认序号的交互的相关文章

golang中解决tcp传输中的粘包问题

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> golang中解决tcp传输中的粘包问题 - Programmer小卫 - 博客频道 - CSDN.NET Programmer小卫 故不积跬步,无以至千里.不积小流,无以成江海. 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书

SEQ序号于ACK序号理解总结(一)

Seq:就是我们常说的序号.对于要发送的数据的第一个序号而言这个序号是通过一个算法计算得到一个初始序号(ISN)加1.至于ISN怎么计算而来这里不讨论.这里我们以wireshark序号为准.假设某时序号为1000,简单的理解就是发送方告诉接收端"我发送的数据是从第1000开始的". ACK序号:就是我们常说的确认序号.确认序号是上一次已经成功接收到数据字节序号加1.还可以理解为接收端告诉发送端下一次想接收开始序号.假设某时确认序号为1000,简单的理解就是接收方告诉发送方"我

SEQ序号与ACK序号理解总结(一)

Seq:就是我们常说的序号.对于要发送的数据的第一个序号而言这个序号是通过一个算法计算得到一个初始序号(ISN)加1.至于ISN怎么计算而来这里不讨论.这里我们以wireshark序号为准.假设某时序号为1000,简单的理解就是发送方告诉接收端"我发送的数据是从第1000开始的". ACK序号:就是我们常说的确认序号.确认序号是上一次已经成功接收到数据字节序号加1.还可以理解为接收端告诉发送端下一次想接收开始序号.假设某时确认序号为1000,简单的理解就是接收方告诉发送方"我

转 TCP中的序号和确认号

在网络分析中,读懂TCP序列号和确认号在的变化趋势,可以帮助我们学习TCP协议以及排查通讯故障,如通过查看序列号和确认号可以确定数据传输是否乱 序.但我在查阅了当前很多资料后发现,它们大多只简单介绍了TCP通讯的过程,并没有对序列号和确认号进行详细介绍,结合实例的讲解就更没有了.近段时间 由于工作的原因,需要对TCP的序列号和确认号进行深入学习,下面便是我学习后的一些知识点总结,希望对TCP序列号和确认号感兴趣的朋友有一定帮助. [b]1.  序列号和确认号的简介及作用[/b] TCP协议工作在

传输层的端口与TCP标志中的URG和PSH位

一.协议端口号的提出 运输层提供了进程间通信的能力(即端-端通信).但是不同的操作系统可能无法识别其他机器上的进程.为了用统一的方法对 TCP/IP体系的应用进程进行标志,使运行不同操作系统的计算机的应用进程能够互相通信,提出在运输层使用协议端口号(protocolport number)的方法,或通常简称为端口(port).它是协议栈各层之间的抽象软件端口,是应用层各种协议进程与运输实体进行层间交互的地址.下图为端口在进程间通信的作用图: 运输层对每个端口都赋予一个16位(二进制)的端口号.这

TCP传输协议中如何解决丢包问题

TCP在不可靠的网络上实现可靠的传输,必然会有丢包.TCP是一个"流"协议,一个详细的包将会被TCP拆分为好几个包上传,也是将会把小的封裝成大的上传,这就是说TCP粘包和拆包难题. 但是许多人有不同的理解.TCP协议本身确保传输的数据不会丢失完整性.如果在传输过程中发现数据丢失或数据包丢失,最大的可能性是在发送或接收程序的过程中出现问题. 例如,服务器向客户端发送大量数据,并且发送频率非常高,因此发送链接中很可能会出现错误(1.程序处理逻辑错误:2.多线程同步问题:3.缓冲区溢出等)如

现实项目中用户随意添加序号,如何用SQL解决序号连续性问题

前段时间,一直忙于学习golang语言,没有时间整理项目中用到的方法,今天趁着有空写下笔记. 项目中,遇到一个比较"刁钻"的需求:用户用Excel导入到系统里,每一行前面都有一个序号,序号分成两部分,如下所示: 左边部分是大序号,右边是小序号,类似于书籍目录那样,序号是由用户自己编写,而且用户可以随意在Excel序号插入任何新序号,用户不保证新增或者编辑的序号是否正确,我们要做的是检查这些序号. 以下是我的检查思路: 1.序号是否连续 我们要事先给用户做一个限制,在大序号后面添加小序号

TCP传输协议

1.TCP中一些名词解释 (1)MSS(maximum segment size) TCP的最大报文段大小,在TCP报文段中有一个16位的部分用于放置该值,因此最大为65535,可以利用setsockopt() 和getsockopt设置和获取TCP_MAXSEG来影响MSS: (2)MSL(maximum segment lifetime) IP报文段能在网络中存在的最长时间,这个是系统级的参数,没有接口修改,windows上可以通过注册表修改,通常为2分钟,最低为30秒,linux上面没法修

TCP协议中的标志位

TCP/IP协议通常放在一起来说,但是它们是两个不同的协议,所起的作用也不一样. IP协议是用来查找地址的,对应于网际互联层. TCP协议是用来规范传输规则的,对应着传输层. IP协议只负责找到地址,具体传输的工作交给TCP来完成. TCP在传输之前会进行三次沟通,一般称为“三握手”:传输数据断开的时候需要进行四次沟通,一般称为“四挥手”. 要理解这个过程首先需要理解TCP中的两个序号和三个标志位的含义: seq:sequence number的缩写,表示所传数据的序号.TCP传输时每一个字节都