目录程序员
本文主要目的虽然是为了计网考试而准备的,可是以后会继续更新修改,并且UDP/TCP对咱们游戏程序员算是计算机网络基础知识最重要的一块,
因此颇有必要记录一下笔记。web
主要内容就是发送方发一分组数据包给接收方,并等待接收方的确认,收到确认包后,继续按顺序发送下一分组数据包给接收方...以此保证发送数据包的顺序。算法
可是发送数据包可能遇到以下两种出错状况:缓存
以上这些出错状况,B都不会发送任何信息来通知A。
而是让A设置一个超时计时器,只要超过了一段时间仍然没有收到确认,就认为刚才发送的分组丢失了,因此A会重传刚刚的发送过的分组,也就是所谓的超时重传。网络
上面简单使用中止等待ARQ协议的话,信道利用率会很是的低。tcp
连续ARQ协议是指发送方采用流水线传输分组:
发送方能够连续发送多个分组,没必要每发完一个分组就停下来等待对方确认。这样能够极大增大信道利用率。计算机网络
滑动窗口协议是指发送方须要维持一个发送窗口,一般是结合来连续ARQ协议使用的:
位于发送窗口内的全部分组均可以连续发送出去,而不须要等待对方的确认, 发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。3d
例以下图,当发送方收到第一个分组的确认,就把发送窗口向前移动一个分组的位置。若是原来已经发送了前5个分组,则如今能够发送窗口内的第6个分组。blog
接收方通常都是采用累积确认的方式:
也就是说接收方没必要对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认。若是发送方收到了这个分组确认信息,则表示到这个分组为止的全部分组都已经正确接收到了。游戏
但累计确认的缺点是不能正确的向发送方反映出接收方已经正确收到的因此分组的信息。
例如发送方发送了前5个分组,而中间的第3个分组丢失了。这时候接收方只能对前2个发出确认,而不知道后面3个分组的下落,所以只能把后面的3个分组都重传一次。
当主机开始发送数据时,由于还不清楚网络负荷的状况,若是当即把大量的数据字节注入网络,那么就有可能引发网络拥塞。
慢开始算法:由小到大的逐渐增大发送窗口,也就是说从小到大增大拥塞窗口数值。
在慢开始时,将这个拥塞设置为最大报文段MSS的数值,每收到一个对新的报文段的确认后,拥塞窗口的值就加1。以下图所示:
这里咱们首先将拥塞窗口cwnd置为1,发送完一个报文段M1,并且收到接收方发来的确认时,将cwnd增大到2,而后发送M2,M3,再次接收到确认后,将cwnd增长到4。所以,每通过一个传输轮次,拥塞窗口就加倍。
拥塞避免算法:让cwnd缓慢得增大,即每通过一个RTT往返时间就把发送方的拥塞窗口cwnd加1,而不是加倍。这样,拥塞窗口cwnd按线性规律缓慢增加,比慢开始增加速率慢的多。
为了防止拥塞窗口增加过大引发网络阻塞,拥塞控制机制还设置了一个慢开始门限 ssthresh
不管在哪一个阶段,只要发送方判断网络中出现拥塞(没有按时收到确认),就要把慢开始门限ssthresh置为出现拥塞时发送窗口的一半,而后将cwnd置1,从新执行慢开始算法。
这样作就可使发生拥塞的路由器把缓存中积压的分组处理完毕
举个例子,如图
一、在开始的时候将拥塞窗口置为1,慢开始门限的初始值ssthresh设置为16。
二、在执行慢开始算法时,拥塞窗口cwnd随着传输轮次按指数增加,超过慢开始门限值时(cwnd=16),开始执行拥塞避免算法,拥塞窗口按照线性规律增加。
三、假设拥塞窗口增加到24时,网路出现超时,极可能拥塞,因此慢开始门限值变为原来的一半(12),拥塞窗口置为1,并执行慢开始算法,当拥塞窗口再次达到门限值时,改成拥塞避免算法。
TCP运输链接有三个阶段:链接创建,数据传送,链接释放。
TCP在链接创建过程当中要解决三个问题:
如下是创建链接的三次握手过程(以A主动链接为例):
通讯的双方均可主动释放链接。
如下是释放链接的四次挥手过程(以A主动释放为例):
这里就顺便提一些关于我所知道有关网络多人游戏的经验: