Files
labs/01-basics/lab14/lab.txt
Thomas Kruse 8fdf5827e4 Add labs
2026-02-03 22:29:46 +01:00

73 lines
2.1 KiB
Plaintext

= QoS 1 Nachlieferung
Subscribe mit expliziter Client ID und "clean session" auf "false".
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_sub --debug --topic demo/qos1 --qos 1 --disable-clean-session --id demo
In separatem Terminal wird nun das Netzwerk so konfiguriert, dass es
hohe Latenzen (3 Sekunden) gibt, dies macht es leichter, zum richtigen Zeitpunkt
die Verbindung zu unterbrechen:
(falls Docker genutzt wird)
$ docker run --rm -it --net host --cap-add NET_ADMIN alpine:3
# apk -U add iptables iproute2 iproute2-ss
(ohne Docker, Debian/Ubuntu)
$ sudo apt install -y iptables iproute2
$ sudo bash
# iptables -t mangle -A POSTROUTING -o lo -p tcp --sport 1883 -j MARK --set-mark 1
# iptables -t mangle -A PREROUTING -i lo -p tcp --dport 1883 -j MARK --set-mark 1
# tc qdisc add dev lo root handle 1: prio
# tc filter add dev lo parent 1:0 protocol ip handle 1 fw flowid 1:1
# tc qdisc add dev lo parent 1:1 handle 10: netem delay 3s
Ermittlung des Ports des Subscribers:
# ss -t sport = :1883
Im ersten Terminal werden nun mehrere Nachrichten versandt:
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_pub -t demo/qos1 -q 1 -m "This is delivered. #1"
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_pub -t demo/qos1 -q 1 -m " #### This could be delivered later. #2"
Nach ca. 3 Sekunden werden die TCP Verbindungen des Subscribers im zweiten Terminal unterbrochen)
# ss -t -K sport = :60804
Optional: Im ersten Terminal wird mittels mehrfachem CTRL-C der Subscriber beendet.
Anschließend erfolgt neuer Start.
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_sub --debug -t demo/qos1 --qos 1 --disable-clean-session --id demo
Testen Sie auch, was passiert, wenn beim Neustart ein völlig anderes Topic angegeben wird -
wird die nicht erhaltene Nachricht trotzdem ausgeliefert?
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_sub --debug -t demo/othertopic --qos 1 --disable-clean-session --id demo
Anschließendes Aufräumen:
# iptables -t mangle -F
# tc qdisc del dev lo root
= Quellen
Wireshark: https://www.wireshark.org/