TCP-IP详解笔记8
TCP超时与重传
- 下层网络层(IP)可能出现丢失, 重复或丢失包的情况, TCP协议提供了可靠的数据传输服务.
- TCP启动重传操作, 重传尚未确定的数据.
- 基于时间重传.
- 基于确认信息. --- 比较高效.
- TCP在发送数据时会设置一个计时器, 若计时器超时仍未收到数据确认信息, 则会引起相应的超时或基于计时器的重传操作, 计时器超时称为重传超时(RTO).
- 经典方法:
- 平滑的RTT估计值. (加权移动平均, 低通滤波器)
- RTO超时重传时间.
- 快速重传机制基于接收端的反馈信息来引发重传, 而非重传计时器的超时.
- TCP接收端可提供SACK功能, 通过TCP头部积累的ACK号字段来描述其接收到的数据.
TCP数据流与窗口管理
- TCP的动态数据传输, 交互连接, 流量控制, 窗口管理.
- 流量控制通过动态调节窗口大小来控制发送端的操作, 确保接收端不会溢出.
- 延迟确认可以允许TCP延迟一段时间发送ACK, 以便将ACK和相同方向上需要传输的数据结合发送.
- 可以减少ACK传输数目, 可以一定程度地减轻网络负载.
- Nagle算法:
- 当一个TCP连接中有在传输数据, 小的报文段就不能被发送, 直到所有的在传输数据都被ACK.
- 采用滑动窗口来实现流量控制.
- 每个TCP活动连接的两端都维护一个发送窗口结构(send window)和接收窗口结构(receive window structure).
- TCP是通过接收端的通告窗口来实现流量控制的, 通告窗口指示了接收端可接收的数据量. 接收端会传输一个窗口更需你(window update).
TCP 拥塞控制
- TCP拥塞控制是批量数据中最重要的. 防止网络因为大规模的数据通信而瘫痪.
- 路由去因无法处理高速率到达的流量而*丢弃数据信息的现象称为拥塞.
- 没有一个精准的方法知晓中间路由器的状态.
- 在TCP中丢包被用作判断是否拥塞的一个指标, 用来衡量是否实施相应的响应措施.
- 减缓TCP发送, 慢启动.
- 当一个新的TCP连接建立或检测到由重传超时(RTO)导致的丢包时, 需要执行慢启动.
- TCP发送端长时间处于空闲状态也可能调用慢启动算法.
- 拥塞避免:
- TCP实现了拥塞避免算法, 一旦确定慢启动阈值, TCP会进入拥塞避免阶段, cwnd每次的增长值近似于成功传输的数据段大小.
- 拥塞避免算法假设由比特错误导致包丢失的概率很小(远小于1%), 因此有丢包发生就表明从源端到目的端必有某处出现了拥塞.
- TCP连接时是选择运行慢启动和拥塞避免中的一个, 不会出现两个同时出现的情况.
TCP保活机制
- 在一个空闲的TCP连接中不会有任何数据交换.
- TCP保活机制为了让客户端和服务器了解什么时候终止进程或者对方断开连接, 虽然连接没有数据交换,但仍然需要通过连接保持一个最小的数据流.
- 它是由一个保活计时器实现的, 当计时器被激发, 连接一段将发送一个报货探测(简称保活)报文, 另一端接收报文的同时会发送一个ACK作为响应.
- 保活功能一般是为服务器应用程序提供的, 服务器应用程序希望知道客户机是否崩溃或离开, 从而决定是否为客户端绑定资源.
- 当某个连接长时间(2小时)处于空闲状态, 在该连接的一端会发送一个探测数据包, 从而实现保活功能, 可能有4种情况:
- 另一端仍在工作;
- 另一端崩溃;
- 另一端已经崩溃并且已经重新启动;
- 另一端无法到达.