udp协议实验报告心得(udp实验总结)

http://www.itjxue.com  2023-03-01 02:02  来源:未知  点击次数: 

在Linux 上,编写一个每秒接收 100万UDP数据包的程序究竟有多难

首先,我们假设:

测量每秒的数据包(pps)比测量每秒字节数(Bps)更有意思。您可以通过更好的管道输送以及发送更长数据包来获取更高的Bps。而相比之下,提高pps要困难得多。

因为我们对pps感兴趣,我们的实验将使用较短的 UDP 消息。准确来说是 32 字节的 UDP 负载,这相当于以太网层的 74 字节。

在实验中,我们将使用两个物理服务器:“接收器”和“发送器”。

它们都有两个六核2 GHz的 Xeon处理器。每个服务器都启用了 24 个处理器的超线程(HT),有 Solarflare 的 10G 多队列网卡,有 11 个接收队列配置。稍后将详细介绍。

测试程序的源代码分别是:udpsender、udpreceiver。

预备知识

我们使用4321作为UDP数据包的端口,在开始之前,我们必须确保传输不会被iptables干扰:

Shell

receiver$ iptables -I INPUT 1 -p udp --dport 4321 -j ACCEPT

receiver$ iptables -t raw -I PREROUTING 1 -p udp --dport 4321 -j NOTRACK

为了后面测试方便,我们显式地定义IP地址:

Shell

receiver$ for i in `seq 1 20`; do

ip addr add 192.168.254.$i/24 dev eth2;

done

sender$ ip addr add 192.168.254.30/24 dev eth3

1. 简单的方法

开始我们做一些最简单的试验。通过简单地发送和接收,有多少包将会被传送?

模拟发送者的伪代码:

Python

fd = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

fd.bind(("0.0.0.0", 65400)) # select source port to reduce nondeterminism

fd.connect(("192.168.254.1", 4321))

while True:

fd.sendmmsg(["x00" * 32] * 1024)

因为我们使用了常见的系统调用的send,所以效率不会很高。上下文切换到内核代价很高所以最好避免它。幸运地是,最近Linux加入了一个方便的系统调用叫sendmmsg。它允许我们在一次调用时,发送很多的数据包。那我们就一次发1024个数据包。

模拟接受者的伪代码:

Python

fd = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

fd.bind(("0.0.0.0", 4321))

while True:

packets = [None] * 1024

fd.recvmmsg(packets, MSG_WAITFORONE)

同样地,recvmmsg 也是相对于常见的 recv 更有效的一版系统调用。

让我们试试吧:

Shell

sender$ ./udpsender 192.168.254.1:4321

receiver$ ./udpreceiver1 0.0.0.0:4321

0.352M pps 10.730MiB / 90.010Mb

0.284M pps 8.655MiB / 72.603Mb

0.262M pps 7.991MiB / 67.033Mb

0.199M pps 6.081MiB / 51.013Mb

0.195M pps 5.956MiB / 49.966Mb

0.199M pps 6.060MiB / 50.836Mb

0.200M pps 6.097MiB / 51.147Mb

0.197M pps 6.021MiB / 50.509Mb

测试发现,运用最简单的方式可以实现 197k – 350k pps。看起来还不错嘛,但不幸的是,很不稳定啊,这是因为内核在核之间交换我们的程序,那我们把进程附在 CPU 上将会有所帮助

Shell

sender$ taskset -c 1 ./udpsender 192.168.254.1:4321

receiver$ taskset -c 1 ./udpreceiver1 0.0.0.0:4321

0.362M pps 11.058MiB / 92.760Mb

0.374M pps 11.411MiB / 95.723Mb

0.369M pps 11.252MiB / 94.389Mb

0.370M pps 11.289MiB / 94.696Mb

0.365M pps 11.152MiB / 93.552Mb

0.360M pps 10.971MiB / 92.033Mb

现在内核调度器将进程运行在特定的CPU上,这提高了处理器缓存,使数据更加一致,这就是我们想要的啊!

2. 发送更多的数据包

虽然 370k pps 对于简单的程序来说已经很不错了,但是离我们 1Mpps 的目标还有些距离。为了接收更多,首先我们必须发送更多的包。那我们用独立的两个线程发送,如何呢:

Shell

sender$ taskset -c 1,2 ./udpsender

192.168.254.1:4321 192.168.254.1:4321

receiver$ taskset -c 1 ./udpreceiver1 0.0.0.0:4321

0.349M pps 10.651MiB / 89.343Mb

0.354M pps 10.815MiB / 90.724Mb

0.354M pps 10.806MiB / 90.646Mb

0.354M pps 10.811MiB / 90.690Mb

接收一端的数据没有增加,ethtool –S 命令将显示数据包实际上都去哪儿了:

Shell

receiver$ watch 'sudo ethtool -S eth2 |grep rx'

rx_nodesc_drop_cnt: 451.3k/s

rx-0.rx_packets: 8.0/s

rx-1.rx_packets: 0.0/s

rx-2.rx_packets: 0.0/s

rx-3.rx_packets: 0.5/s

rx-4.rx_packets: 355.2k/s

rx-5.rx_packets: 0.0/s

rx-6.rx_packets: 0.0/s

rx-7.rx_packets: 0.5/s

rx-8.rx_packets: 0.0/s

rx-9.rx_packets: 0.0/s

rx-10.rx_packets: 0.0/s

通过这些统计,NIC 显示 4 号 RX 队列已经成功地传输大约 350Kpps。rx_nodesc_drop_cnt 是 Solarflare 特有的计数器,表明NIC发送到内核未能实现发送 450kpps。

有时候,这些数据包没有被发送的原因不是很清晰,然而在我们这种情境下却很清楚:4号RX队列发送数据包到4号CPU,然而4号CPU已经忙不过来了,因为它最忙也只能读350kpps。在htop中显示为:

多队列 NIC 速成课程

从历史上看,网卡拥有单个RX队列,用于硬件和内核之间传递数据包。这样的设计有一个明显的限制,就是不可能比单个CPU处理更多的数据包。

为了利用多核系统,NIC开始支持多个RX队列。这种设计很简单:每个RX队列被附到分开的CPU上,因此,把包送到所有的RX队列网卡可以利用所有的CPU。但是又产生了另一个问题:对于一个数据包,NIC怎么决定把它发送到哪一个RX队列?

用 Round-robin 的方式来平衡是不能接受的,因为这有可能导致单个连接中数据包的重排序。另一种方法是使用数据包的hash值来决定RX号码。Hash值通常由一个元组(源IP,目标IP,源port,目标port)计算而来。这确保了从一个流产生的包将最终在完全相同的RX队列,并且不可能在一个流中重排包。

在我们的例子中,hash值可能是这样的:

Shell

1

RX_queue_number = hash('192.168.254.30', '192.168.254.1', 65400, 4321) % number_of_queues

多队列 hash 算法

Hash算法通过ethtool配置,设置如下:

Shell

receiver$ ethtool -n eth2 rx-flow-hash udp4

UDP over IPV4 flows use these fields for computing Hash flow key:

IP SA

IP DA

对于IPv4 UDP数据包,NIC将hash(源 IP,目标 IP)地址。即

Shell

1

RX_queue_number = hash('192.168.254.30', '192.168.254.1') % number_of_queues

这是相当有限的,因为它忽略了端口号。很多NIC允许自定义hash。再一次,使用ethtool我们可以选择元组(源 IP、目标 IP、源port、目标port)生成hash值。

Shell

receiver$ ethtool -N eth2 rx-flow-hash udp4 sdfn

Cannot change RX network flow hashing options: Operation not supported

不幸地是,我们的NIC不支持自定义,我们只能选用(源 IP、目的 IP) 生成hash。

NUMA性能报告

到目前为止,我们所有的数据包都流向一个RX队列,并且一个CPU。我们可以借这个机会为基准来衡量不同CPU的性能。在我们设置为接收方的主机上有两个单独的处理器,每一个都是一个不同的NUMA节点。

在我们设置中,可以将单线程接收者依附到四个CPU中的一个,四个选项如下:

另一个CPU上运行接收器,但将相同的NUMA节点作为RX队列。性能如上面我们看到的,大约是360 kpps。

将运行接收器的同一 CPU 作为RX队列,我们可以得到大约430 kpps。但这样也会有很高的不稳定性,如果NIC被数据包所淹没,性能将下降到零。

当接收器运行在HT对应的处理RX队列的CPU之上,性能是通常的一半,大约在200kpps左右。

接收器在一个不同的NUMA节点而不是RX队列的CPU上,性能大约是330 kpps。但是数字会不太一致。

虽然运行在一个不同的NUMA节点上有10%的代价,听起来可能不算太坏,但随着规模的变大,问题只会变得更糟。在一些测试中,每个核只能发出250 kpps,在所有跨NUMA测试中,这种不稳定是很糟糕。跨NUMA节点的性能损失,在更高的吞吐量上更明显。在一次测试时,发现在一个坏掉的NUMA节点上运行接收器,性能下降有4倍。

3.多接收IP

因为我们NIC上hash算法的限制,通过RX队列分配数据包的唯一方法是利用多个IP地址。下面是如何将数据包发到不同的目的IP:

1

sender$ taskset -c 1,2 ./udpsender 192.168.254.1:4321 192.168.254.2:4321

ethtool 证实了数据包流向了不同的 RX 队列:

Shell

receiver$ watch 'sudo ethtool -S eth2 |grep rx'

rx-0.rx_packets: 8.0/s

rx-1.rx_packets: 0.0/s

rx-2.rx_packets: 0.0/s

rx-3.rx_packets: 355.2k/s

rx-4.rx_packets: 0.5/s

rx-5.rx_packets: 297.0k/s

rx-6.rx_packets: 0.0/s

rx-7.rx_packets: 0.5/s

rx-8.rx_packets: 0.0/s

rx-9.rx_packets: 0.0/s

rx-10.rx_packets: 0.0/s

接收部分:

Shell

receiver$ taskset -c 1 ./udpreceiver1 0.0.0.0:4321

0.609M pps 18.599MiB / 156.019Mb

0.657M pps 20.039MiB / 168.102Mb

0.649M pps 19.803MiB / 166.120Mb

万岁!有两个核忙于处理RX队列,第三运行应用程序时,可以达到大约650 kpps !

我们可以通过发送数据到三或四个RX队列来增加这个数值,但是很快这个应用就会有另一个瓶颈。这一次rx_nodesc_drop_cnt没有增加,但是netstat接收到了如下错误:

Shell

receiver$ watch 'netstat -s --udp'

Udp:

437.0k/s packets received

0.0/s packets to unknown port received.

386.9k/s packet receive errors

0.0/s packets sent

RcvbufErrors: 123.8k/s

SndbufErrors: 0

InCsumErrors: 0

这意味着虽然NIC能够将数据包发送到内核,但是内核不能将数据包发给应用程序。在我们的case中,只能提供440 kpps,其余的390 kpps + 123 kpps的下降是由于应用程序接收它们不够快。

4.多线程接收

我们需要扩展接收者应用程序。最简单的方式是利用多线程接收,但是不管用:

Shell

sender$ taskset -c 1,2 ./udpsender 192.168.254.1:4321 192.168.254.2:4321

receiver$ taskset -c 1,2 ./udpreceiver1 0.0.0.0:4321 2

0.495M pps 15.108MiB / 126.733Mb

0.480M pps 14.636MiB / 122.775Mb

0.461M pps 14.071MiB / 118.038Mb

0.486M pps 14.820MiB / 124.322Mb

接收性能较于单个线程下降了,这是由UDP接收缓冲区那边的锁竞争导致的。由于两个线程使用相同的套接字描述符,它们花费过多的时间在UDP接收缓冲区的锁竞争。这篇论文详细描述了这一问题。

看来使用多线程从一个描述符接收,并不是最优方案。

5. SO_REUSEPORT

幸运地是,最近有一个解决方案添加到 Linux 了 —— SO_REUSEPORT 标志位(flag)。当这个标志位设置在一个套接字描述符上时,Linux将允许许多进程绑定到相同的端口,事实上,任何数量的进程将允许绑定上去,负载也会均衡分布。

有了SO_REUSEPORT,每一个进程都有一个独立的socket描述符。因此每一个都会拥有一个专用的UDP接收缓冲区。这样就避免了以前遇到的竞争问题:

Shell

1

2

3

4

receiver$ taskset -c 1,2,3,4 ./udpreceiver1 0.0.0.0:4321 4 1

1.114M pps 34.007MiB / 285.271Mb

1.147M pps 34.990MiB / 293.518Mb

1.126M pps 34.374MiB / 288.354Mb

现在更加喜欢了,吞吐量很不错嘛!

更多的调查显示还有进一步改进的空间。即使我们开始4个接收线程,负载也会不均匀地分布:

两个进程接收了所有的工作,而另外两个根本没有数据包。这是因为hash冲突,但是这次是在SO_REUSEPORT层。

结束语

我做了一些进一步的测试,完全一致的RX队列,接收线程在单个NUMA节点可以达到1.4Mpps。在不同的NUMA节点上运行接收者会导致这个数字做多下降到1Mpps。

总之,如果你想要一个完美的性能,你需要做下面这些:

确保流量均匀分布在许多RX队列和SO_REUSEPORT进程上。在实践中,只要有大量的连接(或流动),负载通常是分布式的。

需要有足够的CPU容量去从内核上获取数据包。

To make the things harder, both RX queues and receiver processes should be on a single NUMA node.

为了使事情更加稳定,RX队列和接收进程都应该在单个NUMA节点上。

虽然我们已经表明,在一台Linux机器上接收1Mpps在技术上是可行的,但是应用程序将不会对收到的数据包做任何实际处理——甚至连看都不看内容的流量。别太指望这样的性能,因为对于任何实际应用并没有太大用处。

计算机网络技术毕业论文 5000字

计算机论文

计算机网络在电子商务中的应用

摘要:随着计算机网络技术的飞进发展,电子商务正得到越来越广泛的应用。由于电子商务中的交易行为大多数都是在网上完成的, 因此电子商务的安全性是影响趸易双方成败的一个关键因素。本文从电子商务系统对计算机网络安全,商务交易安全性出发,介绍利用网络安全枝术解决安全问题的方法。

关键词:计算机网络,电子商务安全技术

一. 引言

近几年来.电子商务的发展十分迅速 电子商务可以降低成本.增加贸易机会,简化贸易流通过程,提高生产力,改善物流和金流、商品流.信息流的环境与系统 虽然电子商务发展势头很强,但其贸易额所占整个贸易额的比例仍然很低。影响其发展的首要因素是安全问题.网上的交易是一种非面对面交易,因此“交易安全“在电子商务的发展中十分重要。可以说.没有安全就没有电子商务。电子商务的安全从整体上可分为两大部分.计算机网络安全和商务交易安全。计算机网络安全包括计算机网络设备安全、计算机网络系统安全、数据库安全等。其特征是针对计算机网络本身可能存在的安全问题,实施网络安全增强方案.以保证计算机网络自身的安全性为目标。商务安全则紧紧围绕传统商务在Interne'(上应用时产生的各种安全问题.在计算机网络安全的基础上.如何保障电子商务过程的顺利进行。即实现电子商务的保密性.完整性.可鉴别性.不可伪造性和不可依赖性。

二、电子商务网络的安全隐患

1窃取信息:由于未采用加密措施.数据信息在网络上以明文形式传送.入侵者在数据包经过的网关或路由器上可以截获传送的信息。通过多次窃取和分析,可以找到信息的规律和格式,进而得到传输信息的内容.造成网上传输信息泄密

2.篡改信息:当入侵者掌握了信息的格式和规律后.通过各种技术手段和方法.将网络上传送的信息数据在中途修改 然后再发向目的地。这种方法并不新鲜.在路由器或者网关上都可以做此类工作。

3假冒由于掌握了数据的格式,并可以篡改通过的信息,攻击者可以冒充合法用户发送假冒的信息或者主动获取信息,而远端用户通常很难分辨。

4恶意破坏:由于攻击者可以接入网络.则可能对网络中的信息进行修改.掌握网上的机要信息.甚至可以潜入网络内部.其后果是非常严重的。

三、电子商务交易中应用的网络安全技术

为了提高电子商务的安全性.可以采用多种网络安全技术和协议.这些技术和协议各自有一定的使用范围,可以给电子商务交易活动提供不同程度的安全保障。

1.防火墙技术。防火墙是目前主要的网络安全设备。防火墙通常使用的安全控制手段主要有包过滤、状态检测、代理服务 由于它假设了网络的边界和服务,对内部的非法访问难以有效地控制。因此.最适合于相对独立的与外部网络互连途径有限、网络服务种类相对集中的单一网络(如常见的企业专用网) 防火墙的隔离技术决定了它在电子商务安全交易中的重要作用。目前.防火墙产品主要分为两大类基于代理服务方式的和基于状态检测方式的。例如Check Poim Fi rewalI-1 4 0是基于Unix、WinNT平台上的软件防火墙.属状态检测型 Cisco PIX是硬件防火墙.也属状态检测型。由于它采用了专用的操作系统.因此减少了黑客利用操作系统G)H攻击的可能性:Raptor完全是基于代理技术的软件防火墙 由于互联网的开放性和复杂性.防火墙也有其固有的缺点(1)防火墙不能防范不经由防火墙的攻击。例如.如果允许从受保护网内部不受限制地向外拨号.一些用户可以形成与Interne'(的直接连接.从而绕过防火墙:造成一个潜在的后门攻击渠道,所以应该保证内部网与外部网之间通道的唯一性。(2)防火墙不能防止感染了病毒的软件或文件的传输.这只能在每台主机上装反病毒的实时监控软件。(3)防火墙不能防止数据驱动式攻击。当有些表面看来无害的数据被邮寄或复制到Interne'(主机上并被执行而发起攻击时.就会发生数据驱动攻击.所以对于来历不明的数据要先进行杀毒或者程序编码辨证,以防止带有后门程序。

2.数据加密技术。防火墙技术是一种被动的防卫技术.它难以对电子商务活动中不安全的因素进行有效的防卫。因此.要保障电子商务的交易安全.就应当用当代密码技术来助阵。加密技术是电子商务中采取的主要安全措施, 贸易方可根据需要在信息交换的阶段使用。目前.加密技术分为两类.即对称加密/对称密钥加密/专用密钥加密和非对称加密/公开密钥加密。现在许多机构运用PKI(punickey nfrastructur)的缩写.即 公开密钥体系”)技术实施构建完整的加密/签名体系.更有效地解决上述难题.在充分利用互联网实现资源共享的前提下从真正意义上确保了网上交易与信息传递的安全。在PKI中.密钥被分解为一对(即一把公开密钥或加密密钥和一把专用密钥或解密密钥)。这对密钥中的任何一把都可作为公开密钥(加密密钥)通过非保密方式向他人公开.而另一把则作为专用密钥{解密密钥)加以保存。公开密钥用于对机密?6?11生息的加密.专用密钥则用于对加信息的解密。专用密钥只能由生成密钥对的贸易方掌握.公开密钥可广泛发布.但它只对应用于生成该密钥的贸易方。贸易方利用该方案实现机密信息交换的基本过程是 贸易方甲生成一对密钥并将其中的一把作为公开密钥向其他贸易方公开:得到该公开密钥的贸易方乙使用该密钥对机密信息进行加密后再发送给贸易方甲 贸易方甲再用自己保存的另一把专用密钥对加密后的信息进行解密。贸易方甲只能用其专用密钥解密由其公开密钥加密后的任何信息。

3.身份认证技术。身份认证又称为鉴别或确认,它通过验证被认证对象的一个或多个参数的真实性与有效性 来证实被认证对象是否符合或是否有效的一种过程,用来确保数据的真实性。防止攻击者假冒 篡改等。一般来说。用人的生理特征参数f如指纹识别、虹膜识别)进行认证的安全性很高。但目前这种技术存在实现困难、成本很高的缺点。目前,计算机通信中采用的参数有口令、标识符 密钥、随机数等。而且一般使用基于证书的公钥密码体制(PK I)身份认证技术。要实现基于公钥密码算法的身份认证需求。就必须建立一种信任及信任验证机制。即每个网络上的实体必须有一个可以被验证的数字标识 这就是 数字证书(Certifi2cate)”。数字证书是各实体在网上信息交流及商务交易活动中的身份证明。具有唯一性。证书基于公钥密码体制.它将用户的公开密钥同用户本身的属性(例如姓名,单位等)联系在一起。这就意味着应有一个网上各方都信任的机构 专门负责对各个实体的身份进行审核,并签发和管理数字证书,这个机构就是证书中心(certificate authorities.简称CA}。CA用自己的私钥对所有的用户属性、证书属性和用户的公钥进行数字签名,产生用户的数字证书。在基于证书的安全通信中.证书是证明用户合法身份和提供用户合法公钥的凭证.是建立保密通信的基础。因此,作为网络可信机构的证书管理设施 CA主要职能就是管理和维护它所签发的证书 提供各种证书服务,包括:证书的签发、更新 回收、归档等。

4.数字签名技术。数字签名也称电子签名 在信息安全包括身份认证,数据完整性、不可否认性以及匿名性等方面有重要应用。数字签名是非对称加密和数字摘要技术的联合应用。其主要方式为:报文发送方从报文文本中生成一个1 28b it的散列值(或报文摘要),并用自己的专用密钥对这个散列值进行加密 形成发送方的数字签名:然后 这个数字签名将作为报文的附件和报文一起发送给报文的接收方 报文接收方首先从接收到的原始报文中计算出1 28bit位的散列值(或报文摘要).接着再用发送方的公开密钥来对报文附加的数字签名进行解密 如果两个散列值相同 那么接收方就能确认该数字签名是发送方的.通过数字签名能够实现对原始报文的鉴别和不可抵赖性。

四、结束语

电子商务安全对计算机网络安全与商务安全提出了双重要求.其复杂程度比大多数计算机网络都高。在电子商务的建设过程中涉及到许多安全技术问题 制定安全技术规则和实施安全技术手段不仅可以推动安全技术的发展,同时也促进安全的电子商务体系的形成。当然,任何一个安全技术都不会提供永远和绝对的安全,因为网络在变化.应用在变化,入侵和破坏的手段也在变化,只有技术的不断进步才是真正的安全保障。

参考文献:

[1]肖满梅 罗兰娥:电子商务及其安全技术问题.湖南科技学院学报,2006,27

[2]丰洪才 管华 陈珂:电子商务的关键技术及其安全性分析.武汉工业学院学报 2004,2

[3]阎慧 王伟:宁宇鹏等编著.防火墙原理与技术[M]北京:机械工业出版杜 2004

基于udp的放大攻击

一、系统的影响

某些依赖于用户数据报协议(User Datagram Protocol, UDP)的应用层协议已被识别为潜在的攻击载体。这些包括:

域名系统,

网络时间协议(NTP)

无连接轻量级目录访问协议(CLDAP),

字符生成协议(CharGEN)

简单服务发现协议,

BitTorrent,

简单网络管理协议版本2 (SNMPv2)

Kad,

端口映射/远程过程调用(RPC),

Quote of the Day(QOTD)

多播域名系统(mDNS),

网络基本输入输出系统(NetBIOS)

Quake 网络协议,

流协议,

路由信息协议版本1 (RIPv1)

轻量级目录访问协议(LDAP),

简单文件传输协议(TFTP)和

Memcached,

以及Web服务动态发现(WS-Discovery)。

二、概述

分布式反射拒绝服务(DRDoS)是分布式拒绝服务(DDoS)攻击的一种形式,它依赖于可公开访问的UDP服务器和带宽放大因子(BAFs),以UDP流量淹没受害者的系统。

三、描述

根据设计,UDP是一个不验证源互联网协议(IP)地址的无连接协议。除非应用层协议使用对策,如在互联网语音协议中会话发起,否则攻击者可以很容易地伪造IP包数据报(与包交换网络相关联的基本传输单元)以包括任意源IP地址。当许多UDP数据包的源IP地址被伪造成受害者IP地址时,目标服务器(或放大器)会响应受害者(而不是攻击者),从而产生反射拒绝服务(DoS)攻击。

UDP协议的某些命令会引发比初始请求大得多的响应。以前,攻击者受到直接发送到目标的数据包的线性数量的限制而进行DoS攻击;现在一个包可以产生10到100倍的原始带宽。这被称为放大攻击,当与大规模的反射式DoS攻击结合使用多个放大器并针对单一受害者时,DDoS攻击就可以相对容易地进行。

放大攻击的潜在效果可以通过BAF来衡量,BAF可以计算为放大器为响应请求而发送的UDP有效载荷字节数与请求的UDP有效载荷字节数的比较。

下面是已知协议及其相关的BAFs的列表。CISA感谢Christian Rossow提供了这些信息。更多关于BAFs的信息,请看Christian的博客以及相关的研究成果。

2015年3月,软件工程学会CERT协调中心发布了漏洞说明VU#550620,描述了mDNS在DRDoS攻击中的使用。攻击者可以通过发送比设备能处理的更多的信息来利用mDNS,从而导致DoS状态。

2015年7月,Akamai技术公司的Prolexic安全工程和研究团队(PLXsert)发布了一份威胁报告,称使用RIPv1的DRDoS攻击激增。恶意参与者通过特别设计的请求查询利用RIPv1的行为进行DDoS反射。

2015年8月,3级威胁研究实验室报告了一种使用portmap的新型DRDoS攻击。攻击者利用portmap服务的行为,通过欺骗请求向受害者的网络发送UDP流量。

2016年10月,Corero Network Security报告了一场新的DDoS扩增攻击,利用LDAP目录服务服务器攻击其客户。

2017年11月,Netlab 360报告称,CLDAP目前是第三大最常见的DRDoS攻击,仅次于DNS和NTP攻击。

2018年2月,SENKI报告了基于memcached的反射DDoS攻击(通过UDP/TCP端口11211)的增加,并达到了前所未有的放大系数。

在2019年9月,Akamai报告了利用WS-Discovery协议(通过TCP/UDP端口3702)的DDoS攻击。

四、影响

攻击者可以利用此警报中提供UDP协议的大型服务器的带宽和相对信任,向受害者提供不需要的流量并创建DDoS攻击。

五、解决方案

检测

检测DRDoS攻击并不容易,因为它们使用了提供UDP服务的大型可信服务器。这些可利用服务的网络运营商可以应用传统的DoS缓解技术。要检测DRDoS攻击,请注意对特定IP地址的非正常大响应,这可能表明攻击者正在使用该服务。

DRDoS攻击的受害者可以做一些事情来检测这种活动并作出反应:

1、检测和警报大UDP数据包到更高的命令端口。

2、检测和警告任何非状态UDP数据包。(下面是一个简单的Snort示例。这种方法需要针对每个带有白名单和已知服务的环境进行定制。

3、上游供应商应更新与下游客户的联系方式和方法,通过网络发送警报。

一般而言,互联网服务供应商(ISPs)的网络和服务器管理员应采用以下最佳做法,以避免成为放大器节点:

1、使用网络流检测欺骗包。(请参阅下面的缓解部分,了解在阻止欺骗流量之前验证该流量的信息。)

2、使用网络流或其他总结的网络数据来监视对有风险的UDP服务的异常数量的请求。

3、使用网络流量检测服务异常(例如,每包字节数和每秒数据包异常)。

缓解

以下步骤可以帮助减轻DRDoS攻击:

1、使用有状态UDP检查(如反射访问控制列表)来减少对边界防火墙或边界路由器上的关键服务的影响。[13]

2、使用边界网关协议(BGP)来创建一个远程触发的黑洞,最好与上游提供商或isp合作。[14]

3、维护主要上游供应商紧急联系人列表,以协调对攻击的响应。上游供应商应与下游客户协调开展缓解措施。

一般来说,ISP网络和服务器管理员应该使用以下最佳实践来避免成为放大器节点:

1、定期更新软件和配置以拒绝或限制滥用(例如,DNS响应率限制)。[15] [16] [17]

2、禁用和移除不需要的服务,或拒绝通过internet访问本地服务。

3、使用udp的协议,如:流量和路由设备上的服务质量(QoS)——以支持基于网络的速率——限制在互联网上提供的合法服务。

4、与客户供应商和制造商合作,确保安全配置和软件。

作为互联网服务供应商,为避免滥用互联网资源:

1、使用ingress过滤来阻止欺骗包(请参阅欺骗器项目[19]和IETF BCP 38和BCP 84指南)。

2、对UDP服务请求使用流量调整,以确保对internet资源的重复访问不会被滥用。

wireshark 仅仅显示UDP命令

应该是你过滤规则的问题

建议改一下这个框里面填写的过滤规则

关于中国有些所谓的黑客

黑客的真正含义!!

Jargon File中对“黑客”一词给出了很多个定义,大部份必须是技术上的行家或热衷于解决问题、克服限制的人。如果你想知道如何成为一名黑客,那么好,只有两方面是重要的:态度和技术

长久以来,存在一个专家级程序员和网络高手的共享文化社群,其历史可以追溯到几十年前第一台分时共享的小型机(minicomputer)和最早的ARPAnet实验时期。这个文化的参与者们创造了“黑客”这个词。 黑客们建起了Internet,创造出我们现在使用的UNIX作业系统,他们也使Usenet运作起来,并且让World Wide Web动起来。如果你是这个文化的一部分,如果你对这些种种有所供献,而且这个圈内的其它成员也认识你,并称你为黑客,那麽你就是一位黑客。

黑客精神并不仅仅局限于软件黑客文化圈中。有些人同样以黑客态度对待其它事情如电子和音乐---事实上,你可以在任何较高级别的科学和艺术中发现它。软件黑客们识别出这些在其他领域同类并把他们也称作黑客---有人宣称黑客实际上是独立于他们工作领域的。 但在本文中,我们将注意力集中在软件黑客的技术和态度,以及发明了“黑客”一词的这个共享文化传统之上。

另外还有一群人,他们也很大声的称自己是黑客,实际上他们却不是。他们是一些蓄意破坏计算机和电话系统的人(多数是青春期的少年)。真正的黑客把这些人叫做“骇客”(cracker),并且不愿意和他们在一起做任何事。多数真正的黑客认为骇客们是些不负责任的懒家伙,并且不够光明正大。专门以破坏别人安全为目的的行为并不能使你成为一名黑客, 正如拿根铁丝能打开汽车并不能使你成为一个汽车工程师。不幸的是,很多记者和作家往往错把“骇客”当成黑客,这种做法让真正的黑客很愤怒。

黑客和骇客之间最主要的不同是:黑客们创造新东西,而骇客们破坏东西。

如果你想成为一名黑客,继续读下去。如果你想做一个骇客,去读 alt.2600 新闻组,并当你发现你并不像自己想象的那么聪明的时候去坐5到10年的监狱。关于骇客,我要说的就只有这些了。

黑客的态度

黑客们们解决了问题并创造新东西,他们相信自由并自愿的互相帮助。

要想被认为是一名黑客,你必须发自内心的表现出这种态度。要想很自发的表现出这种态度,你就不得不先完全认同这些态度。

但是如果你想*培养黑客态度当作一种能在黑客圈中得到承认的途径,那就大错特错了。因为由衷的接受这些态度对你是自己非常重要,有助于你学习,并维持你的活力。同所有有创造性的艺术一样,成为大师的最有效方法就是学习大师的精神,并不只是学习知识和情绪。

所以,如果你想做一名黑客,请重复以下事情直到你完全领会它们:

1、这世界充满待解决的迷人问题

做一名黑客是有很多乐趣,但这是一种因为努力得到成果所带来的快乐。这些努力需要动力。成功的运动员从健壮体魄,挑战自我极限中汲取动力。同样,做黑客,你必须要能从解决问题、精进技术、和运用知识的过程中感受到一种悸动。如果你还不是这类人又想做黑客,你就要设法成为这样的人。否则你会发现,你的黑客热情会被其他诱惑无情地吞噬掉---如金钱、性和社会上的虚名。

(同样你必须对你自己的学习能力建立信心---相信尽管你对某问题所知不多,但如果你一点一点地学习、试探,你最终会掌握并解决它。)

2、 一个问题不应该被解决两次

富创造力的头脑是贵重而有限的资源。这个世界有这么多迷人的新问题在那等着被解决,头脑不该被浪费在重新发明轮子这些事情上。 作为一名黑客,你必须相信其他黑客的思考时间是宝贵的---因此共享信息,解决问题并发布结果给其他黑客几乎是一种道义,这样其他人就可以去解决新问题而不是重复地对付旧问题。

(你不必认为你一定要把你的发明创造公布出去,但这样做的黑客是赢得大家尊敬最多的人。卖些钱来给自己养家糊口,买房买车买计算机甚至发大财和黑客价值也是相容的,只要你别忘记你还是个黑客。)

3、无聊和单调的工作是罪恶

黑客们永远不该做一些无聊而单调并且愚蠢的反复性工作,因为当这种事情发生时就意味着他们没有在做他们该做的事情---解决新问题。这样的浪费对任何人而言都是一种伤害。因此,无聊单调的工作不只是无趣而己,它们是极大的犯罪。 要想做的象个黑客,你必须完全相信这点并尽可能多地将乏味的工作自动化,不仅为你自己,也为了其他人(尤其是其他黑客们)。

(对此有一个明显的例外。黑客们有时也做一些重复性的枯燥工作以进行“脑力休息”,或是为练熟了某个技巧,或是获得一些除此无法获得的经验。但这是他自己的选择---有脑子的人不应该被迫做无聊的活儿。)

4、自由就是好

黑客们是天生的反权威主义者。任何能向你发命令的人会迫使你停止解决令你着迷的问题,同时,按照权威的一般思路,他通常会给出一些极其愚昧的理由。因此,不论何时何地,任何权威,只要他压迫你或其他黑客,就要和他斗到底。

(这并非说任何权力都不必要。儿童需要监护,罪犯也要被看管起来。 如果服从命令得到某种东西比起用其他方式得到它更节约时间,黑客会同意接受某种形式的权威。但这是一个有限的、特意的交易;权力想要的那种个人服从不是你的给予,而是无条件的服从。)

权力喜爱审查和保密。他们不信任自愿的合作和信息共享---他们只喜欢由他们控制的合作。因此,要想做的象个黑客,你得对审查、保密,以及使用武力或欺骗去压迫人们的做法有一种本能的反感和敌意。

5、态度不能替代能力

要做一名黑客,你必须培养起这些态度。但只具备这些态度并不能使你成为一名黑客,就象这并不能使你成为一个运动健将和摇滚明星一样。成为一名黑客需要花费智力,实践,奉献和辛苦。

因此,你必须学会不相信态度,并尊重各种各样的能力。黑客们不会为那些故意装模做样的人浪费时间,但他们却非常尊重能力---尤其是做黑客的能力,不过任何能力总归是好的。具备很少人才能掌握的技术方面的能力尤其为好,而具备那些涉及脑力、技巧和聚精会神的能力为最好。

如果你尊敬能力,你会享受提高自己能力的乐趣---辛苦的工作和奉献会变成一种高度娱乐而非*役。 要想成为一名黑客,这一点非常重要。

基本黑客技术

黑客态度是重要的,但技术更加重要。态度无法替代技术,在你被别的黑客称为黑客之前,有一套基本的技术你必须掌握。 这套基本技术随着新技术的出现和老技术的过时也随时间在缓慢改变。例如,过去包括使用机器码编程,而知道最近才包括了HTML语言。但现在明显包括以下技术:

1、学习如何编程

这当然是最基本的黑客技术。如果你还不会任何计算机语言,我建议你从Python开始。它设计清晰,文档齐全,对初学者很合适。尽管是一门很好的初级语言,它不仅仅只是个玩具。它非常强大,灵活,也适合做大型项目。

但是记住,如果你只会一门语言,你将不会达到黑客所要求的技术水平,甚至也不能达到一个普通程序员的水平---你需要学会如何以一个通用的方法思考编程问题,独立于任何语言。要做一名真正的黑客,你需要学会如何在几天内通过一些手册,结合你现在所知,迅速掌握一门新语言。这意味着你应该学会几种不同的语言。

如果要做一些重要的编程,你将不得不学习C语言,Unix的核心语言。其他对黑客而言比较重要的语言包括Perl和LISP。 Perl很实用,值得一学;它被广泛用于活动网页和系统管理,因此即便你从不用Perl写程序,至少也应该能读懂它。 LISP 值得学习是因为当你最终掌握了它你会得到丰富的经验;这些经验使你在以后的日子里成为一个更好的程序员,即使你实际上可能很少使用LISP本身。

当然,实际上你最好四种都会。 (Python, C, Perl, and LISP). 除了是最重要的四种基本语言,它们还代表了四种非常不同的编程方法,每种都会让你受益非浅。

这里我无法完整地教会你如何编程---这是个复杂的活儿。但我可以告诉你,书本和课程也不能作到。几乎所有最好的黑客都是自学成材的。真正能起作用的就是去亲自读代码和写代码。

学习如何编程就象学习用自然语言写作一样。最好的做法是读一些大师的名著,试着自己写点东西,再读些,再写点,又读些,又写点....如此往复,直到你达到自己在范文中看到的简洁和力量。

过去找到好的代码去读是困难的,因为很少有大型程序的可用源代码能让新手练手。这种状况已经得到了很大的改善;现在有很多可用的开放源码软件,编程工具和操作系统(全都有黑客写成)。这使我们自然地来到第二个话题...

2、得到一个开放源码的Unix并学会使用、运行它

我假设你已经拥有了一台个人计算机或者有一个可用的( 今天的孩子们真幸福 :-) )。新手们最基本的一步就是得到一份Linux或BSD-Unix,安装在个人计算机上,并运行它。

当然,这世界上除了Unix还有其他操作系统。但它们都是以二进制形式发送的---你无法读到它的源码,更不可能修改它。尝试在DOS或Windows的机器上学习黑客技术,就象是在腿上绑了铁块去学跳舞。

除此之外,Unix还是Internet的操作系统。你可以不知道Unix而学会用Internet,但不懂它你就无法成为一名Internet黑客。因为这个原因,今天的黑客文化在很大程度上是以Unix为中心的。(这点并不总是真的,一些很早的黑客对此很不高兴,但Unix和Internet之间的共生关系已是如此之强,甚至连微软也无可奈何)

所以,装一个Unix---我个人喜欢Linux,不过也有其他选择。(你也可以在同一台机器上同时运行DOS,Windows和Linux)学会它。运行它。用它跟Internet对话。读它的代码。试着去修改他。你会得到比微软操作系统上好的多的编程工具(包括C,Lisp, Python, and Perl),你会得到乐趣,并将学到比你想象的更多知识。

3、学会如何使用WWW和写HTML

大多黑客文化建造的东西都在你看不见的地方发挥着作用,帮助工厂、办公室和大学正常运转,表面上很难看到它对他人的生活的影响。Web是一个大大的例外。即便政客也同意,这个巨大而耀眼的黑客玩具正在改变整个世界。单是这个原因(还有许多其它的), 你就需要学习如何掌握Web。

这并不是仅仅意味着如何使用浏览器(谁都会),而是要学会如何写HTML,Web的标记语言。如果你不会编程,写HTML会教你一些有助于学习的思考习惯。因此,先建起自己的主页。

但仅仅建一个主页也不能使你成为一名黑客。 Web里充满了各种网页。多数是无意义的,零信息量垃圾。

要想有价值,你的网页必须有内容---必须有趣或对其它黑客有用。这样,我们来到下一个话题....

黑客文化中的地位

象大部分不涉及金钱的文化一样,黑客王国的运转*声誉维护。你设法解决有趣的问题,但它们到底多有趣,你的解法有多好,是要有那些和你具有同样技术水平的人或比你更牛的人去评判的。

相应地,当你在玩黑客游戏时,你知道,你的分数要*其他黑客对你的技术的评估给出。(这就是为什么只有在其它黑客称你为黑客是,你才算得上是一名黑客)这个事实常会被黑客是一项孤独的工作这一印象所减弱;它也会被另一个黑客文化的禁忌所减弱(此禁忌的效力正在减弱但仍很强大):拒绝承认自我或外部评估是一个人的动力。

特别地,黑客王国被人类学家们称为一种精英文化。在这里你不是凭借你对别人的统治来建立地位和名望,也不是*美貌,或拥有其他人想要的东西,而是*你的奉献。尤其是奉献你的时间,你的才智和你的技术成果。

要获得其他黑客的尊敬,你可以做以下五种事情:

1、写开放源码的软件

第一个(也是最基本和传统的)是写些被其他黑客认为有趣或有用的程序,并把程序的原代码公布给大家共享。

(过去我们称之为“自由软件-free software”,但这却使很多不知free的精确含义的人感到不解。现在我们很多人使用“开放源码-open source”这个词)

黑客王国里最受尊敬的大人物是那些写了大型的、具有广泛用途的软件,并把它们公布出去,使每人都在使用他的软件的人。

2、帮助测试并修改开放源码的软件

黑客们也尊敬也那些使用、测试开放源码软件的人。在这个并非完美的世界上,我们不可避免地要花大量软件开发的时间在测试和抓臭虫阶段。 这就是为什么任何开放源码的作者稍加思考后都会告诉你好的beta测试员象红宝石一样珍贵。 (他知道如何清楚描述出错症状,很好地定位错误,能忍受快速发布的软件中的bug,愿意使用一些简单的诊断工具) 甚至他们中的一个能判断出哪个测试阶段是延长的、令人精疲力尽的噩梦,哪个只是一个有益健康的玩意儿。

如果你是个新手,试着找一个赶兴趣的正在开发的程序,作一个好的beta测试员。从帮着测试,到帮着抓臭虫,到最后帮着改程序,你会不断进步。以后你写程序时,会有别人来帮你,你就得到了你当初善举的回报。

3、公布有用的信息

另一个好事是收集整理网页上有用有趣的信息或文档如FAQ。许多主要FAQ的维护者和其他开放源码的作者一样受到大家的尊敬。

4、帮助维护基础设施的运转

黑客文化是*自愿者运转的。要使Internet能正常工作,就要有大量枯燥的工作不得不去完成----管理mail list,newsgroup,维护大量文档,开发RFC和其它技术标准等等。做这类事情的人会得到很多人的尊敬,因为每人都知道这些事情是耗时耗力的苦役,不象编码那样好玩。做这些事情需要毅力。

5、为黑客文化本身服务

最后,你可以为这个文化本身服务(例如象我这样,写一个“如何成为黑客”的初级教程 ), 这并非一定要在你已经在这里呆了很久,精通所有以上4点,获得一定声誉后才能去做。

黑客文化没有领袖。精确地说,它确实有些文化英雄和部落长者和历史学家和发言人。若你在这圈内呆的够长,你或许成为其中之一。

记住:黑客们不相信他们的部落长者的自夸的炫耀,因此很明显地去追求这种名誉是危险的。你必须具备基本的谦虚和优雅。

黑客和怪人(Nerd)的联系

同流行的传说相反,做一名黑客并不一定要你是个怪人。然而,很多黑客都是怪人。做一个出世者有助于你集中精力进行更重要的事情,如思考和编程。因此,很多黑客都愿意接受“怪人”这个标签,更有甚者愿意使用“傻子(geek)”一词并自以为豪---这是宣布他们与主流社会不合作的声明。

如果你能集中足够的精力来做好黑客同时还能有正常的生活,这很好。今天作到这一点比我在1970年代是个新手是要容易的多。今天主流文化对技术怪人要友善得多。甚至有更多的人意识到黑客通常更富爱心,是块很好的做恋人和配偶的材料。

如果你因为生活上不如意而为做黑客所吸引,那也没什么---至少你不会分神了。或许以后你会找到自己的另一半。

风格的意义

重申一下,做一名黑客,你必须进入黑客精神之中。当你不在计算机边上时,你仍然有很多事情可做。它们并不能替代真正的编程(没有什么能替代编程),但很多黑客都那么做,并感到它们与黑客精神存在一种本质的关联。

·阅读科幻小说。参加科幻小说讨论会。(一个很好的寻找黑客的场合)

·研究禅宗,或练功习武。(钢铁般的纪律似乎很重要)

·训练你的耳朵对音乐的分析能力,试著欣赏某种特殊的音乐,并好好的玩一些乐器或者唱歌。

·提高对双关语的鉴赏(增加对於俏皮话和文字游戏的认识)

·学会流畅地用母语进行写作。(令人惊讶的时,我所知道的所有最棒的黑客,都是很不错的作家)

这些事情,你做的越多,你就越适合做黑客。至于为什么偏偏是这些事情,原因并不很清楚,但它们都涉及到了左-右脑的综合技巧,这似乎是关键所在。(黑客们既需要清晰的逻辑思维,有时也需要强烈的跳出逻辑之外的直觉)

最后,有一些事千万不要做:

·不要使用愚蠢的,过于哗众取宠的ID

·不要自称为网络崩客(punk) ,也不要对那些人浪费时间

·不要寄出充满拼写和语法错误的email,或张贴错误百出的文章

做以上的事情,只是为你招来大家的责难和批评,会大大损害你的声誉。黑客们个个记忆超群---你将需要数年的时间才有办法让他们重新接受你

(责任编辑:IT教学网)

更多

推荐浏览下载文章