TCP 的主要作用,数据的可靠传输,以及数据丢失/乱序/延迟 的处理(是否重传,重传哪部分数据块)
TCP 的基本工作原理
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它的主要作用是在网络中实现数据的可靠传输。TCP 通过一系列机制来确保数据的完整性和顺序性,同时处理数据丢失、乱序和延迟的问题。
1. 数据的可靠传输:
- TCP 使用三次握手过程建立连接,确保双方都准备好进行数据传输。
- 通过序列号 (sequence number) 对发送的数据包进行编号,以便接收方能够根据序列号对数据进行排序和重组。
- 使用确认应答 (acknowledge) 机制,接收方在收到数据包后会向发送方发送确认消息,表示已经成功接收到该数据包。
2. 数据丢失的处理:
- 发送发主动重传:当发送方在一定时间 (RTO, Retransmission Timeout) 内没有收到接收方的确认消息时,会认为数据包丢失,然后触发重传机制。
- 重传机制:发送方会重新发送未被确认的数据包。为了提高效率,TCP 会使用“快速重传” (fast ack) 算法,即当收到三个重复的确认消息时,立即重传丢失的数据包,而不是等待超时。需要两端都支持 fast ack。
3. 数据乱序的处理:
- 接收方会根据数据包的序列号对接收到的数据进行排序,确保按照发送方的顺序进行处理。
- 如果接收方收到了一个乱序的数据包,它会暂时缓存这个数据包,直到缺失的前一个数据包到达,然后再按顺序处理这些数据包。这个过程会占用 receiver 的缓存/buffer,影响性能。
4. 数据延迟的处理:
- TCP 使用流量控制和拥塞控制机制来避免网络拥塞和数据延迟。
- 流量控制:接收方通过发送窗口大小通知发送方其可接受的数据量,从而限制发送方的发送速率。
- 拥塞控制:发送方根据网络状况动态调整发送速率,以避免网络拥塞。常见的拥塞控制算法有慢启动、拥塞避免、快重传和快恢复。
如何解决 TCP 业务数据传输速度慢
在可以测试,交叉对比的时候,就不要急着抓包分析。控制变量去做对比,缩小故障域,优先排查日志。
在解决 TCP 数据备份作业中的缓慢问题时,必须采用系统方法来识别和解决客户端、服务器、网络设备和 TCP 配置中的潜在问题。以下是帮助您缩小问题范围的综合指南:
客户端故障排除
检查资源利用率
CPU 和内存:确保客户端计算机具有足够的可用 CPU 和内存资源。高利用率会减慢备份过程。
磁盘 I/O:监视磁盘 I/O 性能。磁盘操作缓慢可能会使备份过程成为瓶颈。比如说网速足够快接收了大量数据,但是 I/O 瓶颈导致数据无法快速落盘。
网络配置
网络接口:验证网络接口卡 (NIC) 是否正常运行,并配置为最佳性能(例如,正确的速度和双工设置)。
驱动程序和固件:确保 NIC 驱动程序和固件是最新的。
MSS: TCP MSS(Maximum Segment Size,TCP 最大传输报文段的大小)是 TCP 协议中用于协商通信时每一个报文段所能承载的最大数据长度的一个选项。它确保了数据包在传输过程中的有效性和效率。TCP 太小,会导致更多的 TCP 数据包分片,分片和重组都会影响效率。
软件配置
备份客户端软件:检查备份客户端软件是否已正确配置和更新。配置错误或软件过时可能会导致性能问题。
本地防火墙和安全软件:确保本地防火墙或安全软件不会干扰备份过程。
服务器端故障排除
检查资源利用率
同上。
网络接口:
验证服务器的 NIC 配置是否正确,并且没有遇到错误或高利用率。
驱动程序和固件:确保服务器上的 NIC 驱动程序和固件是最新的。
软件配置
备份服务器软件:检查备份服务器软件的配置和更新是否正确。
服务器负载:确保服务器没有因可能影响备份作业的其他任务而过载。
网络设备故障排除
监控网络性能
带宽利用率:检查网络上的整体带宽利用率。高利用率会导致拥塞并减慢数据传输速度。
延迟和抖动:测量客户端和服务器之间的延迟和抖动。高延迟或抖动会降低 TCP 性能。可以考虑 iperf 和 MTR 工具。
数据包丢失:使用 ping,traceroute 等 ping 工具检查客户端和服务器之间路径上的数据包丢失情况。
检查网络设备
交换机和路由器:确保路径中的所有交换机和路由器都正常运行且没有过载。
接口错误:检查交换机和路由器上的接口错误(例如,CRC 错误、冲突),多次查看 show interfaces,确认相关接口的 error counter 没有增长。
硬件转发:一般来说业务流量都是由硬件转发 (hardware forwarding),控制报文(比如 OSPF protocol,BGP) 需要 CPU 软件转发处理。在一些特殊场景,如果业务流量报文带有特殊字段,交换机 TCAM 溢出,就可能将流量交给 CPU 处理。软件处理数据流量的速度要慢很多,影响效率。
服务质量 (QoS):验证 QoS 设置是否未错误地确定备份流量的优先级或降低备份流量的优先级。
TCP 级故障排除
如果上面的交叉测试和排查,没能够定位故障点,可能就需要抓 TCP 报文了。
分析 TCP 会话
数据包捕获:使用 Wireshark 或 tcpdump 等工具捕获和分析客户端和服务器之间的 TCP 流量。查找重传、无序数据包和 TCP 窗口大小等问题。
对于 tcpdump 来说,如果 client/server 是虚拟机,还要注意抓包的位置,tcpdump 通常是 OS 层面,不代表 vm kernel 层面。可以按需抓去 vm kernel 的报文。
往返时间 (RTT):检查 RTT 中的 TCP 连接。高 RTT 会降低 TCP 连接的有效吞吐量。
时间差(Delta time): 表示数据包相对于前一个数据包捕获时间的差值,即两个数据包之间的时间间隔。在 Wireshark 中,这个字段对于分析网络延迟、数据包丢失等问题非常有用。
窗口大小:确保 TCP 窗口大小针对网络条件进行了最佳配置。应为高带宽、高延迟连接启用 TCP 窗口缩放。同时要注意是否出现过零窗口 (zero Window)
TCP 性能调优
TCP 参数:调整 TCP 窗口大小、最大分段大小 (MSS) 和 TCP 缓冲区大小等 TCP 参数。这可以在客户端和服务器端完成。
拥塞控制算法:尝试不同的 TCP 拥塞控制算法(例如 Cubic、Reno),看看性能是否有所提高。
一般故障排除步骤
更新和修补:
确保所有系统(客户端、服务器和网络设备)都使用最新的补丁和固件进行更新。
检查日志:
查看客户端、服务器和网络设备上的系统日志,了解可能指示问题的任何错误消息或警告。
端到端测试:
使用测量客户端和服务器之间的原始网络性能等 iperf 工具执行端到端测试。这有助于确定问题是与网络相关还是特定于备份应用程序。
总结
> 从可能的原因入手,做交叉测试缩小故障域,如果不得不抓包那么要依赖比较高级的 Wireshark 分析技巧。
你可能很快定位到故障比如 MSS 太小导致过度分片,交换机接口 CRC 丢包导致大量重传。
你可能很久定位不到故障比如 TCP out-of-order,那么需要在 client - network - server 沿途所有设备,同时做抓包,分析 out-of-order 的来源。不过也正是在一次次问题分析过程中,你成长了(头秃了)