现在的位置: 首页 > 综合 > 正文

TCP协议——SYN/ACK的使用以及滑动窗口机制

2019年01月03日 ⁄ 综合 ⁄ 共 1560字 ⁄ 字号 评论关闭

TCP协议是传输层协议,提供的是一种面向连接的可靠服务,在学习该协议过程中,有点模糊的概念主要是SYN/ACK的通信过程中的变化以及滑动窗口机制,在这里说一下自己的理解

1:SYN/ACK:即序列号与确认号,允许连接的双方在发送数据时,同时对对方的数据段进行确认

1) SYN:数据包都是按字节编号,如果前一个数据包的序列号是0而该数据段的数据区携带了100B,则下一个数据包的序列号应该是100;初始序列号必须是随机产生的,这个值在建立连接的过程中指定

注意:下一个数据包指的是本机下一次向对方发送的数据包,并不包括对方回复的数据包

2) ACK:确认收到的数据段的序列号,表示它准备接受的下一个数据包的序列号

举一个例子: Client与Server通信

三次握手建立连接

1) Client发起连接,初始序列号假设为x,则SEQ=X+0,此时ACK并不置位

2) Server进行回复,ACK位置1,且ACK=X+1(表明下一个要接收的数据包的序列号),同时发送自己的初始序列号Y

3) Client进行确认,ACK位置1,且ACK=Y+1(表明下一个要接收的数据包的序列号),同时自己的序列号为SEQ=X+1;由于这里TCP数据包并没有长度,所以下一次发送的数据包SEQ仍然为X+1

接下来Client给Server发送数据包

4) 假设数据包长度为256,则SEQ=X+1,ACK=Y+1,且data length=256

5) Server进行回复,SEQ=Y+1,ACK=X+257(表明下一个要接收的数据包的序列号)

2:滑动窗口机制:简单的确认重发机制(发送方发出一个数据后就停下来等待对方的确认)效率低下——让发送方可以连续发送多个数据,然后等待接收方的确认

1) TCP数据根据状态划分为三种类型:已发送、待发送以及发送中

2) 窗口的大小决定了数据传输的效率,需要根据网络实时情况来决定其大小

——TCP的滑动窗口机制:基本的数据单位不是数据段,而是字节;每个窗口用三个指针表示,第一个指向窗口的第一个字节,第二个指向窗口中马上要发送的字节,第三个指向窗口的最后一个字节。

1) 累积确认:接收方对某个编号进行确认,该编号之前的数据必须都已接收到了,从而有时候前面窗口的数据没有接受到,就必须暂存数据,并在接收到前面的其他数据后进行累积确认

a) 优点:允许发送方在对数据进行重发时发送更多的数据,无需对丢失的确认进行重发;为确认数据段也会丢失,但只要下一个确认能够到达对方就无需对前一个确认进行重发

b) 缺点:若第一个窗口的数据丢失,则收到的确认好一直都是关于之前数据的确认,得不到关于新发送的数据包的确认;从而无法确定从该窗口开始的数据包哪些成功发送,哪些丢失了

2) 发送方窗口不能大于接收方窗口,凡是ACK 置为1 的数据段都应该将自己接收窗口的当前大小填入TCP数据段头部的窗口字段中,通知给发送方

3) 拥塞控制机制:慢启动和成倍减少;TCP 协议实际发送窗口的大小应该是拥塞窗口接收方接收窗口中小的一个

a) 成倍减少机制:当TCP 发现数据段丢失(即超时重发)时,就将拥塞窗口的大小减少一半(但其大小至少应为1 ) ,对于减小窗口后仍在发送窗口中的数据段,将其重发的超时值延长一倍。

b) 慢启动机制:在TCP 启动一个新的连接或拥塞结束后,将拥塞窗口的大小设置为一个数据段的大小,然后每收到一个确认段,TCP 就将拥塞窗口的大小增加一个数据段;在拥塞发生并恢复后,通过慢启动机制使得拥塞窗口的大小达到了拥塞之前的一半,TCP 就启动一个拥塞避免机制以减缓窗口扩大的速度

4) 傻窗口症状:极端的情况,接收方的应用程序一直没有处理接收到的数据,这样接收方的TCP 缓冲区都被接收到的数据占满,接收窗口的大小减小为0,TCP 将这个窗口大小通知给发送方TCP,这时整个数据传输就停下来了

抱歉!评论已关闭.