* 交互数据流一般用于诸如远程登录程序等客户端的输入与服务器端输入与命令解析的回显等。如rlogin,telnet等,现在远程登录一般都用ssh安全方式代替。
交互数据流总是以小于最大报文长度的分组发送。
* 交互数据流中一个问题就是小报文段传送的效率的问题(例如rlogin击键与远程端的回显),接收方采用时延来判断确认是否可以推迟发送,以减少报文段的数目。
* Nagle算法要求一个TCP连接上最多只能有一个未被确认的小分组,在此分组的确认到达之前收集另外的小分组等待发送。这种算法的优越之处在于其自适应性:数据分组的发送跟确认到达的时间有关。
* 局域网主机之间很少使用Nagle算法,广域网有时候也要禁用Nagle算法。
*
TCP的成块数据流通常采用滑动窗口协议进行流量控制,该协议允许发送方在停止并等待确认前可以连续发送多个分组。窗口即为TCP发送接收数据的缓冲区。
发送缓冲区中的数据发送成功后从缓冲区中删除,接收缓冲区中的数据接收确认成功递交给应用层后也在缓冲区中删除。
* 滑动窗口协议通过窗口的更新控制数据传输,窗口的更新有三种情况:
1. 窗口合拢:窗口的左端向右移动,在发送端表示窗口数据被发送,在接端则表示数据被确认;
2. 窗口张开:窗口的右端向右移动,表示接收端应用层进程读取经确认的数据从而释放缓冲区;
3. 窗口收缩:窗口的右端向左移动,RFC强烈建议不要使用这种方式。
* 若窗口左端到达右端,称其为零窗口,表示一种缓冲区的饱和状态。
TCP接收端如果窗口宽度为零,在处理完数据释放缓冲后需要再次向发送端提供当前的窗口大小信息。
* 窗口的大小影响着TCP的性能,对主机的吞吐量影响很大,服务器需要更大的窗口。
* 许多TCP实现在窗口大小增加到两个最大报文段长度或者最大可能窗口的50%的时候,会向对方发送窗口更新的ACK;
* 慢启动:发送方通过使用“拥塞窗口”实现慢启动,初始大小为1个报文段,此后每收到一个ACK,窗口大小就增加一个报文段,取拥塞窗口和对方通告窗口之间的最小值为发送上限。
* 传送通道的容量=带宽时延乘积,即带宽x时延(RTT)。为理想的稳定状态下,传送通道上报文段的大小,接收端的通告窗口必须不小于这个数目。
阅读(2563) | 评论(0) | 转发(0) |