【发布时间】:2017-08-09 18:17:12
【问题描述】:
我有一个必须通过拥塞的 LAN 进行通信的实时应用程序(使用 websockets 的 C++)。因为它是实时的,所以不能容忍延迟。在这种情况下,UDP 会比 TCP 性能更好吗?
我不能容忍丢包,但如果使用 UDP,可以通过重试来解决。
【问题讨论】:
-
@MaMadLord 错误,不。 TCP 有选择性 ACK,而且 TCP 是流协议。
-
我想从一些经验中知道你是否有。因为例如 UDP 并不总是很快,在某些情况下 TCP 会比 UDP 快,正如@JHH 回答中所指出的那样。但是仅供参考#MaMadLord 它不适用于流媒体或 voip,只是以不规则的间隔发送微小的字节(取决于用户输入)...
-
"...因为我不能容忍丢包..." UDP 是一种无连接、尽力而为、即发即弃的协议,不保证数据交付或接收数据报的顺序。如果您需要 UDP 这样的东西,那么您必须创建一个应用层协议来处理它。另一方面,TCP 为您提供了一种面向连接的协议,可确保无序段的交付和重新排序。
-
为了保证数据传输,您需要在 UDP 之上构建一个应用层协议,这会减慢您的速度,因为您需要确认、排序等. 内置在 TCP 中。有些人这样做。 UDP 通常用于实时数据,例如VoIP,但它确实有数据丢失,并且乱序数据被丢弃为无用。
标签: networking tcp websocket network-programming udp