COMP6331/3310-无代写-Assignment3
时间:2024-05-19
Tutor:Kyle
COMP6331/3310
Assignment3
1. ANU 硕士学位 Master of computing
2. 注重基础,循序渐进
3. 央企后端Java开发
4. 创业公司技术合伙人
5. 阿里-淘天集团开发
计算机网络——物理层1
计算机网络——数据链路层2
计算机网络——网络层3
计算机网络——运输层4
计算机网络——应用层5
计算机网络现状未来发展6
CONTENT 课程目录
23
4
作业简介
作业内容解读
知识点精讲
作业难点总结
1
作业简介
作业介绍
作业标题:Testing MQTT
DDL:Tuesday 21 May 23.55 AEST (Canberra time)
题目数量: 1
提交形式: (Online- Turnitin)
作业权重: 12.5%
作业介绍
Late submissions will not be accepted, except in special circumstances. Any extensions
should be requested well before the due date, with appropriate evidence. Please use the
extension-request link on wattle rather than direct emails.
迟交作业将不被接受,除非有特殊情况。任何延期请求都应在截止日期之前提出,并
附有适当的证据。请使用Wattle上的延期请求链接,而不要直接发送电子邮件。
作业内容解读
作业内容解读
MQTT is the most common open IoT protocol being deployed today. It provides a
publisher/subscriber model, using a broker or server. It allows for an almost-unbounded number
of sources to publish information, each at their own rate, and subscribers to receive information
(and act on it). As such, it is designed to provide high-performance communication
mechanisms, with minimal delays and excellent scaling performance. We’ll use it to monitor the
performance of some imaginary system: say counting the total kilograms of minerals rushing by
on a conveyor belt, that you can control. This assignment will look at the functionality and
performance of the publishers, brokers, the network and the subscribers.
MQTT是目前部署的最常见的开放式物联网协议。它提供了一个发布者/订阅者模式,使用一个中
间人或服务器。它允许几乎无限数量的来源发布信息,每个来源都有自己的速率,而用户则接收
信息(并对其采取行动)。因此,它被设计为提供高性能的通信机制,具有最小的延迟和出色的
扩展性能。我们将用它来监控一些想象中的系统的性能:比如说计算传送带上匆匆而过的矿物的
总公斤数,你可以控制它。这项任务将考察发布者、代理服务器、网络和用户的功能和性能。
作业内容解读
This is a coding, analysis and writing assignment. You may code in C/Java/Python or any
programming language that a tutor can assess (hope that’s enough for everyone), and yes,
you may use MQTT and other helper libraries. The assessment will not rely solely on running
on your code, but more on the data gathering and your analysis. However, we will review the
code and may briefly test it against our own broker running in the usual lab-type
environments or similar. You will need to identify in your README/code any libraries you are
using.
这是一项编码、分析和写作作业。你可以用C/Java/Python或任何导师可以评估的编程语言进
行编码(希望这对每个人都足够了),你可以使用MQTT和其他辅助库。评估将不完全依赖于
在你的代码上运行,而是更多的依赖于数据收集和你的分析。我们将审查代码,并可能简要地
对我们自己的在通常的实验室型环境或类似环境中运行的代理进行简要测试。你将需要在你的
README/代码中指明你所使用的任何库。
作业内容解读
You will be submitting two things: your code and your analysis report. Note that there will be two
submission links on the Wattle course-site:
你将提交两样东西:代码和分析报告。请注意,在Wattle课程网站上会有两个提交链接
1. Your code must be submitted to wattle as a zip file, with instructions in your report on how to
compile/run the components as appropriate.
你的代码必须以zip文件的形式提交给Wattle,并在报告中提供适当的编译/运行组件的说明。
2. Your analysis report (pdf) must be submitted via TurnItIn on the wattle site, so ensure you quote
and cite sources properly.
你的分析报告(pdf)必须通过Wattle网站上的TurnItIn提交,所以确保你正确引用并正确引用来源
作业内容解读
We’re assessing your understanding of MQTT, as well as your code’s functionality in
subscribing/publishing to a broker, dealing with high message rates from a number of
sources, measuring message performance and statistics of a networked application, and
your insight to interpret what you’re seeing. You will be exploring MQTT functionality, the
quality-of-service (QoS) levels, describing how they work, why you would use different
levels, and how they perform in real-world deployments given various publishers.
我们正在评估你对MQTT的理解,你的代码在订阅/发布到代理中的功能,处理来自多个来源
的高消息率,测量消息性能和网络应用程序的统计数据,以及你解释你所看到的东西的洞察
力。你将探索MQTT功能、服务质量(QoS)级别,描述它们是如何工作的,为什么你会使用
不同的级别,以及它们在现实世界的部署中对不同发布者的表现。
作业内容解读
You will need to set up your own MQTT server/broker for you to connect to as per the specifications
below.You and your partner can share the same broker, if that suits. The Mosquitto broker is
perhaps the best choice to run on your own computer, it has binaries and/or packages for most
operating systems, but if you find a better one you can use that. It must be at least MQTT v3.1.1
compliant (MQTT v5 is not necessary).
您需要根据以下规格设置自己的MQTT服务器/代理程序,以便连接到您自己的计算机上,或者如果您
有一个单独的计算机用于代理程序和发布者,则更好。
有许多免费的代理程序可供选择,https://mqtt.org/software/ 上有一个很好的列表。
您可以通过订阅$SYS主题来测试代理程序是否正常工作,这些主题描述了服务器的情况,这将帮助
您熟悉所呈现的信息 - 您稍后将在分析中使用它们。
作业内容解读
A Publisher: 发布者
一个发布者将首先订阅(监听)一组“请求”主题,即 request/qos、request/delay
和 request/instancecount。当它看到这些主题的新值时,它将相应地开始发布。
您将同时运行5个发布者实例,分别称为pub-1至pub-5。这些将有助于压力测试代理
程序(如果您有单独的计算机,则还会测试网络)。'instancecount' 将告诉您有多
少发布者应处于活动状态,而其他则应保持安静。
每个发布者将向代理程序发送一系列简单的消息,即一个递增的计数器(0、1、2、
3,...)。它将以请求的MQTT QoS级别(0、1或2)将这些消息发布到代理程序,
并且在消息之间具有请求的延迟(0ms、1ms、2ms、4ms)的情况下持续60秒。
作业内容解读
A Publisher: 发布者
每个发布者将发布到主题 counter///,例如
counter/1/0/4 是来自 Publisher-instance-1 的 qos=0 和 delay=4 的消息。
在完成其60秒的消息突发后,每个发布者都应返回到监听“请求”主题以获取下
一轮指令。
在0ms延迟和qos=0的情况下,您的发布者应能够非常快速地发布,可能每秒
数千条消息。
作业内容解读
An Analyser 分析器
控制您的发布者的是谁?是您的分析器。
您的分析器将首先发布到 request/qos、request/delay 和 request/instancecount 主题,要求
一定数量的发布者相应地提供服务。
然后,它将在代理程序上监听指定的计数器主题,并采取下面的测量(下文),以报告发布者/代
理程序/网络组合的性能统计数据。
应该对延迟(4)、QoS(3)和实例计数(5)值进行测量,以便进行比较;在负载下可能会出
现奇怪的情况。
对代理->分析器订阅的所有三个QoS值运行它;当发布者和订阅者具有非常不同的QoS时,情况
可能会变得奇怪。更改订阅QoS时,您可能需要断开并重新连接。
是的,这样的话,就是 3*3*4*5*5=180 个测试,每个测试花费1分钟。幸运的是,您的代码可以
为您完成所有这些工作。
作业内容解读
一旦您的代码正常运行,您需要解决以下问题:
启动发布者,然后运行您的分析器。让分析器告诉代理程序您希望发布者发送什么,并按照以下方
式记录60秒的数据。
提示:(i)仅用于调试时打印到屏幕,而不是在测量时打印,否则会严重减慢代码速度并弄乱数
据。 (ii)使用计数器值来告诉您哪些消息到达或未到达,以计算下面的速率。
a. 收集统计信息,针对每个实例计数/延迟/QoS组合,测量60秒的期间:
i. 您实际接收到的所有发布者在整个期间的消息总平均速率【每秒消息数】。
ii. 您看到的消息丢失率【百分比】。(您应该看到多少消息与您应该看到的消息数量相比)
iii. 您看到的任何消息乱序率【百分比】。(即在较大的数字之后有多频繁地出现较小的数字)
iv. 与请求的延迟相比,您看到的消息之间的中间间隔的中位数【毫秒】。仅针对实际连续的计
数器值消息进行测量,在两者之间丢失任何消息时忽略间隔。
作业内容解读
一旦您的代码正常运行,您需要解决以下问题:
启动发布者,然后运行您的分析器。让分析器告诉代理程序您希望发布者发送什么,并按照以
下方式记录60秒的数据。
提示:(i)仅用于调试时打印到屏幕,而不是在测量时打印,否则会严重减慢代码速度并弄乱
数据。 (ii)使用计数器值来告诉您哪些消息到达或未到达,以计算下面的速率。
b. 在测量上述指标时,还需要执行以下操作:
i. 订阅并记录 $SYS/# 的测量数据,并确定代理程序上的任何丢失/乱序率是否与什么相关
联。(查看例如“load”,“heap”,“active clients”,“messages”下的测量数据;任何看似
相关的数据。参考例如https://mosquitto.org/man/mosquitto-8.html 获取灵感。请注意 $SYS
测量的时机,以反映您何时实际上将代理程序置于负载下)
作业内容解读
作业内容解读
报告部分
作业内容解读
在你的报告中:[大约 4-5 页的文本涵盖 Q2 和 Q3 的内容,以及任何图表]
a. 订阅某个代理以检索一些 $SYS/# 值。使用 Wireshark 捕获每个不同 QoS 级别(0、1、2)
的握手过程的示例,包括在报告中显示 Wireshark 捕获的发布/订阅的屏幕截图(过滤
MQTT)。简要解释每个 QoS 级别的传输方式,以及它对消息重复和消息顺序的含义。在报告
中简要讨论在哪些情况下会选择每个 QoS 级别。[大约 0.5 页的文本]
b. 汇总你的测量结果,以适当的表格形式和简单的图表展现,比较不同延迟和 QoS 组合的影
响。解释你期望看到的内容,特别是关于不同 QoS 级别的关系,以及你的期望是否得到了满
足。
c. 描述你预期看到的测量速率与 $SYS 主题的相关性,以及为什么会有这样的相关性,以及你是
否看到了这种相关性。
作业内容解读
QoS(Quality of Service)级别是MQTT协议中定义的一种消息传递质量的保证级别。它指定了
消息在发布和传递过程中的可靠性和可持久性。
MQTT定义了三个不同的QoS级别:
QoS 0(至多一次): 在QoS 0级别下,消息会被发布者发送一次,然后尽最大努力将其传递给
订阅者。在这个级别下,消息传递是非持久性的,发布者不会收到关于消息是否成功传递的确
认。消息传递的可靠性最低,可能存在丢失或重复传递的风险。
QoS 1(至少一次): 在QoS 1级别下,消息会被发布者至少传递一次给订阅者。如果消息没有
收到确认,发布者会重试发送消息,直到收到确认为止。这个级别下,消息传递是可靠的,但可
能会导致重复传递。
QoS 2(恰好一次): 在QoS 2级别下,消息会被确保恰好传递一次给订阅者。发布者和代理服
务器之间进行了两阶段握手,以确保消息的完整性和顺序。这个级别下,消息传递是最可靠和有
序的,但会增加额外的传递延迟和网络开销。
作业内容解读
4. Consider the broader end-to-end (internet-wide maybe) network environment, in a situation with
millions of sensors publishing regularly/irregularly to thousands of subscribers. Explain in your
report [around 1 page]
考虑更广泛的端到端(可能是全球范围)网络环境,在数百万个传感器定期/不定期地发布消息给成
千上万个订阅者的情况下。在报告中解释以下内容(大约1页):
a. What (cpu/memory/network) performance challenges there might be when using MQTT in
general, from the source publishing its messages, all the way through the network and broker to
your subscribing client application. If you lose messages, where might they be lost?
在使用MQTT时,从消息发布源到网络和代理,再到订阅客户端应用程序,可能会遇到哪些(链
路、路由器、内存/缓冲区、CPU等)性能挑战?如果丢失消息,可能会在哪个环节丢失?
b. How the different QoS levels may help, or not, in dealing with the challenges.
不同的QoS级别如何在应对这些挑战中有所帮助或没有帮助?
作业内容解读
奖励问题:
一些扩展问题,如果你愿意,可以获得多达 10% 的额外分数。
1.如果分析器在发布者看到更改的值的同时修改了请求主题会发生什么情况?你如何确保
它不会过早启动?你的代码是否有这个功能?
2.如果使用 qos=0、延迟=0ms 运行 10 个或更多发布者,会发生什么?这将取决于你计算
机的性能。
3.尝试在公共代理上,通过互联网运行此程序。结果的性能和稳定性会发生什么变化?不
要重复所有 180 个测试,只需尝试 0ms 延迟的测试,尽可能多地进行测试。
作业内容解读
• 代码清晰度和文档/注释(15%)。
别人是否可以接手、调试或添加功能?你是否解释了你的方法和选择?
• 代码订阅、正确发布/监听代理,并收集数据(15%)。
你的分析器和发布者是否有效并按规定工作?当延迟=0ms 时,你的发布者
能否以高速发布消息?分析器能否以有限的人工输入运行多个测试?
• 您的分析报告回答了上述问题(70%)。
您是否使用了 Wireshark?您是否清晰地总结了收集到的统计信息,以突出
任何有趣的事实?您是否考虑了从发布者进程到分析器进程的整个数据/消息
工作流程以及所有相关的协议开销?请注意,所有学生都将拥有不同的设置,
可能会看到非常不同的结果。
评分标准解读
知识点精讲
知识点精讲
Ref:https://image.baidu.com/search/detail?ct=503316480&z=0&ipn=d&word=MQTT&step_word=&hs=0&
知识点精讲
MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传递协议,设计用于
在低带宽和不可靠网络环境中进行高效的通信。
该协议的工作过程如下:
客户端连接:MQTT使用基于TCP/IP的客户端-服务器模型。客户端可以是发布者(Publisher)
或订阅者(Subscriber)。客户端通过建立与MQTT代理(Broker)的TCP连接来连接到MQTT
网络。
消息结构:MQTT消息由固定头部(Fixed Header)和可选的可变头部(Variable Header)和
有效载荷(Payload)组成。
知识点精讲
1. 固定头部(Fixed Header):
第一个字节包含了消息类型(Message Type)和标志位(Flags)。
标志位包括保留位(Reserved Bit)和QoS级别(QoS Level),以及发布消息的保留标志
(Retain Flag)。
2. 可变头部(Variable Header):
可变头部的存在与否取决于消息类型。某些消息类型没有可变头部。
可变头部包含了一些控制消息的参数,如主题名称(Topic Name)、消息标识符(Message
Identifier)等。
3. 有效载荷(Payload):
有效载荷是消息的实际内容,可以是任意类型的数据。
有效载荷的格式和内容根据应用程序的需求和消息类型而定。
知识点精讲
MQTT消息类型(Message Type)用于标识消息的目的和操作类型。每个MQTT消息都具有一
个消息类型,用于指示消息的用途和处理方式。下面是一些常见的MQTT消息类型:
CONNECT:客户端发送CONNECT消息以建立与MQTT代理的连接。
CONNACK:MQTT代理作为对CONNECT消息的响应发送CONNACK消息,用于确认连接请求
并返回连接状态。
PUBLISH:发布者发送PUBLISH消息来发布消息到指定的主题。
PUBACK:用于对QoS级别为1的PUBLISH消息进行确认。
知识点精讲
订阅主题:订阅者可以向MQTT代理发送订阅请求,以表明它们对特定主题(Topic)感兴趣。
主题是消息的标识符,用于在发布者和订阅者之间进行通信。
发布消息:发布者将消息发布到特定的主题上。消息可以是任意类型的数据,如传感器数据、
控制指令等。发布者将消息发送给MQTT代理。
代理传递消息:MQTT代理接收到发布者发送的消息后,根据订阅者的订阅信息,将消息传递给
对应订阅了相应主题的订阅者。代理负责管理主题和订阅者之间的消息传递。
QoS级别:MQTT支持不同的消息传递质量级别(QoS):0、1和2。QoS级别定义了消息传递
的可靠性和可持久性。发布者和订阅者可以通过指定适当的QoS级别来协商消息传递的保证级
别。
知识点精讲
消息确认:根据QoS级别,代理和客户端之间进行必要的消息确认和重传。QoS级别为1和2的
消息传递是可靠的,保证消息的传递和顺序。QoS级别为0的消息传递是尽力而为的,不保证可
靠性。
保持活动连接:MQTT支持保持活动连接,以减少每次通信时的网络开销。客户端和代理之间的
连接可以保持打开状态,以便快速传递消息,并减少重新建立连接的开销。
断开连接:客户端可以主动断开与代理的连接,或者在网络异常或超时时,代理可以断开与客
户端的连接。
知识点精讲
MQTT通过一些机制来保持活动连接,确保客户端和MQTT代理之间的持续通信。
心跳包(Keep-Alive):在MQTT连接建立时,客户端可以发送一个心跳包参数给MQTT代理。
心跳包定义了客户端和代理之间的最大空闲时间间隔。客户端定期发送PINGREQ消息给代理,
代理必须在一定时间内回复PINGRESP消息。这种方式可以检测到连接是否仍然活动,以避免
代理断开不活跃的客户端连接。
连接保持(Connection Keep-Alive):在MQTT连接建立时,客户端和代理之间的TCP连接会
保持打开状态,而不会立即关闭。这样,客户端和代理可以在需要时快速进行通信,而无需每
次都建立新的连接。保持TCP连接可以减少建立和拆除连接的开销,并提供更高的效率。
重新连接机制(Reconnection Mechanism):如果客户端的网络连接中断或与MQTT代理的
连接丢失,客户端可以尝试重新建立连接。在重新连接过程中,客户端会使用之前的会话状态
和订阅信息重新连接到代理,以恢复之前的通信状态。
持久性会话(Persistent Session):客户端可以使用持久性会话来保持订阅信息和发布者的状
态。持久性会话允许客户端在断开连接后继续保留其订阅和发布状态,并在重新连接时恢复订
阅和发布。这样可以确保在断开连接和重新连接之间的消息不会丢失。
知识点精讲
traceroute 是可以使用的指令,用以分析路由路径等信息:
traceroute
traceroute命令将开始向代理发送数据包,并记录网络路径上的跳数和响应时间。它将显示每个
跳数的IP地址和响应时间。
该指令应该运行在分析器的主机上。
知识点精讲
Paho-MQTT库
Paho-MQTT是一个流行的Python MQTT库,由Eclipse Paho项目提供支持。它提供了一个轻量
级的MQTT客户端实现,使您能够方便地进行MQTT通信。
特点:
支持MQTT协议的发布和订阅操作。
提供多种QoS级别(0、1和2)以适应不同的消息传递需求。
支持TLS/SSL加密和认证,以确保安全的通信。
可以轻松地与各种MQTT代理和服务器进行连接。
知识点精讲
安装库:使用pip命令安装Paho-MQTT库
pip install paho-mqtt
引入库:在Python代码中引入Paho-MQTT库
import paho.mqtt.client as mqtt
创建客户端:创建MQTT客户端对象并设置回调函数
client = mqtt.Client()
连接到代理:使用客户端对象连接到MQTT代理
client.connect("broker.example.com", 1883, 60)
知识点精讲
订阅主题:使用客户端对象订阅感兴趣的主题
client.subscribe("topic/example")
定义回调函数:定义用于处理接收到的消息的回调函数
def on_message(client, userdata, msg):
print(msg.topic + " " + str(msg.payload))
client.on_message = on_message
知识点精讲
开始循环:启动客户端的循环以保持与代理的连接,并处理接收到的消息
client.loop_start()
发布消息:使用客户端对象发布消息到指定主题
client.publish("topic/example", "Hello, MQTT!")
断开连接:在程序结束时,使用客户端对象断开与代理的连接
client.disconnect()
重难点总结
作业重难点总结 & 建议
1. 报告的占比远高于代码
2. 回答问题没有思路及时查阅资料
3. 代码查重问题要重视