tcp的一些知识点

1 nagle 算法
该算法要求一个 TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组的确认到达之前不能发送其他的小分组。相反, TCP收集这些少量的分组,并在确认到来时以一个分组的方式发出去。
可以使用TCP_NODELAY选项来关闭Nagle算法
2 慢启动
慢启动为发送方的 TCP增加了另一个窗口:拥塞窗口 (congestion window),记为cwnd。与另一个网络的主机建立 TCP连接时,拥塞窗口被初始化为 1个报文段(即另一端通告的报文段大小)。每收到一个 ACK,拥塞窗口就增加一个报文段( cwnd以字节为单位,但是慢启动以报文段大小为单位进行增加)。
3 拥塞避免
拥塞避免算法和慢启动算法需要对每个连接维持两个变量:一个拥塞窗口 c w n d和一个慢
启动门限s s t h re s h。这样得到的算法的工作过程如下:
1) 对一个给定的连接,初始化 c w n d为1个报文段, s s t h re s h为6 5 5 3 5个字节。
2) TCP输出例程的输出不能超过 c w n d和接收方通告窗口的大小。拥塞避免是发送方使用的流量控制,而通告窗口则是接收方进行的流量控制。前者是发送方感受到的网络拥塞的估计,而后者则与接收方在该连接上的可用缓存大小有关。
3) 当拥塞发生时(超时或收到重复确认),s s t h re s h被设置为当前窗口大小的一半( c w n d和接收方通告窗口大小的最小值,但最少为 2个报文段)。此外,如果是超时引起了拥塞,则c w n d被设置为1个报文段(这就是慢启动)。
4) 当新的数据被对方确认时,就增加 c w n d,但增加的方法依赖于我们是否正在进行慢启动或拥塞避免。如果 c w n d小于或等于 s s t h re s h,则正在进行慢启动,否则正在进行拥塞避免。慢启动一直持续到我们回到当拥塞发生时所处位置的半时候才停止(因为我们记录了在步骤 2中给我们制造麻烦的窗口大小的一半),然后转为执行拥塞避免。
4 定时器
对每个连接,T C P管理4个不同的定时器。
1) 重传定时器使用于当希望收到另一端的确认。
2) 坚持( p e r s i s t )定时器使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口。
如果对方接受窗口已经满了,这样发送发就不能继续发送。如果一个确认丢失了,则双方就有可能因为等待对方而使连接终止:接收方等待接收数据(因为它已经向 发送方通告了一个非 0的窗口),而发送方在等待允许它继续发送数据的窗口更新。为防止这种死锁情况的发生,发送方使用一个坚持定时器 (persist timer)来周期性地向接收方查询,以便发现窗口是否已增大。
3) 保活( k e e p a l i v e )定时器可检测到一个空闲连接的另一端何时崩溃或重启。
4) 2MSL定时器测量一个连接处于 T I M E _ WA I T状态的时间。
5 快速重传
在收到一个失序的报文段时, T C P立即需要产生一个 A C K(一个重复的 A C K)。这个重复的 A C K不应该被迟延。该重复的 A C K的目的在于让对方知道收到一个失序的报文段,并告诉对方自己希望收到的序号。
6 糊涂窗口综合症
tcp接受方缓冲已经满了,每次只能读取一个字节,这样读取一个字节,通知发送方发送一个字节。造成网络性能很差。

posted @ 2014-03-10 09:57  buzz-lightyear  阅读(115)  评论(0编辑  收藏  举报