【发布时间】:2014-03-04 00:45:51
【问题描述】:
据我了解,tcp 协议的性能受到 RTT(往返时间)的限制。如果客户端向服务器发送消息,它需要等待确认响应才能发送序列中的下一条消息。这意味着,如果我使用 250 毫秒 RTT 的链接,我将被限制为每秒 4 条消息,这对于许多应用程序来说非常慢,并且严重阻碍了数据传输率。
有什么方法可以解决这个限制?
【问题讨论】:
据我了解,tcp 协议的性能受到 RTT(往返时间)的限制。如果客户端向服务器发送消息,它需要等待确认响应才能发送序列中的下一条消息。这意味着,如果我使用 250 毫秒 RTT 的链接,我将被限制为每秒 4 条消息,这对于许多应用程序来说非常慢,并且严重阻碍了数据传输率。
有什么方法可以解决这个限制?
【问题讨论】:
如果客户端向服务器发送消息,它需要等待确认响应才能发送序列中的下一条消息。
这是不正确的。有延迟和选择性 ACK 之类的东西。
这意味着如果我使用 250 毫秒 RTT 的链接,我每秒只能发送 4 条消息。
没有。
实际瓶颈是链路的带宽延迟产物。确保你的 socket 两端的发送和接收缓冲区至少等于这个产品。
【讨论】:
RTT 只是告诉您大约 250 毫秒的延迟,将数据包从发送缓冲区中逐出。鉴于发送缓冲区足够大,没有什么可以阻止您以最大带宽减去协议开销进行双向通信。
如果您不需要纠错(也就是说,当消息到达太晚时,您的消息一文不值)考虑使用 UDP。
【讨论】:
如果我理解正确的话。 您的协议将等待来自对等方的响应消息,然后才能发送下一个请求消息。 在这种情况下,RTT 会限制您所说的速度(每秒 4 条消息)。
如果您的协议规范要求这种等待,那么协议设计不佳。
如果没有,那么您可以通过在等待响应消息之前向对等方发送多条消息来提高性能。这样一来,高 RTT 就不会导致如此严重的缓慢。
【讨论】: