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




  

相关话题

  0基础开始,Leetcode200道题要多久左右? 
  你对MVC、MVP、MVVM 三种组合模式分别有什么样的理解? 
  无代码编程会是以后的趋势吗? 
  为什么美国程序员工作比中国程序员工作轻松、加班少? 
  GitHub 上有哪些适合新手跟进的优质项目? 
  请各位前辈指导下简练代码的思路? 
  你的程序员学习之路是怎样的?你现在对于编程有哪些感想? 
  本科即将毕业,打算5个月学编程当码农,往哪方面学比较好? 
  编程的时候 命名 方法或变量 词穷了怎么办? 
  微软当年的 J++ 究竟是什么?为什么 Sun 要告它? 

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





© 2025-04-15 - tinynew.org. All Rights Reserved.
© 2025-04-15 - tinynew.org. 保留所有权利