
它们的区别主要在于:
UDP协议是面向非连接(不可靠)的传输协议,也就是不需要与服务端建立连接,就直接将数据发送给服务端,同时,无机制保证这条数据已成功发送给服务端。
TCP协议是面向连接(可靠)的传输协议,在客户端向服务器端传输数据之前,客户端必须与服务器端通过“三次握手”来完成连接的建立,在之后的数据传输过程中,为了可靠传输,接受方还会发送ACK包来使发送方获知该数据包已经成功发送,否则,发送端将重新发送数据包直至超时或发送成功。
因此,无论UDP协议还是TCP协议,均要有一个服务端先行监听某端口才能服务。
例如:服务端监听9090端口,客户端使用3456(随机分配)端口,与服务器建立连接,那么通道只有一条,即:A:9090 <-> B:3456。
希望可以帮助你!服务器封UDP有什么用,服务器封UDP主要封的是UDP攻击,我们先来了解下什么是UDP攻击?
UDP攻击,又称UDP洪水攻击或UDP淹没攻击(英文:UDP Flood Attack)是导致基於主机的服务拒绝攻击的一种。UDP 是一种无连接的协议,而且它不需要用任何程序建立连接来传输数据。当攻击者随机地向受害系统的端口发送 UDP 数据包的时候,就可能发生了 UDP 淹没攻击。
所以服务器封UDP对UDP攻击的防护还是很不错的,可以限制UDP流量进来,对服务器的防护有着相当不错的作用。
由于服务器机房环境不同,分为不封UDP,限制UDP以及上层封UDP
不封UDP,对UDP流量没有一点限制,UDP流量会有一点,但是由于一些游戏需要用到UDP协议,所以也是有很多人会选择服务器不封UDP,保证业务的正常运行。
限制UDP,顾名思义就是可以限制部分的UDP流量进来,对UDP的防护也是很有帮助的
上层封UDP,上层封UDP的话是由上层运营商将UDP流量封死,达到无视UDP攻击的效果,对防护非常的有帮助,但是由于是封死UDP的,如果游戏有用到UDP协议的话,就会受到一定的影响,所以当服务器是上层封UDP的话,要先看看游戏程序是否有用到UDP协议再做选择UDP2000个客户端左右 并发
单个数据包最大512字节
Internet 10MB带宽
要求效率(尽可能快,尽可能少丢包),这种情况下用哪种通讯模型比较有优势!
想用IOCP,因为和select模型相比,这个稍微熟悉一点,也在项目中用过,不过是TCP的。
有两个问题,大家懂得的帮忙给指导一下:
是否可以理解为UDP模式下,一次recvfrom 只对应一次sendto。
2能否对服务端的套接字同时投递多个WsaRecvFrom,能否在多个线程中同时投递WsaSendTo和WsaRecvFrom。
------解决方案--------------------------------------------------------
-------------------------------------
等不到,包被截断了。
2能否对服务端的套接字同时投递多个WsaRecvFrom,能否在多个线程中同时投递WsaSendTo和WsaRecvFrom。
--------------------------
其实,我个人认为对udp而言,不用iocp也可以满足。 首先sendto都是立即完成的,无需异步 *** 作。而recvfrom可以只需阻塞一个线程就够了,不需要重叠 *** 作。
------解决方案--------------------------------------------------------
用UDX协议最可靠,效率高,开发简单,非开源。
UDT开源,对于你这种2000客户,够用,开源。
------解决方案--------------------------------------------------------
1sendto 10k,接受部分要么收到10k,要么全部丢失,不会出现部分收到的情况。
------解决方案--------------------------------------------------------
-------------------------------------
在局域网可以,公网,一般1K也收不到。
2能否对服务端的套接字同时投递多个WsaRecvFrom,能否在多个线程中同时投递WsaSendTo和WsaRecvFrom。
--------------------------完全可以
------解决方案--------------------------------------------------------
1如果UDP数据在传输过程中被分包,则你需要对数据包进行标识,已确保获取的包完整。一次recvfrom并不对应一次sendto,考虑UDP不可靠传输的因素。
2不可以,因为sendto和recvfrom都是对同一个资源Socket进行 *** 作。如果在多个线程中对同一个资源进行 *** 作,如果不加锁的情况下,会非常可怕的。而且,如果你加锁了,其实还不如单线程 *** 作。
按照你的需求最好还是采用UDP,不过可以考虑组播。
2API调用完全没有问题。但是接到的数据可能和发送的数据次序不一样,这本身是UDP乱序特性决定了的。而且你发送方可能是多线程,从API层面来说,这些调用都是可以的,完全没有问题。但是给你接收方处理带来一系列问题。UDP就是可靠的传输
如果说有时可以连接上
有时不可以连接上
应该是二个问题所造成的!
一个就是你的带宽太小
与服务器进行数据传输的时候延迟太高,
服务器不能在有效的时间内做出响应,
而主机在响应之前就以经断开连接了
在一个就是服务器与访的人太多
服务器的承受能力太小
所以能会出现这种情况!
另外你的带宽却时太小了
1M
带二个机器以经是杯水车薪了装网络防火墙基本能解决部攻击论何upd洪水攻击都消耗网络资源能找攻击源ip址根本解决问题
UDPFlood是日渐猖厥的流量型DoS攻击,原理也很简单。常见的情况是利用大量UDP小包冲击DNS服务器或Radius认证服务器、流媒体视频服务器。100k pps的UDPFlood经常将线路上的骨干设备例如防火墙打瘫,造成整个网段的瘫痪。由于UDP协议是一种无连接的服务,在UDPFLOOD攻击中,攻击者可发送大量伪造源IP地址的小UDP包。但是,由于UDP协议是无连接性的,所以只要开了一个UDP的端口提供相关服务的话,那么就可针对相关的服务进行攻击。
主要防护:
UDP协议与TCP协议不同,是无连接状态的协议,并且UDP应用协议五花八门,差异极大,因此针对UDPFlood的防护非常困难。其防护要根据具体情况对待:
判断包大小,如果是大包攻击则使用防止UDP碎片方法:根据攻击包大小设定包碎片重组大小,通常不小于1500。在极端情况下,可以考虑丢弃所有UDP碎片。
攻击端口为业务端口:根据该业务UDP最大包长设置UDP最大包大小以过滤异常流量。
攻击端口为非业务端口:一个是丢弃所有UDP包,可能会误伤正常业务;一个是建立UDP连接规则,要求所有去往该端口的UDP包,必须首先与TCP端口建立TCP连接。不过这种方法需要很专业的防火墙或其他防护设备支持
UDP攻击是一种消耗对方资源,也消耗你自己的资源的攻击方式,现在已经没人使用这种过时的东西了,你攻击了这个网站,其实也在消耗你的系统资源,说白了就是拼资源而已,看谁的带宽大,看谁能坚持到最后,这种攻击方式没有技术含量,引用别人的话,不要以为洪水无所不能,攻击程序在消耗对方资源的时候也在消耗你的资源
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)