目前建立在 TCP 协议上的网络协议特别多,有 telnet,ssh,有 ftp,有 http 等等。
这些协议又可以根据数据吞吐量来大致分成两大类:
交互数据类型:例如 telnet,ssh,这种类型的协议在大多数情况下只是做小流量的数据交换,比如说按一下键盘,回显一些文 字等等。
数据 成块类型:例如 ftp,这种类型的协议要求 TCP 能尽量的运载数据,把数据的吞吐量做到最大,并尽可能的提高效率。
针对这两种情况,TCP 给出了两种不同的策略来进行数据传输。
TCP 的交互数据流
对于交互性要求比较高的应用,TCP 给出两个策略来提高发送效率和减低网络负担:
捎带 ACK。
Nagle 算法(一次尽量多 的发数据)。
通常,在网络速度很快的情况下,比如用 lo 接口进行 telnet 通信,当按下字母键并要求回显的时候,客户端和服务器将经 历 发送按键数据->服务器发送按键数据的 ack -> 服务器端发送回显数据->客户端发送回显数据的 ACK 的过程,而其中的数据流量将 是40bit + 41bit+41bit+40bit = 162bit,如果在广域网里面,这种小分组的 TCP 流量将会造成很大的网络负担。
捎带 ACK 的发送方式
这个策略是说,当主机收到远程主机的 TCP 数据报之后,通常不