百科问答小站 logo
百科问答小站 font logo



网络上有若干客户端向一台机器的某个端口一直不停发送UDP包 这台机器打开端口和不打开端口的区别在哪? 第1页

  

user avatar   guo-zhong-ming-26 网友的相关建议: 
      

服务器如果不监听某个udp端口,那么,网卡还是会收到相关的数据包, 还是会产生中断,还是会从网卡拷贝数据到系统态,只是系统态读数据分析出无处转发,然后当做错误包丢弃了。

如果服务器监听了某个udp端口,那么这个数据包将会被转发到监听socket handle的接收缓冲区中,如果缓冲区未满push back 新数据包,然后epoll通知用户态代码需要读缓冲区,用户态代码获得cpu控制权,从读缓冲区read, 从系统态拷贝到用户态,整个开销要大上许多。

Udp网络编程主要的难点是不容易发挥多cpu的优势,一般是单线程收发,然后把收到的数据通过队列方式传递给多个线程处理,然后再从多个线程队列返回处理结果,单线程写入。

另外一个难点是需要考虑丢包,即使是本机一个线程发,一个线程收,也有丢包,因此需要定时重发和超时处理。

第三个难点是发端一般用头2个字节标识发包id,例如dns包,那么就需要一个id管理代码,最大支持65536个正在等待中的查询,如果上级dns server的处理缓慢,那么就有可能耗尽可用id,当年一起全国网络事故涉及到了暴风影音客户端每x秒查询一次dns,加上一次dos攻击处理过程中的连锁反应,导致全国多省dns id资源耗尽,难以提供服务查询,网络大面积访问困难。暴风影音和某dns pod均被有关部门约谈,dos攻击者被抓捕。当然现在dns server这块代码已有一些解决方案,至少不会再有上次一样的问题了。总之,这部分代码的处理要多考虑一些特例。




  

相关话题

  一百行以下有哪些给力代码? 
  给我女神发消息,隔壁的二狗在同一 Wi-Fi 下,能收到我的帧吗? 
  为什么企业微信没有Linux版本? 
  从语言设计的角度来看, Pascal 是一门优秀的语言吗? 
  如何系统地测试一门语言(规定工具链,运行时,以及运行环境)的性能? 
  2013 年末,IBM 连续 6 个季度业绩下降,是出了什么问题? 
  QQ 等即时通讯软件的消息传输的技术原理是什么? 
  在做程序员的道路上,你掌握了什么概念或技术使你感觉自我提升突飞猛进? 
  对于同一段代码,循环次数有限且已知,do和for之中哪一个的效率更高?为什么? 
  最让你伤心的bug是什么? 

前一个讨论
现在的很多楼盘名字太霸气,为什么管理部门不约束下,或者起名的机制改下,约束下开发商的起名权?
下一个讨论
如何看喻惠平《这就是非洲》摄影展中将表情相似的非洲人与非洲动物并列,被西方媒体批判为种族歧视?





© 2025-05-12 - tinynew.org. All Rights Reserved.
© 2025-05-12 - tinynew.org. 保留所有权利