找回密码
 立即注册
数据确认连接序列号 | 家庭/个人应用 2022-08-25 59 0star收藏 版权: . 保留作者信息 . 禁止商业使用 . 禁止修改作品
1.序列号和确认号的简介及作用
TCP协议办公在OSI的传输层,是一种可靠的面向连接的数据流协议,TCP之所以可靠,是因为它保证了传送数据包的顺序。顺序是用一个序列号来保证的。响应包内也包括一个序列号,表示接收方准备好这个序列号的包。在TCP传送一个数据包时,它会把这个数据包放入重发队列中,同时启动计时器,如果收到了关于这个包的确认信息,便将此数据包从队列中删除,如果在计时器超时的时候仍然没有收到确认信息,则需要重新发送该数据包。另外,TCP通过数据分段中的序列号来保证所有传输的数据可以按照正常的顺序进行重组,从而保障数据传输的完整。
2.TCP的通讯过程
在TCP通讯中主要有连接的搭建、数据的传输、连接的关闭三个过程!每个过程实现不同的办公,而且序列号和确认号在每个过程中的变化都是不同的。
2.1TCP搭建连接
TCP搭建连接,也就是大家常说的三次握手,它需要三步实现。在TCP的三次握手中,发送第一个SYN的一端执行的是自动打开。而接收这个SYN并发回下一个SYN的另一端执行的是被动打开。
这里以客户端向服务器发起连接来说明。
1)第1步:客户端向服务器发送一个同步数据包请求搭建连接,该数据包中,初始序列号(ISN)是客户端随机产生的一个值,确认号是0;
2)第2步:服务器收到这个同步请求数据包后,会对客户端进行一个同步确认。这个数据包中,序列号(ISN)是服务器随机产生的一个值,确认号是客户端的初始序列号+1;
3)第3步:客户端收到这个同步确认数据包后,再对服务器进行一个确认。该数据包中,序列号是上一个同步请求数据包中的确认号值,确认号是服务器的初始序列号+1。
注意:因为一个SYN将占用一个序号,所以要加1。
初始序列号(ISN)随时间而变化的,而且不同的操作系统也会有不同的实现方式,所以每个连接的初始序列号是不同的。TCP连接两端会在搭建连接时,交互一些信息,如窗口大小、MSS等,以便为接着的数据传输做准备。
RFC793指出ISN可以看作是一个32bit的计数器,每4ms加1,这样选择序号的目的在于预防在网络中被延迟的分组在以后被重复传输,而导致某个连接的一端对它作错误的判断。
2.2TCP传输数据
在TCP搭建连接后,就可以开始传输数据了。TCP办公在全双工模式,它可以同时进行双向数据传输。这里为了简化,大家只谈服务器向客户端发送数据的状况,而客户端向服务器发送数据的原理和它是类似的,这里便不重复说明。
服务器向客户端发送一个数据包后,客户端收到这个数据包后,会向服务器发送一个确认数据包。
传输数据的简要过程如下:
1)发送数据:服务器向客户端发送一个带有数据的数据包,该数据包中的序列号和确认号与搭建连接第三步的数据包中的序列号和确认号相同;
2)确认收到:客户端收到该数据包,向服务器发送一个确认数据包,该数据包中,序列号是为上一个数据包中的确认号值,而确认号为服务器发送的上一个数据包中的序列号+所该数据包中所带数据的大小。
数据分段中的序列号可以保证所有传输的数据按照正常的次序进行重组,而且通过确认保证数据传输的完整性。
2.3TCP关闭连接
前面大家提到,搭建一个连接需要3个步骤,但是关闭一个连接需要通过4个步骤。因为TCP连接是全双工的办公模式,所以每个方向上需要单独关闭。在TCP关闭连接时,首先关闭的一方(即发送第一个终止数据包的)将执行自动关闭,而另一方(收到这个终止数据包的)再执行被动关闭。
关闭连接的4个步骤如下:
1)第1步:服务器实现它的数据发送任务后,会自动向客户端发送一个终止数据包,以关闭在这个方向上的TCP连接。该数据包中,序列号为客户端发送的上一个数据包中的确认号值,而确认号为服务器发送的上一个数据包中的序列号+该数据包所带的数据的大小;
2)第2步:客户端收到服务器发送的终止数据包后,将对服务器发送确认信息,以关闭该方向上的TCP连接。这时的数据包中,序列号为第1步中的确认号值,而确认号为第1步的数据包中的序列号+1;
3)第3步:同理,客户端实现它的数据发送任务后,就也会向服务器发送一个终止数据包,以关闭在这个方向上的TCP连接,该数据包中,序列号为服务器发送的上一个数据包中的确认号值,而确认号为客户端发送的上一个数据包中的序列号+该数据包所带数据的大小;
4)第4步:服务器收到客户端发送的终止数据包后,将对客户端发送确认信息,以关闭该方向上的TCP连接。这时在数据包中,序列号为第3步中的确认号值,而确认号为第3步数据包中的序列号+1;
注意:因为FIN和SYN一样,也要占一个序号。理论上服务器在TCP连接关闭时发送的终止数据包中,只有终止位是置1,然后客户端进行确认。但是在实际的TCP实现中,在终止数据包中,确认位和终止位是同时置为1的,确认位置为1表示对最后一次传输的数据进行确认,终止位置为1表示关闭该方向的TCP连接。
三次握手
TCP握手协议在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手搭建一个连接。第一次握手:搭建连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,实现三次握手。实现三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。Backlog参数:表示未连接队列的最大容纳数目。SYN-ACK重传次数
服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时大家也称半连接存活时间为Timeout时间、SYN_RECV存活时间。
SYN:同步标志同步序列编号(SynchronizeSequenceNumbers)栏有效。该标志仅在三次握手搭建TCP连接时有效。它提示TCP连接的服务端查看序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都通过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。
ACK:确认标志确认编号(AcknowledgementNumber)栏有效。大多数状况下该标志位是置位的。TCP报头内的确认编号栏内包括的确认编号(w+1,Figure-1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。
RST:复位标志复位标志有效。用于复位相应的TCP连接。
URG:紧急标志紧急(Theurgentpointer)标志有效。紧急标志置

[下载]16451631389.rar




上一篇:光尾纤各种符号说明
下一篇:xx校园网主干网络及配置