Transmission Control Protocol, TCP 传输控制协议( 七 )


SRTT = ( ALPHA * SRTT )((1-ALPHA) * RTT)
通过上面的式子,可以得到重传超时(RTO):
RTO = min[UBOUND,max[LBOUND,(BETA*SRTT)]]
其中UBOUND是超时的上界(如1分钟),LBOUND是超时的下界(如1秒钟),ALPHA是平滑因子(如0.8到0.9),BETA是延时变量(如1.3到2.0) 。
传送紧急消息
TCP的紧急机制是答应发送者使接收者接收一些紧急消息,并让接收方在接收到这一消息后马上通知用户 。这种机制是在数据流是加入一个点,指出这是紧急数据的结束点,当接收方要接收到这个点之前,它会通知用户进入紧急状态,在接收到这个点的数据后,它会通知用户进入通常状态 。假如这个紧急点在用户进入紧急状态时更新,这个更新必须对用户透明 。
应用一个紧急域的方法可以达到上述目的,而URG控制标记则指明紧急域是否被使用,而且在数据段中必须加入指示紧急点的序列号,假如没有这个标记则说明没有紧急点 。假如需要发送紧急数据,发送方必须起码发送一个字节 。
治理窗口
假如我们学习过网络基础,我们一定知道有一个窗口协议,TCP中每个数据段都包括下一个希望接收到的序列号 。窗口比较大会提高传送速度,假如传送过来的数据超过的窗口大小,数据会被抛弃 。这样会加重网络负担 。假如TCP开始时的接收窗口比较大,而到最后这个窗口缩小了,这种作法可不是好办法 。对于健壮的TCP来说,最好不要自己缩小窗口,但要做要预备对方的TCP缩小窗口 。
即使发送窗口大小为零,发送TCP也必须做好预备接收数据并且可以发送至少一位新数据 。即使接收窗口为零,发送方也会重发,重发间的间隔时间一般为两分钟 。当接收TCP的接收窗口为零时,在它接收到数据时,它依然会返回确认,其中包括希望收到的序列码和当前窗口大小(为零) 。
发送TCP将数据打成符合当前大小的包,但在重新传送队列中可能重新打包 。这种重新打包并不是必须的,但是会很有好处 。假如一个连接只有单向数据流,窗口信息可以在确认信息中得到,这些的序列号都是一个,因此没法区别出谁先谁后 。但这并不是一个严重的问题 。改进的方法是在数据段中加入最新的期待序列号,这样就可以区别出谁先谁后了 。窗口治理对传送效率有很大影响,下面是一些建议:
当使用更少的大数据而要获得高效率时分配非常小的窗口使数据以许多小段传送 。对于发送者来说要避免在发送小数据段时必须等到窗口大到一定程度再进行 。确认不要被延时 。接收窗口假如大小为零时,要传送的数据段可能被分成越来越小的段 。假如发送TCP仅仅发送窗口答应大小的数据段,可能这些数据段会被换成比这个段大(或者小)的数据段发送 。接收方时不时地进行窗口大小调整会使大数据段分为小段,而不成对 。尽量把小的窗口合成大的窗口 。
3.8. 接口
网络协议的分层结构决定了TCP有两个接口,向上的用户接口和下面的接口 。对下层接收口的描述不是很清楚,这个工作由下层协议来描述,但是这里我们也描述一些TCP要使用要的参数 。
用户/TCP接口
下面描述一些TCP命令,这些命令是功能性的,因各系统不同具体实现可能不同 。最后,我们必须清楚,不同的TCP实现可能有不同的用户接口,但是有一些功能是最基本的,本节描述的功能便是这个基本功能集 。
TCP用户命令
下面定义的命令与其它高级语言中定义的方法差不多,但有些陷井操作需要的,如SVC,UUO,EMT 。下面只是一个功能介绍,具体实现可能大为不同,如有些系统会把这里的多条命令结合成一条命令使用 。为了实现通信功能,TCP不能只会接收命令,而且能够返回消息给它服务的进程,这些消息包括:

推荐阅读