标签: udp

为最大吞吐量,UDP数据包的最佳大小是多少?

我需要通过可能有损的网络将数据包从一个主机发送到另一个主机.为了最小化数据包延迟,我不考虑TCP/IP.但是,我希望最大化吞吐量uisng UDP.应该使用的UDP数据包的最佳大小是多少?

以下是我的一些注意事项:

  • 网络中交换机的MTU大小为1500.如果我使用大数据包,例如8192,则会导致碎片.丢失一个片段会导致丢失整个数据包,对吧?

  • 如果我使用较小的数据包,我将产生UDP和IP头的开销

  • 如果我使用一个非常大的数据包,我可以使用的最大数据包是多少?我读到最大的数据报大小是65507.我应该使用什么缓冲区大小来发送这样的大小?这有助于提高我的吞吐量吗?

  • 常见操作系统(例如Windows,Linux等)支持的典型最大数据报大小是多少?

更新:

数据的一些接收器是未实现TCP/IP堆栈的嵌入式系统.

我知道这个地方到处都是那些非常喜欢使用可用内容的人.但我希望能得到更好的答案,而不仅仅关注MTU.

c++ linux windows udp network-programming

38
推荐指数
4
解决办法
5万
查看次数

发送UDP广播,接收多条消息

我有2个程序,1个用于发送UDP广播消息,1个用于监听此广播.我的问题是,有时当我发送广播时,接收器会收到2条消息.为什么?

接收者代码:

public class Receiver {
  private readonly UdpClient udp = new UdpClient(15000);
  private void StartListening()
  {
    this.udp.BeginReceive(Receive, new object());
  }
  private void Receive(IAsyncResult ar)
  {
    IPEndPoint ip = new IPEndPoint(IPAddress.Any, 15000);
    byte[] bytes = udp.EndReceive(ar, ref ip);
    string message = Encoding.ASCII.GetString(bytes);
    StartListening();
  }
}
Run Code Online (Sandbox Code Playgroud)

发件人代码:

public class Sender {
  public void Send() {
    UdpClient client = new UdpClient();
    IPEndPoint ip = new IPEndPoint(IPAddress.Broadcast, 15000);
    byte[] bytes = Encoding.ASCII.GetBytes("Foo");
    client.Send(bytes, bytes.Length, ip);
    client.Close();
  }
}
Run Code Online (Sandbox Code Playgroud)

c# udp broadcasting

38
推荐指数
2
解决办法
5万
查看次数

在同一台计算机上的两个程序之间发送和接收UDP数据包

是否可以通过localhost/127 ...通过共享相同的端口#来获得两个独立的程序在同一台计算机上进行通信(仅限单向)

我们正在开展一个学生项目,我们需要在两台计算机之间发送包含遥测数据的UDP数据包.生成这些数据包的程序是专有的,但我正在使用System.Net.Sockets.UdpClientSystem.Net.IPEndPoint使用C#编写接收程序.

在我们小组的会议期间,当我们连接多台计算机时,我们可以分别运行这两个程序.但是,当我回家并试图扩展遥测处理程序时它并不是很有用,因为我只有一台计算机(我需要一个用于测试处理程序的源程序).我也无法在学校的任何一台计算机上安装该程序.

当我尝试同时在我的计算机上运行这两个程序(最后开始我的程序)时,我得到一个SocketException,说通常只允许使用每个端口.这让我相信必须有一些方法来共享端口(虽然任何时候只有一个程序可以在计算机上使用端口是有意义的,我同时运行多个互联网浏览器没有问题(我假设他们使用端口80作为http)).

编辑的REEDIT:

sipwiz是对的,感谢Kalmi指向UdpClient.Client.Bind()的指针.但是,当时我们正在考虑使用另一个生成类似数据包的程序,并且我们可以使用我的第一个(虽然天真)方法在ctor中使用UDP客户端绑定在同一台计算机上共享端口.抱歉,您必须取消标记您的答案,sysrqb.

c# port udp localhost

36
推荐指数
3
解决办法
5万
查看次数

UDP与IP差异?

我知道UDP驻留在互联网层的传输层和IP上.我也知道它们既无连接又不可靠.那么当我们已经拥有IP时,UDP有什么意义呢?区别不是很清楚.非常感谢任何帮助.谢谢!

ip udp tcp

36
推荐指数
2
解决办法
2万
查看次数

你能绑定()和连接()UDP连接的两端

我正在编写一个点对点消息队列系统,它必须能够在UDP上运行.我可以任意选择一方或另一方作为"服务器",但由于两端都是从另一方发送和接收相同类型的数据,所以它似乎不太正确.

是否可以bind()和connect()两端,以便它们只相互发送/接收?这似乎是一种很好的对称方式.

c linux udp

34
推荐指数
4
解决办法
4万
查看次数

最好的C++ RTP/RTSP库

我正在寻找C++中的RTP/RTSP库.我找到了pjsip,但它更像C风格.我正在寻找更多的OO库.

c++ udp sip rtp rtsp

33
推荐指数
2
解决办法
8万
查看次数

在3G上没有经过UDP打孔

我正试图在软件中实现一个打孔功能.问题是,我正在使用已经建立的TCP服务器与用户进行通信.

这是我到目前为止所拥有的:

  • "A"向UDP服务器"US"发送消息(在端口9333上)
  • "US"将已连接的端口发送回"A"(端口31000 - localport 31005)
  • "A"向TCP服务器"TS"发送消息,说他想要连接到B(并给端口31000)
  • "TS"向"B"发送消息,给他"A"的端口(31000)和ip
  • "B"向"US"发送消息(在端口9333上)
  • "US"向"B"发送消息,告诉他他的端口45000(localport 45005)
  • "B"向"TS"发送消息给出是udp端口(45000)
  • "TS"向"A"发送消息,给出B的udp端口(45000)和ip
  • "A"开始在端口45000上向B的ip发送udp消息,并在localport 31005上收听
  • "B"开始向端口31000上的A的IP发送udp消息,并在localport 45005上收听

当然,例如端口31000,31005,45000和45005,每个端口改变的新连接,只有9333是静态的.

我知道有很多来回,比实际情况还要多.事实上,我必然会使用TCP服务器与两个用户进行通信,udp服务器只是将用户的端口返回给自己,因此它可以将其发送回TCP服务器.

但是,任何人都不会收到用户之间的消息......任何人都会知道为什么?


编辑:

我用http://nattest.net.in.tum.de/test.php测试了我的路由器,并且udp打孔工作正常,所以问题不是来自我的路由器,而是来自我的协议......

当用户在同一个NAT后面时,一切正常,当然它使用了private ip,但这意味着代码也在工作,所以每一个都会导致协议问题......


编辑2:

实际上,我做了一半的工作(问题实际上来自我的代码,而不是协议......我已经连接了2个用户,一个用3G连接iPhone,一个连接在Wifi上我的NAT.

有趣的(不是那么多)事情是,只有一个套接字能够在两个用户之间接收和发送数据.(由iphone发起的套接字)根据协议,我应该有2个连接良好的套接字,我错了吗?

所以我设法在我的NAT中打了一个洞,但实际上并没有在蜂窝NAT中.

当然,我立即测试了2台连接在3G上的iphone.没有人得到另一个人的信息.

我错过了有关手机NAT的内容吗?

PS:很抱歉更新我的问题,但由于我没有得到答案,我试图自己找...

PS 2:因为我设法在我的NAT中打了一个洞,我改变了标题,加上"在3G上"


编辑3:我再次运行http://nattest.net.in.tum.de/test.php测试,我的电脑通过我的iphone的3G连接连接到互联网.

这是结果: UDP HOLE PUNCHING RESULT

显然所有的udp打孔测试都是在第9次测试中成功的.

似乎还有更多:

UDP绑定测试(?):端点独立绑定,端口预测很容易

因此,通过3G连接连接2个对等设备应该不会有任何问题(远远不及"家庭"NAT背后)......我是对的吗?


编辑4:

为了确定,我现在向两个不同的UDP服务器发送消息,以检查3G上的端口和本地端口是否相同.

长话短说,端口(本地和公共)在两台服务器上连接时都是一样的.所以在EDIT 2上完成的测试是正确的,udp是端点独立的,所以我不应该在进行打孔时遇到任何问题......(至少我的ISP)

udp 3g hole-punching 3g-network

33
推荐指数
2
解决办法
1万
查看次数

netcat与UDP的奇怪行为

我注意到一个使用netcat和UDP的奇怪行为.我启动一个侦听UDP端口的netcat实例(实例1):

nc -lu -p 10000
Run Code Online (Sandbox Code Playgroud)

所以我启动另一个netcat实例(实例2)并尝试将数据报发送到我的进程:

nc -u 127.0.0.1 10000
Run Code Online (Sandbox Code Playgroud)

我看到了数据报.但是,如果我关闭实例2并重新启动netcat(实例3):

nc -u 127.0.0.1 10000
Run Code Online (Sandbox Code Playgroud)

我无法在实例1的终端上看到数据报.实际上,操作系统在实例3处为实例2分配了不同的UDP源端口,问题在于:如果我使用相同的instance2源端口(例如50000):

 nc -u -p 50000 127.0.0.1 10000
Run Code Online (Sandbox Code Playgroud)

再次,netcat的实例1接收数据报.UDP是一种连接较少的协议,为什么呢?这是标准的netcat行为吗?

networking udp netcat

32
推荐指数
2
解决办法
2万
查看次数

空UDP和TCP数据包的大小?

空UDP数据报的大小是多少?那个空TCP包呢?

我只能找到有关MTU的信息,但我想知道它们的"基本"大小是什么,以便估计它们之上的协议的带宽消耗.

size udp tcp

30
推荐指数
3
解决办法
8万
查看次数

SMTP是基于TCP还是UDP?

SMTP是基于TCP还是UDP?我实在无法确认.在我看来,SMTP应该基于UDP,但是有人告诉我必须是TCP.

udp tcp smtp network-protocols

30
推荐指数
1
解决办法
9万
查看次数