Sockets UDP有多安全?

Sockets UDP有多安全?,sockets,networking,tcp,udp,Sockets,Networking,Tcp,Udp,我正在考虑是否使用TCP或UDP进行一些非常简单的通信。以下是基本细节: 所有消息都可以放在一个1500字节的数据包中(因此排序与此无关) 这些消息的接收者将被来自许多不同来源的数据包轰炸。TCP可以处理拥塞,但是来自数十个或数百个源的UDP数据包同时到达同一端口会互相损坏吗 丢失/损坏的邮件不是什么大问题。只要他们仍然是少数,并且被正确地认定为无效,他们就可以被忽略 数据包以波的形式到达,在几秒钟内每秒几次,然后在几分之一秒内到达数万次。网络应该能够处理这些峰值中的带宽 请记住,顺序无关紧

我正在考虑是否使用TCP或UDP进行一些非常简单的通信。以下是基本细节:

  • 所有消息都可以放在一个1500字节的数据包中(因此排序与此无关)
  • 这些消息的接收者将被来自许多不同来源的数据包轰炸。TCP可以处理拥塞,但是来自数十个或数百个源的UDP数据包同时到达同一端口会互相损坏吗
  • 丢失/损坏的邮件不是什么大问题。只要他们仍然是少数,并且被正确地认定为无效,他们就可以被忽略
  • 数据包以波的形式到达,在几秒钟内每秒几次,然后在几分之一秒内到达数万次。网络应该能够处理这些峰值中的带宽
请记住,顺序无关紧要,丢失/损坏的数据包可以被安全地忽略,并且这些数据包峰值可能会有成千上万的数据包同时到达,您认为使用UDP进行此操作有任何问题吗

所有消息都可以放在一个1500字节的数据包中(因此排序与此无关)

1500是本地网络中通常使用的MTU。它在互联网上可能更低,像DNS这样的协议假设至少512字节可以工作。但是,即使MTU较低,数据包最后也只会被碎片化并重新组装,因此没有一半的消息到达应用程序

。。但是,从数十个或数百个源同时到达同一端口的UDP数据包是否会相互损坏

他们不会互相腐败。如果它们到达得太快,而您的应用程序无法及时从套接字缓冲区读取它们,从而导致套接字缓冲区填满,那么数据包将丢失

丢失/损坏的邮件不是什么大问题。只要他们仍然是少数,并且被正确地认定为无效,他们就可以被忽略

UDP有一个可选的校验和,在大多数情况下使用。如果校验和不符合要求,则数据包将被丢弃,即不发送到应用程序。校验和确实考虑了简单的位翻转,但无法检测到所有损坏。但这与所有校验和以及TCP都是一样的

数据包以波的形式到达,在几秒钟内每秒几次,然后在几分之一秒内到达数万次。网络应该能够处理这些峰值中的带宽

如果网络中的带宽能够处理它,那么网络就能够处理它。但问题是,您的本地计算机,尤其是您的应用程序是否能够应对这种波动,也就是说,处理数据包的速度要快到网卡缓冲区和套接字缓冲区不会溢出。您可能应该增加接收缓冲区的大小,以便更好地处理此类波

所有消息都可以放在一个1500字节的数据包中(因此排序与此无关)

非顺序逻辑。UDP数据报通常接受的有效负载限制为534字节,所有消息放入一个数据报并不意味着顺序无关,除非消息的顺序无关(您没有说明)

从数十个或数百个源同时到达同一端口的UDP数据包是否会相互损坏

没有

丢失/损坏的邮件不是什么大问题。只要他们仍然是少数,并且被正确地认定为无效,他们就可以被忽略

如果不禁用UDP校验和检查,它们将被删除,而不会被忽略

数据包以波的形式到达,在几秒钟内每秒几次,然后在几分之一秒内到达数万次。网络应该能够处理这些峰值中的带宽

不会的。UDP数据包可以随时丢弃,特别是在这样的条件下。但是,正如你已经说过的,错过的信息不是什么大不了的事,这也不是什么大不了的事

请记住,顺序无关紧要,丢失/损坏的数据包可以被安全地忽略,并且这些数据包峰值可能会有成千上万的数据包同时到达,您认为使用UDP进行此操作有任何问题吗


在您所述的条件下,假设它们是正确的,则不适用。

我不是专家,但听起来您需要使用UDP。UDP具有较少的开销(意味着更小的包大小),非常适合快速交付;数据包可能会丢失,但听起来似乎不会有问题。消息的顺序无关紧要,任何单个消息都可以放入1500字节的数据包中。接受的有效负载占了所有可以填充到UDP中的额外头,我几乎不打算使用这些头。否则,消息有效负载低于1472字节。此外,删除和忽略之间似乎没有实际区别,只是校验和检查和删除允许硬件和操作系统优化,而将校验和计算和忽略移动到应用层将导致性能轻微下降。同样重要的是,丢弃的数据包必须占绝大多数。报头不是有效负载的一部分“绝大多数”在术语上是矛盾的,“必须”似乎与“没什么大不了的”相矛盾。UDP将在任何时候丢弃数据包,无论出于何种原因,它都认为这是足够的,包括但不限于路由器队列溢出、接收缓冲区溢出等等。我的意思是,只要有80%以上的节点通过,丢弃的数据包就不是问题,并且丢弃的数据包的分布是相对随机的,即不是每次丢弃数据包的相同节点。显然,头不是有效负载的一部分,但我的意思是,更多的头意味着可能的有效负载更小。很抱歉给你带来了困惑。