百科问答小站 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这块代码已有一些解决方案,至少不会再有上次一样的问题了。总之,这部分代码的处理要多考虑一些特例。




  

相关话题

  如何看待知乎前后端关注度差距悬殊的现象? 
  有没有可能运用人工神经网络将一种编程语言的代码翻译成任意的另一种编程语言,而不经过人工设计的编译过程? 
  如何看待 Python 之父关于帮助中国程序员应对 996 工作制的讨论? 
  大一学生对区块链感兴趣,应该打好哪些基础? 
  毫无编程基础的小白准备学习C语言,用VC6还是VS2015? 
  当你读代码时在读什么? 
  有什么在线的编程游戏? 
  python是用C实现的,Java是用C++实现的,那为什么不直接用C或C++呢? 
  为什么说程序员要贷款买房之前最好先学好数据结构和算法? 
  程序员反感(讨厌、不喜欢)什么? 

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





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利