1.传输时的ACK问题
使用TCP窗口协议时,接收方不必确认每一个收到的分组。在TCP中,ACK是累积的---它们表示接收方已经正确接收到了一直到确认序号减一的所有字节
2.滑动窗口
滑动窗口实际上是描述接收方TCP缓冲区大小的数据,发送方根据这个计算自己可以发送的数据大小。
当接收方确认数据后,这个滑动窗口不断向右移动。窗口两个边沿的相对运动增加或减小了窗口的大小。我们使用三个术语描述窗口左右边沿的运动:
(1)窗口左边沿向右边沿靠近为窗口靠拢。这种现象发生在数据被发送和确认时。
(2)窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发生在另一端的接受进程读取已经确认的数据并释放了TCP接受缓冲区时。
(3)当右边沿向左移动时,我们称之为窗口收缩。
对于以太网而言,默认的4096字节并不是最理想的大小,将两个缓存增加到16384个字节可以增加约40%左右的吞吐量。
3.PUSH标志
发送方使用PUSH标志通知接收方将所收到的数据全部提交给接受进程。这里的数据包括与PUSH一起传送的数据以及TCP之前为接受进程接收的数据
4.慢启动
TCP支持一种称作慢启动的算法。该算法通过观察到新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作
慢启动为发送方的TCP增加了另一种窗口:拥塞窗口,记为cwnd。
当与另一端的主机建立TCP连接时,拥塞窗口被初始化为1个报文段(即另一端通告的报文段大小)。每接收到一个ACK,拥塞窗口就增加一个报文段。发送方取拥塞窗口和通告窗口的最小值作为发送上限。拥塞窗口是发送方使用的流量控制,而通告窗口是接收方使用的流量控制