草庐IT

networking - 为什么游戏开发者在应用层面避开TCP而让UDP可靠?

许多游戏开发者选择在应用程序级别中制作UDP可靠。TCP不正是为此而生的吗?我制作了一个API,可以使用UDP和TCP数据包启用客户端-服务器通信。我应该将ReliableUDP添加到列表中吗?为什么?如果我使用TCP会有问题吗?我只是想知道RUDP是否比TCP有任何优势,以便我可以选择是否添加RUDP支持。 最佳答案 简短回答:TCP没有针对延迟进行优化(根本没有);结果-它有几个属性,这些属性是游戏的延迟killer(尽管它们只有在数据包丢失时才会发挥作用)。特别是,线头阻塞和指数退避对于快节奏游戏来说往往非常烦人。对延迟影响最

networking - google talk 使用 udp 还是 tcp 数据包?

是否可以判断googletalk是使用tcp还是udp包进行传输。我知道它在应用层使用xmpp协议(protocol),但它是通过tcp还是udp运行的。 最佳答案 您可以通过使用数据包嗅探器观察流量来自己回答这个问题。这比让我们告诉您答案更有启发性。 关于networking-googletalk使用udp还是tcp数据包?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/162

haskell - 在同一个端口上监听 TCP 和 UDP

如何让Haskell在同一个端口上监听UDP和TCP?这是我目前的代码(基于acme-http):listenOnportm=doprotoTCPdosetSocketOptionsockReuseAddr1setSocketOptionsockNoDelay1bindSocketsock(SockAddrInet(fromIntegralportm)iNADDR_ANY)listensock(max1024maxListenQueue)returnsock)protoUDPdosetSocketOptionsockReuseAddr1bindSocketsock(SockAddrIn

networking - 确定网络中的不对称延迟

想象一下,在异构网络环境中,您有许多集群服务器,跨越许多主机,这样服务器之间的连接可能会有非常不同的延迟和带宽。您想通过在服务器之间传输数据来构建服务器之间的连接图。当然,随着网络拓扑结构的变化,这张map可能会随着时间的推移而变得陈旧-但现在让我们忽略这些复杂性并假设网络是相对静态的。鉴于此主机图中节点之间的延迟,计算带宽是一项相对简单的计时练习。我在延迟方面遇到了更多困难-但是。要获得往返时间,只需对从本地主机到远程主机的回程ping进行计时即可-两个计时事件(开始、停止)都发生在本地主机上。假设在两个方向上的延迟不相等,如果我想要单向时间怎么办?假设不同主机上的时钟没有精确同步(

tcp - 开发无服务器局域网聊天程序求助!

我想开发简单的无服务器局域网聊天程序,只是为了好玩。我怎样才能做到这一点?我应该使用什么类型的架构?去年我参与了TCP,UDP客户端/服务器应用程序项目。它很简单(服务器监听特定端口/套接字,客户端连接到服务器的端口等。)但我不知道如何开发“无服务器”"局域网聊天程序。我怎样才能做到这一点?UDP、TCP、组播、广播?或者程序应该像服务器和客户端一样运行吗? 最佳答案 最简单的方法是使用UDP并在整个网络上简单地广播您的消息。更高级一点的版本是仅使用广播来发现网络中的其他节点。每个节点都维护一个已知对等节点的列表。消息通过TCP发送

networking - UDP 和 TCP 数据包有什么区别?你用它们做什么?

我昨天正在配置IPtable。我的同事刚问了我这个问题,我无法回答。我意识到我是一个比系统管理员更好的开发人员,并且需要改进这一点。那么它们是什么?他们有什么用?缺点/优点(如果相关)。 最佳答案 这些都是基本问题。UDP::用户数据报协议(protocol)1)机器之间没有端到端连接(可能在本地网络或互联网中的某个地方)。2)接收端接收到的数据不是像TCP那样是流式的,而是一个完整的数据block。3)在传输层不执行数据包顺序检查。也就是说,如果接收到的数据包出现任何错误,接收方将不会要求向发送方重新发送相同的数据包。4)由于上述

sockets - C : what do I get? 中的非阻塞 udp 套接字编程

我无法理解recv()/recvfrom()从非阻塞UDP套接字返回的内容。与TCP相比更具体一些(如果我错了请纠正我):在缓冲区中有一些数据之前,阻塞套接字(TCP或UDP)不会从recv()返回。这可能是一些字节数(TCP)或完整的数据报(UDP)。非阻塞TCP套接字返回EWOULDBLOCK(linux)/WSAEWOULDBLOCK(windows)或当前缓冲区中的字节。由于TCP数据是一个流,因此返回多少字节并不重要。现在问题:如果没有可用数据,非阻塞UDP套接字也会返回WOULDBLOCK(linux)/WSAEWOULDBLOCK(windows)。但是,如果有数据可用,

c - 通过 UDP 实现 ack?

我们有一个系统(用C语言构建)可以通过UDP进行通信。最近我们发现有必要保证数据包的传递。我的问题是:要确保使用ack数据包进行交付,对基于UDP的系统的最少添加是什么?此外,理想情况下无需操作数据包header。我们对数据包进行应用程序级别的控制,包括序列号和ack/nack标志。我想知道这是否是一个失败的原因,我们尝试做的任何事情基本上都是有缺陷和损坏的TCP版本。基本上,我们是否可以进行最低限度的改进来实现有保证的交付(我们不需要TCP的许多功能,例如拥塞控制等)。谢谢! 最佳答案 TCP交织了3个可能相关的服务(好吧,TCP

c# - 严肃的高性能服务器的 Tcp 可靠性与 Udp 负担

速度、优化和可伸缩性是Udp和Tcp协议(protocol)之间的典型比较。Tcp吹捧可靠性,缺点是有一点额外的开销,但速度非常好。一旦Tcp套接字被实例化,保持套接字打开需要一些开销。但与经常描述的Udp负担相比,究竟哪个协议(protocol)的开销更大?我还听说Tcp存在可伸缩性问题……但是互联网(网页/服务器)在Tcp上运行-那么Tcp是什么抑制了可伸缩性?好的...所以Udp不需要保持连接打开的开销。但是,它需要您编写额外的方法来确保所有数据包都到达那里,希望按照您希望的顺序接收。如果没有收到完整的数据包,则必须告诉客户端或服务器重新发送。并且您还必须为部分数据包保留某种消息

language-agnostic - 基于 TCP/IP 的语音通信

我目前正在开发使用DirectSound在内联网上进行通信的应用程序。我有使用UDP的工作解决方案,但后来我的老板告诉我他出于某种原因想要使用TCP/IP。我试图以与UDP几乎相同的方式实现它,但收效甚微。我得到的基本上只是噪音。其中20%是录制的声音,其余只是奇怪的噪音。我猜测原因是TCP需要多次读取所有接受的数据,直到它得到我可以播放的最终声音。现在两个问题:我走在正确的轨道上吗?将TCP/IP用于此类应用程序(各种语音session)甚至是个好主意吗?我是用C#做的,但我不认为这是特定于语言的。 最佳答案 不,使用TCP是一个