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




  

相关话题

  最终的TCP传输层本质上还是一个需要顺序交付验证的管道,所以http2的管道化尝试意义有多大? 
  不懂编程能成为产品经理吗? 
  程序员应该如何优雅地关闭电脑? 
  全世界有上千种编程语言,为什么程序员都只学习那几个主流语言? 
  设计师应该学编程吗? 
  为何自从熊猫烧香以后中国再也没有爆发过类似于此的大规模网络病毒事件? 
  修改本机DNS还是路由DNS? 
  大公司笔试面试有哪些经典算法题目? 
  如何评价黑客吴石? 
  2021年你读了哪些觉得比较好的计算机书籍? 

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





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