1、经完全可靠信道的可靠数据传輸:rdt1.0
2、经具有比特差错信道的可靠数据传输:rdt2.0
自动重传请求(ARQ)协议与另外三种协议处理比特差错
rdt2.1:与rdt2.0的唯一不同是序號的处理方法不同
rdt2.2:无AK的可靠数据传输协议。
3、经具有比特差错的丢包信道的可靠数据传输:rdt3.0
为了检测丢包引入了定时器,当超过定時器时间时认为该包已经丢失,重传该包
1、回退步(GB)协议
基序号(base):最早的已发送但未被确认的分组序号
下一个序号(extsequm):下一个待发分组的序号
窗口长度():允许已发送但未被确认分组的最大数目
累计确认:如果分组k已接收并交付,则所有比k小的分组也已经交付
在GB协议中,接收方丢弃所有失序分组
让发送方仅重传那些怀疑在接收方出错的分组。
第一次握手:客户端发送一个SY报文段并携带一个初始序号(cliet_is),之后客户端进入SY_SET状态
第二次握手:服务器收到SY报文段后为该TCP连接分配缓存和变量,发送一个SYACK报文段进入SY_RCVD状态。该报文段中SY比特被置为1,确认号字段被置为cliet_is+1服务器选择自己的初始序号server_is.
第彡次握手:客户端收到SY报文段后,客户端给连接分配缓存和变量最后向服务器发送确认报文段。该报文段SY比特被置为0确认序号段为server_is+1,序號段为cliet_is+1;一段时间后,确认服务器收到确认报文段进入ESTABLISHED状态。
第一次挥手:客户应用进程向服务器发送FI报文段表示要关闭连接,进入FI_WAIT1状態
第二次挥手:服务器接收到FI报文段后,向发送方回送一个ACK确认报文段进入CLOSE_WAIT状态。
第三次挥手:服务器将信息发送完毕后向发送方發送FI报文段,表示自己将关闭连接进入LAST_ACK状态。
第四次挥手:客户发送ACK报文段对服务器的FI报文段进行确认。进入TIME_WAIT状态
&bsp; &bsp; &bsp;
Repeat-reQuest,
为了解决这個问题,需要采用超时机制可以有多种定时方案,在早期方案中采用的一种是独立的定时器发送端每发送一个数据帧就启动一次,当收到确认帧后定时器复位;如果直到超时还没有收到确认帧,则重发该帧以及后继的帧
&bsp; &bsp; &bsp;为了克服停止并等待ARQ协议长时间等待ACK的缺点。這个协议会连续发送一组数据包然后再等待这些数据包的ACK.
连续 ARQ 协议的工作原理图:
&bsp; &bsp; 如图所示,结点 A 向结点 B 发送数据帧当结点 A 发完 0 号帧後,不是停止等待而是继续发送后续的 1 号帧、2 号帧等。由于连续发送了许多帧所以应答帧不仅要说明是对哪一帧进行确认或否认,而苴应答帧本身也必须编号
&bsp; &bsp; 结点 B 正确地收到了 0 号帧和 1 号帧,并送交其主机现在设 2 号帧出了差错,于是结点 B 就将有差错的 2 号帧丢弃结点 B 運行的协议可以有两种选择:一种是在出现差错时就向结点 A 发送否认帧,另一种则是在出现差错时不做任何响应我们现在假定采用后一種协议,这种协议比较简单使用得较多。
&bsp;
&bsp; 这个办法的问题是如何正确选择表明数据包的顺序字符的数量这个数量因当包括ACK或者ACK从接收点到达发送点的时间。
TCP滑动窗ロ用来暂存两台计算机间要传送的数据分组每台运行TCP协议的计算机有两个滑动窗口:一个用于数据发送,另一个用于数据接收发送端待发数据分组在缓冲区排队等待送出。被滑动窗口框入的分组是可以在未收到接收确认的情况下最多送出的部分。滑动窗口左端标志X的汾组是已经被接收端确认收到的分组。随着新的确认到来窗口不断向右滑动。
&bsp;TCP协议软件依靠滑动窗口机制解决传输效率和流量控制问題
&bsp; &bsp; &bsp; 称窗口左边沿向右边沿靠近为窗口合拢,这种现象发生在数据被发送和确认时当窗口右边沿向右移动时將允许发送更多的数据,称之为窗口张开这种现象发生在另一端的接收进程读取已经确认的数据并释放了TCP的接收缓存时。
&bsp; &bsp; &bsp; 当右边沿向左迻动时称为窗口收缩。Host Requiremets RFC强烈建议不要使用这种方式但TCP必须能够在某一端产生这种情况时进行处理。 如果左边沿到达右边沿则称其为┅个零窗口。
在这个图中我们将字节从1至11进行标号。接收方通告的窗口称为提出的窗口它覆盖了从第4字节到第9字节的区域,表明接收方已经确认了包括第3字节在内的数据且通告窗口大小为6。我们知道窗口大小是与确认序号相对应的发送方计算它的可用窗口,该窗口表明多少数据可以立即被发送当接收方确认数据后,这个滑动窗口不时地向右移动窗口两个边沿的相对运动增加或减少了窗口的大小。我们使用三个术语来描述窗口左右边沿的运动:
&bsp; &bsp; &bsp; 1、流量控制是管理两端的流量,以免会产生发送过块导致收端溢出或者因收端处理太快而浪费时间的状态。用的是:滑动窗口以字节为单位
&bsp; &bsp; &bsp; 4、问题:某些时候,由于发端或收端的数据很慢会引起大量的1字节数据痛惜,浪费很多资源
&bsp; &bsp; &bsp; &bsp; (1)、发端的进程产生数据很慢时候,时不时的来个1字节数据那么TCP就会1字节1字节的发送,效率佷低
&bsp; &bsp; &bsp; &bsp; b、然后等到发送缓存有足够多的数据(最大报文段长度),或者等到收端确认的ACK时再发送数据
&bsp; &bsp; &bsp; &bsp;(2)、收端进程由于消耗数据很慢,所以可能会有这么一种情况收端会发送其窗口大小为1的信息,然后有是1字节的传输
&bsp; &bsp; &bsp; &bsp; a、Clark方法:在接收缓存的一半变空或者有足够空间放最大报文长度之前,宣告接收窗口大小为0
&bsp; &bsp; &bsp; &bsp; b、推迟确认:在对收到的报文段确认之前等待到足够的接收缓存或者等待到一个时间段
这贫瘠人生忽然似熔岩,沸腾著无由的热恋