C++ TCP协议,减少RTT瓶颈

C++ TCP协议,减少RTT瓶颈,c++,sockets,tcp,roundtrip,C++,Sockets,Tcp,Roundtrip,据我所知,tcp协议的性能受到RTT(往返时间)的限制。如果客户端向服务器发送消息,则需要等待确认响应,然后才能发送序列中的下一条消息。这意味着,如果我在一个250毫秒RTT的链接上,我被限制为每秒4条消息,这对于许多应用程序来说相当慢,并且严重阻碍了数据传输速率 有哪些方法可以绕过这个限制 如果客户端向服务器发送消息,则需要等待确认响应,然后才能发送序列中的下一条消息 那是不对的。存在延迟和选择性确认等情况 这意味着如果我在一个250毫秒RTT的链接上,我每秒只能收到4条消息 不,没有 实际的

据我所知,tcp协议的性能受到RTT(往返时间)的限制。如果客户端向服务器发送消息,则需要等待确认响应,然后才能发送序列中的下一条消息。这意味着,如果我在一个250毫秒RTT的链接上,我被限制为每秒4条消息,这对于许多应用程序来说相当慢,并且严重阻碍了数据传输速率

有哪些方法可以绕过这个限制

如果客户端向服务器发送消息,则需要等待确认响应,然后才能发送序列中的下一条消息

那是不对的。存在延迟和选择性确认等情况

这意味着如果我在一个250毫秒RTT的链接上,我每秒只能收到4条消息

不,没有

实际的瓶颈是链路的带宽延迟乘积。确保两端的套接字发送和接收缓冲区至少与此产品相同

如果客户端向服务器发送消息,则需要等待确认响应,然后才能发送序列中的下一条消息

那是不对的。存在延迟和选择性确认等情况

这意味着如果我在一个250毫秒RTT的链接上,我每秒只能收到4条消息

不,没有


实际的瓶颈是链路的带宽延迟乘积。确保套接字两端的发送和接收缓冲区至少与本产品相同。

RTT只告诉您从发送缓冲区中取出数据包的延迟约为250ms。如果发送缓冲区足够大,在最大带宽减去协议开销的情况下,没有任何东西可以阻止双向通信


如果你不需要纠错(也就是说,当消息到达得太晚时,你的消息毫无价值)考虑使用UDP。

RTT只告诉你要从发送缓冲区中取出的包的~250MS延迟。如果发送缓冲区足够大,在最大带宽减去协议开销的情况下,没有任何东西可以阻止双向通信

如果你不需要纠错(也就是说,当你到达的消息太晚时,你的消息毫无价值),请考虑使用UDP。< /P> < P>如果我理解正确的话。 您的协议将等待来自对等方的响应消息,然后才能发送下一条请求消息。 在这种情况下,RTT限制了您所说的速度(每秒4条消息)

如果协议的规范要求这种等待,那么协议的设计就不好

如果没有,那么您可以通过在等待响应消息之前向对等方发送多条消息来提高性能。这样,高RTT不会造成如此糟糕的减速。

如果我理解正确的话。 您的协议将等待来自对等方的响应消息,然后才能发送下一条请求消息。 在这种情况下,RTT限制了您所说的速度(每秒4条消息)

如果协议的规范要求这种等待,那么协议的设计就不好


如果没有,那么您可以通过在等待响应消息之前向对等方发送多条消息来提高性能。这样,高RTT不会导致如此糟糕的慢度。

什么是ACK?TCP gauranty如何在不确认发送的每条消息的情况下按顺序传递?@user788171如果您甚至不知道ACK是什么,那么我建议您阅读更多关于ACK的内容以及它是如何工作的。@user788171而不是确定您有问题,以及问题的确切位置,并寻找实现解决方案的方法,我建议您首先确定是否存在需要修复的问题。测试和测量。你似乎对TCP一无所知。这是相当多的智能和微调,你给它的信用。什么是ACK?TCP gauranty如何在不确认发送的每条消息的情况下按顺序传递?@user788171如果您甚至不知道ACK是什么,那么我建议您阅读更多关于ACK的内容以及它是如何工作的。@user788171而不是确定您有问题,以及问题的确切位置,并寻找实现解决方案的方法,我建议您首先确定是否存在需要修复的问题。测试和测量。你似乎对TCP一无所知。您将其归功于它,它更加智能和精细调整。@Downvoter请解释您对这个正确答案的厌恶。@Downvoter请解释您对这个正确答案的厌恶。