什么情况下TCP会重传数据?
    TCP提供可靠的运输层。它使用的方法之一就是确认从另一端收到的数据。但数据和确认都有可能会丢失。TCP通过在发送时设置一个定时器来解决这种问题。
    如果当定时器溢出时还没有收到确认,它就重传该数据。

    对每个连接,TCP管理4个不同的定时器:
    1. 重传定时器使用于当希望收到另一端的确认。
    2. 坚持(persist)定时器使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口。
    3.保活(keepalive)定时器可检测到一个空闲连接的另一端何时崩溃或重启。
    4. 2MSL定时器测量一个连接处于TIME_WAIT状态的时间

    往返时间测量
    TCP超时与重传中最重要的部分就是对一个给定连接的往返时间(RTT)的测量。
    由于路由器和网络流量均会变化,因此我们认为这个时间可能经常会发生变化,TCP应该跟踪这些变化并相应地改变其超时时间。
    重传超时时间RTO(Retransmission TimeOut)

    重新分组
    当TCP超时并重传时,它不一定要重传同样的报文段。相反,TCP会对数据进行重新分组而发送一个较大的报文段,这将有助于提高性能。