RFC-896协议
896协议主要描述了与TCP传输性能相关的短数据报(小包)、源抑制两个问题以及解决办法。
1.短数据报问题:
当链路情况较好,负载较小时,链路基本不会存拥塞、丢包问题;
当链路比较忙碌,负载较大,处于拥塞边缘时,此时若加入大量的短数据包,即只包含1个字节或少于TCP/IP协议头长度的报文时,会造成链路拥塞,致使中间路由交换节点缓存耗尽,导致丢包,会造成发送端重传大量报文,而重传的报文更加会加重链路的拥塞。
- 为什么小包数据对链路影响较大?
本来链路就处于拥塞边缘,此时应该减小传输数据包个数,然而在执行telnet等交互性操作时,大量增加了数据包个数,并且这些交互性报文实际有效长度占比并不高;当TCP用来传输来自键盘的单字符信息时,结果为了传输一个字节的有用数据传输了41个字节的数据报(1个字节的数据,40个字节的头文件),造成冗余4000%。
- 解决办法:
- 方法一:发送报文前等待定时器t的时长,尽量在定时器超时前多到达几个报文,同时发送,提高利用率,然而定时器时间无法准确设置,并且随着带宽不同时长亦不同;
- 方法二:数据不立即发送,而是等待对端传输过来一个确认报文,来改变当前连接的状态之后进行传输;改变连接状态的方式有:
(1)通过确认报文确定上一个数据包已经成功接收;
(2)通过确认报文获取接收端已经有足够缓存来接收数据(更新窗口);
因此在每次传输前先检查连接状态,之后进行发送,可以最大的确保不引起丢包或重传;
2.源抑制-带ICMP的拥塞控制问题:
- 什么是源抑制?
在检测到拥塞或者中间节点缓存不足时,发送ICMP报文来避免拥塞的方法,从而使发送端减少数据量发送的方法。
- 源抑制报文发送时间:当中间路由节点缓存不足、或丢包时,当前节点发送ICMP报文来通知发送端进行拥塞避免。
- 收到源抑制报文后操作:当ICMP一旦收到源抑制报文,通知上层协议进行处理。TCP是将当前窗口默认为0,停止数据处理,直到收到一定数量的ACK为止,表示接收端或中间路由节点已有足够缓存,可再次恢复数据发送。
由于源抑制不能禁止ACK和重传的发送,因此抑制确认信息往往产生重传和不必要的传输。抑制重传可能因重传超时而使连接丢失。
- 解决办法:
保证在每种情况下,对新发送的数据量进行控制,但对于ACK则正常执行。从而保持连接keep Alive,但减小了带宽。