Sliding Window 滑动窗口协议

TCP协议:首先,TCP建立连接之后,通信双方都同时可以进行数据的传输,其次,它是全双工的;在保证可靠性上,采用超时重传和捎带确认机制。 

流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。 
拥塞控制上,采用广受好评的TCP拥塞控制算法(也称AIMD算法),该算法主要包括三个主要部分:1,加性增、乘性减;2,慢启动;3,对超时事件做出反应。


一 、TCP头结构



TCP头结构
   TCP协议头最少20个字节,包括以下的区域:
   TCP源端口(Source Port):16位的源端口其中包含初始化通信的端口。源端口和源IP地址的作用是标示报问的返回地址。
   TCP目的端口(Destination port):16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。
   TCP序列号(序列码,Sequence Number):32位的序列号由接收端计算机使用,重新分段的报文成最初形式。当SYN出现,序列码实际上是初始序列码(ISN),而第一个数据字节是ISN+1。这个序列号(序列码)是可以补偿传输中的不一致。
   TCP应答号(Acknowledgment   Number):32位的序列号由接收端计算机使用,重组分段的报文成最初形式。,如果设置了ACK控制位,这个值表示一个准备接收的包的序列码。
   数据偏移量(HLEN):4位包括TCP头大小,指示何处数据开始。
   保留(Reserved):6位值域,这些位必须是0。为了将来定义新的用途所保留。
   标志(Code Bits):6位标志:SYN(synchronous建立联机), ACK(acknowledgement确认),PSH(push传送),FIN(finish结束), RST(reset重置),URG(urgent紧急)

   窗口(Window):16位,用来表示想收到的每个TCP数据段的大小。
   校验位(Checksum):16位TCP头。源机器基于数据内容计算一个数值,收信息机要与源机器数值 结果完全一样,从而证明数据的有效性。
   优先指针(紧急,Urgent  Pointer):16位,指向后面是优先数据的字节,在URG标志设置了时才有效。如果URG标志没有被设置,紧急域作为填充。加快处理标示为紧急的数据段。
   选项(Option):长度不定,但长度必须以字节。如果 没有 选项就表示这个一字节的域等于0。
   填充:不定长,填充的内容必须为0,它是为了数学目的而存在。目的是确保空间的可预测性。保证包头的结合和数据的开始处偏移量能够被32整除,一般额外的零以保证TCP头是32位的整数倍。



 

二、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状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据.



三、TCP滑动窗口


原理概述:
发送方和接受方都维持了一个窗口,窗口内部包含了那些可以接受的序列号。
发送方的窗口大小从0开始,以后可以增大到某一个预设的最大值。由于发送方可能在将来的某个时刻重传未被确认的帧,所以它必须把已经送出去的帧保留一段时间,直到他知道接受方已经接受了这些帧。当第n帧的确认到来时,第n-1,第n-2等也都被自动地确认了。
接受方的窗口总是固定大小的。接受方为其窗口内的每一个序列号保留了一个缓冲区。与每个缓冲区相连关联的还有一位,用来指明该缓冲区是满的还是空的。任何时候当一帧到达时,接受方通过between函数检查它的序列号,看是否落在窗口内。如果确实落在窗口内,并且以前还没有收到这一帧,则接受该帧,并且保存起来。

 

滑动窗口协议(Sliding Window Protocol)工作原理:
w发送的信息帧都有一个序号,从0到某个最大值,0 ~ 2n - 1,一般用n个二进制位表示。
w发送端始终保持一个已发送但尚未确认的帧的序号表,称为发送窗口发送窗口的上界表示要发送的下一个帧的序号,下界表示未得到确认的帧的最小编号。发送窗口 = 上界 — 下界,大小可变。
w发送端每发送一个帧,序号取上界值,上界加1;每接收到一个正确响应帧,下界加1。
w接收端有一个接收窗口,大小固定,但不一定与发送窗口相同。接收窗口的上界表示允许接收的序号最大的帧,下界表示希望接收的帧。
w接收窗口表示允许接收的信息帧,落在窗口外的帧均被丢弃。序号等于下界的帧被正确接收,并产生一个响应帧,下界加1。接收窗口大小不变。


滑动窗口机制 

    滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。下面举一个例子(假设发送窗口尺寸为2,接收窗口尺寸为1):

分析:①初始态,发送方没有帧发出,发送窗口前后沿相重合。接收方0号窗口打开,等待接收0号帧;②发送方打开0号窗口,表示已发出0帧但尚确认返回信息。此时接收窗口状态不变;③发送方打开0、1号窗口,表示0、1号帧均在等待确认之列。至此,发送方打开的窗口数已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧。接收窗口此时状态仍未变;④接收方已收到0号帧,0号窗口关闭,1号窗口打开,表示准备接收1号帧。此时发送窗口状态不变;⑤发送方收到接收方发来的0号帧确认返回信息,关闭0号窗口,表示从重发表中删除0号帧。此时接收窗口状态仍不变;⑥发送方继续发送2号帧,2号窗口打开,表示2号帧也纳入待确认之列。至此,发送方打开的窗口又已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧,此时接收窗口状态仍不变;⑦接收方已收到1号帧,1号窗口关闭,2号窗口打开,表示准备接收2号帧。此时发送窗口状态不变;⑧发送方收到接收方发来的1号帧收毕的确认信息,关闭1号窗口,表示从重发表中删除1号帧。此时接收窗口状态仍不变。

 

若从滑动窗口的观点来统一看待1比特滑动窗口、后退n及选择重传三种协议,它们的差别仅在于各自窗口尺寸的大小不同而已。

1比特滑动窗口协议:发送窗口=1,接收窗口=1;

后退n协议:发窗口>1,接收窗口=1;

选择重传协议:发送窗口>1,接收窗口>1。


参考文献:
http://blog.csdn.net/yujun00/article/details/636495
http://www.cnblogs.com/hnrainll/archive/2011/10/14/2212415.html
http://blog.csdn.net/dog250/article/details/6612496#

动画展示:
http://www.osischool.com/protocol/Tcp/slidingWindow/index.php

你可能感兴趣的:(tcp,服务器,算法,工作)