mDNS - Multicast Domain Name System
What is mDNS?
mDNS stands for Multicast Domain Name System. It’s a protocol that allows devices on the same local network to discover each other and resolve hostnames (like printer.local) to IP addresses without needing a central DNS server.
Why is mDNS useful?
Without mDNS, devices would need to be manually configured with IP addresses or rely on a DNS server to resolve names. mDNS makes it easy for devices to automatically find and connect to each other on local networks—especially useful in home or small office environments.
How it works (in simple steps):
Device wants to find another device – For example, your laptop wants to find a printer named printer.local.
Sends a multicast query – It sends a request to all devices on the local network asking, “Who is printer.local?”
Device responds – The printer replies with its IP address.
Connection is made – Your laptop now knows how to reach the printer and can start printing.
Where is mDNS used?
Home networks – For discovering smart devices like printers, speakers, or smart TVs.
Small offices – Where devices need to find each other without a dedicated DNS server.
IoT environments – Where many small devices need to communicate easily.
Apple’s Bonjour – A well-known implementation of mDNS used in macOS and iOS for device discovery.
Which OSI layer does this protocol belong to?
It provides services directly to applications and users.
It uses standard DNS message formats over multicast UDP.
It enables name resolution and service discovery, which are high-level functions typical of Layer 7.
Topics in this section,
In this section, you are going to learn
Terminology
Version Info
MDNS Version |
RFC |
Year |
Core Idea / Contribution |
---|---|---|---|
mDNS v1 |
|||
RFC 6762 |
2013 |
Local hostname resolution using multicast. |
|
DNS-SD |
|||
RFC 6763 |
2013 |
Service discovery over mDNS. |
|
DNS Push |
|||
RFC 8766 |
2020 |
Real-time DNS update notifications. |
|
DNS-SD Privacy |
|||
RFC 8875 |
2020 |
Privacy enhancements for service discovery. |
Setup
Setup
Query Packet
S.No |
Protocol Packets |
Description |
Size(Bytes) |
---|---|---|---|
1 |
Query Packet |
Used by a device to ask for information about a service or hostname. |
~3252 bytes |
Header |
12 |
||
Transaction ID |
Always 0x0000 in mDNS(no matching of request/responses need) |
2 |
|
Flags |
Set to 0x0000 for standard query |
2 |
|
Questions |
Number of questions in the packet |
2 |
|
Answer RRs |
Usually 0x0000 in a query |
2 |
|
Authority RRs |
Usually 0x0000 |
2 |
|
Additional RRs |
Optional; used for extra information |
2 |
|
Question Section |
~2040 bytes |
||
QName |
Domain name being queried (e.g., _http._tcp.local.) |
variable(Max 255 bytes) |
|
QType |
Type of record requested (e.g., PTR, A, AAAA, SRV, TXT) |
2 |
|
QClass |
Usually IN (Internet = 0x0001), with QU bit (0x8001) for unicast response |
2 |
Response Packet
S.No |
Protocol Packets |
Description |
Size(Bytes) |
---|---|---|---|
2 |
Response Packet |
Sent in reply to a query, containing one or more resource records. |
203 |
Header |
12 |
||
Transaction ID |
Always 0x0000 in mDNS (no matching needed) |
2 |
|
Flags |
Set to 0x8400 for a standard authoritative response |
2 |
|
Questions |
Number of questions (often 0 in responses) |
2 |
|
Answer RRs |
Number of answer records |
2 |
|
Authority RRs |
Number of authority records (optional) |
2 |
|
Additional RRs |
Number of additional records (optional) |
2 |
|
Answer Section |
|||
Name |
The domain name being answered (e.g., _http._tcp.local.) |
variable |
|
Type |
Record type (e.g., PTR, A, AAAA, SRV, TXT) |
2 |
|
Class |
Usually IN (Internet = 0x0001) |
2 |
|
TTL |
Time to live (in seconds) |
4 |
|
Data Length |
Length of the RDATA field |
2 |
|
RDATA |
The actual data (e.g., IP address, hostname, service info) |
variable |
Service Announcement
S.No |
Protocol Packets |
Description |
Size(Bytes) |
---|---|---|---|
3 |
Service Announcement |
Sent when a service comes online to announce its presence. |
180250 |
Header |
12 |
||
Transaction ID |
Always 0x0000 in mDNS |
2 |
|
Flags |
0x8400 standard response, authoritative answer |
2 |
|
Questions |
Usually 0x0000 |
2 |
|
Answer RRs |
Number of answer records (typically 4) |
2 |
|
Authority RRs |
Optional |
2 |
|
Additional RRs |
Optional |
2 |
|
Answer Section(Multiple Records) |
2 |
||
Name |
Domain name the record applies to (e.g., _http._tcp.local.). |
Variable |
|
Type |
Record type (e.g., PTR, SRV, TXT, A). |
2 |
|
PTR Record |
Maps a service type to a specific instance. |
~5060 bytes |
|
SRV Record |
Provides the hostname and port where the service is running |
~7090 bytes |
|
TXT Record |
Provides metadata about the service. |
~50100 bytes |
|
A Record |
Maps the hostname to an IPv4 address. |
~3040 bytes |
|
Class |
Usually IN (Internet = 0x0001). |
2 |
|
TTL |
Time to live in seconds (e.g., 120). |
4 |
|
Data Length |
Length of the RDATA field. |
2 |
|
RDATA |
The actual data (e.g., IP address, hostname, service metadata). |
variable |
Goodbye Packet
S.No |
Protocol Packets |
Description |
Size(Bytes) |
---|---|---|---|
4 |
Goodbye Packet |
Used to indicate that a service is going offline. |
180250 |
Header |
12 |
||
Transaction ID |
Always 0 in mDNS |
2 |
|
Flags |
Standard response, authoritative |
2 |
|
Questions |
No questions |
2 |
|
Answer RRs |
Number of records being withdrawn |
2 |
|
Authority RRs |
Optional |
2 |
|
Additional RRs |
Optional |
2 |
|
Answer Section |
2 |
||
Name |
Domain name the record applies to (e.g., _http._tcp.local.). |
Variable |
|
Type |
Record type (e.g., PTR, SRV, TXT, A). |
2 |
|
PTR Record |
Maps a service type to a specific instance. |
~5060 bytes |
|
SRV Record |
Provides the hostname and port where the service is running |
~7090 bytes |
|
TXT Record |
Provides metadata about the service. |
~50100 bytes |
|
A Record |
Maps the hostname to an IPv4 address. |
~3040 bytes |
|
Class |
Usually IN (Internet = 0x0001). |
2 |
|
TTL |
Set to 0x00000000 to indicate deletion. |
4 |
|
Data Length |
Length of the RDATA field. |
2 |
|
RDATA |
The actual data (e.g., IP address, hostname, service metadata). |
variable |
Probe Packet
S.No |
Protocol Packets |
Description |
Size(Bytes) |
---|---|---|---|
5 |
Probe Packet |
Used to check if a hostname or service name is already in use before announcing it. |
~60100 bytes |
Header |
12 |
||
Transaction ID |
Always 0 in mDNS |
2 |
|
Flags |
Standard query (0x0000) |
2 |
|
Questions |
Number of names being probed (usually 13) |
2 |
|
Answer RRs |
0 |
2 |
|
Authority RRs |
0 |
2 |
|
Additional RRs |
0 or more (for known-answer suppression) |
2 |
|
Question Section |
|||
Name |
The domain name being probed (e.g., mydevice.local.) |
variable(255) |
|
Type |
Record type (e.g., A, AAAA, SRV, PTR) |
2 |
|
Class |
IN (Internet = 0x0001) with unicast-response bit set (0x8001) |
2 |
|
|
|||
Name |
Same as in the question |
variable |
|
Type |
Same as in the question |
2 |
|
Class |
IN |
2 |
|
TTL |
Time to live (non-zero, typically 120 seconds) |
||
Data Length |
Length of RDATA |
2 |
|
RDATA |
The known answer (e.g., IP address, hostname) |
variable |
S.no |
Use Case |
Description |
---|---|---|
1 |
Local Device Discovery |
Automatically finds devices (e.g., printers, speakers) on the same local network without a |
central DNS server. |
||
2 |
Zero-Configuration Networking |
Enables plug-and-play networking by resolving .local hostnames without manual setup. |
3 |
Service Discovery |
Works with DNS-SD to advertise and discover services like file sharing, media streaming, etc. |
4 |
IoT and Smart Home Devices |
Allows smart devices to find and communicate with each other on local networks. |
5 |
Mobile and Ad-Hoc Networks |
Supports name resolution in networks without infrastructure, such as mobile hotspots or mesh networks. |
6 |
Developer Testing Environments |
Simplifies local development by resolving hostnames without editing hosts files or setting up DNS |
7 |
Cross-Platform Compatibility |
Used in Bonjour (Apple), Avahi (Linux), and Windows for seamless device discovery across OSes. |
S.no |
Feature |
Description |
---|---|---|
1 |
Local Name Resolution |
Resolves hostnames to IP addresses within a local network without a central DNS server. |
2 |
Zero Configuration |
No need for manual setup or DHCP; devices auto-configure and advertise themselves. |
3 |
Multicast Communication |
Uses multicast IP (IPv4: 224.0.0.251, IPv6: ff02::fb) and UDP port 5353 for queries and responses |
4 |
.local Domain Usage |
Operates within the .local domain for identifying devices on the same subnet |
5 |
Service Discovery (via DNS-SD) |
Enables discovery of services (e.g., printers, media servers) using SRV and TXT records |
6 |
Cross-Platform Support |
Implemented in Bonjour (Apple), Avahi (Linux), and supported in Windows environments |
7 |
No Central Server Needed |
Fully decentralized; each device acts as both client and responder |
8 |
Automatic Conflict Resolution |
Handles naming conflicts by probing and renaming to avoid duplication |
9 |
Lightweight Protocol |
Designed for small networks with minimal overhead and fast response times |
Local Name Resolution - Testcases
Sl.No |
Test Case |
Description |
Expected Result |
---|---|---|---|
1 |
Host Advertisement |
Power on mDNS-enabled device |
Sends mDNS announcement |
2 |
Name Query |
Query for known hostname |
Device responds with IP |
3 |
Name Conflict Detection |
Two devices with same hostname |
Conflict resolution triggered |
4 |
Service Advertisement |
Advertise _http._tcp service |
mDNS announces service |
5 |
Service Discovery |
Query for _http._tcp.local |
Matching services respond |
6 |
Service Instance Resolution |
Query for specific service instance |
Returns SRV and TXT records |
7 |
Hostname Change |
Change device hostname |
Sends goodbye and new announcement |
8 |
TTL Expiry |
Wait for TTL to expire |
Record removed from cache |
9 |
Device Departure |
Power off device |
Sends goodbye message |
10 |
Duplicate Query Suppression |
Send duplicate query |
Only one response seen |
11 |
Multicast Query |
Send query to 224.0.0.251:5353 |
Devices respond |
12 |
Unicast Response |
Request unicast response |
Device replies via unicast |
13 |
Invalid Query Format |
Send malformed query |
No response or error |
14 |
Query for Non-existent Name |
Query unknown hostname |
No response |
15 |
Multiple Services Advertisement |
Advertise multiple services |
All services announced |
16 |
Service Update |
Change TXT record |
Sends updated announcement |
17 |
Service Removal |
Withdraw service |
Sends goodbye for service |
18 |
Cache Flush Bit |
Set cache flush bit in response |
Replaces old record |
19 |
Query with Known Answer |
Include known answer in query |
Devices suppress duplicate answers |
20 |
Query Rate Limiting |
Send rapid queries |
Devices throttle responses |
21 |
IPv6 Support |
Use mDNS over IPv6 |
Devices respond (if supported) |
22 |
Mixed IPv4/IPv6 |
Use dual-stack network |
Dual responses received |
23 |
Wireshark Capture |
Capture mDNS traffic |
mDNS packets visible |
24 |
Bonjour Discovery |
Use Apple Bonjour |
Services discovered |
25 |
Avahi Discovery |
Use Avahi on Linux |
Services discovered |
26 |
Android mDNS |
Use Android device |
Services discovered |
27 |
Windows mDNS |
Use Windows 10+ |
Services discovered |
28 |
macOS mDNS |
Use macOS |
Services discovered |
29 |
Service Name Conflict |
Two services with same name |
One renamed with suffix |
30 |
VLAN Isolation |
Devices on different VLANs |
No discovery unless routed |
31 |
VPN Environment |
Use VPN client |
Discovery may fail |
32 |
Firewall Blocking |
Block UDP 5353 |
Discovery fails |
33 |
Docker Container |
Run mDNS in container |
Depends on network mode |
34 |
Virtual Machine |
Use VM with bridged/NAT |
Bridged: works; NAT: may fail |
35 |
mDNS with IoT Devices |
Use smart devices |
Devices respond if mDNS-enabled |
36 |
mDNS with Printers |
Use network printer |
Printer responds |
37 |
mDNS with Smart TVs |
Use smart TV |
TV responds to query |
38 |
mDNS with Media Players |
Use VLC/Kodi |
Services discovered |
39 |
mDNS with Cameras |
Use IP camera |
Camera responds if supported |
40 |
mDNS with HomePods |
Use Apple HomePod |
Responds with services |
41 |
mDNS with Raspberry Pi |
Use Pi with Avahi |
Services advertised |
42 |
mDNS with Node.js |
Use mdns module |
Services discovered |
43 |
mDNS with Python |
Use zeroconf module |
Services discovered |
44 |
mDNS with Java |
Use JmDNS library |
Services discovered |
45 |
mDNS with C/C++ |
Use dnssd API |
Services discovered |
46 |
mDNS with Go |
Use github.com/grandcat/zeroconf |
Services discovered |
47 |
mDNS with Rust |
Use mdns crate |
Services discovered |
48 |
mDNS with Wi-Fi Isolation |
Enable AP isolation |
Devices not discovered |
49 |
mDNS with IGMP Snooping |
Enable IGMP snooping |
Multicast may be blocked |
50 |
mDNS with Proxy |
Use HTTP proxy |
mDNS bypasses proxy |
Zero Configuration - Testcases
# |
Test Case |
Description |
Expected Result |
---|---|---|---|
1 |
Device Bootup |
Power on mDNS-enabled device |
Device self-assigns IP and announces via mDNS |
2 |
IP Conflict Detection |
Two devices choose same IP |
Conflict detected and one reconfigures |
3 |
Hostname Conflict Detection |
Two devices with same hostname |
One device renames itself |
4 |
Service Advertisement |
Advertise _http._tcp service |
Service visible on network |
5 |
Service Discovery |
Query for _http._tcp.local |
Matching services respond |
6 |
Automatic IP Assignment |
Device joins network without DHCP |
Gets link-local IP (169.254.x.x) |
7 |
Service Instance Conflict |
Two services with same name |
One renamed with suffix |
8 |
Hostname Resolution |
Query for device.local |
Returns device IP |
9 |
Service Removal |
Stop service |
Sends goodbye message |
10 |
Service Update |
Change TXT record |
Sends updated announcement |
11 |
Device Departure |
Power off device |
Sends goodbye or times out |
12 |
Multicast Query |
Send query to 224.0.0.251:5353 |
Devices respond |
13 |
Unicast Response |
Request unicast response |
Device replies via unicast |
14 |
TTL Expiry |
Wait for TTL to expire |
Record removed from cache |
15 |
Cache Flush Bit |
Set cache flush bit in response |
Replaces old record |
16 |
Service Browsing |
Browse all services |
All advertised services listed |
17 |
Service Resolution |
Resolve service instance |
Returns SRV and TXT records |
18 |
Device Renaming |
Change device hostname |
Sends goodbye and new announcement |
19 |
Query with Known Answer |
Include known answer in query |
Devices suppress duplicate answers |
20 |
Query Rate Limiting |
Send rapid queries |
Devices throttle responses |
21 |
IPv6 Support |
Use mDNS over IPv6 |
Devices respond (if supported) |
22 |
Dual Stack Support |
Use IPv4 and IPv6 |
Dual responses received |
23 |
Bonjour Discovery |
Use Apple Bonjour |
Services discovered |
24 |
Avahi Discovery |
Use Avahi on Linux |
Services discovered |
25 |
Android Zeroconf |
Use Android device |
Services discovered |
26 |
Windows Zeroconf |
Use Windows 10+ |
Services discovered |
27 |
macOS Zeroconf |
Use macOS |
Services discovered |
28 |
VLAN Isolation |
Devices on different VLANs |
No discovery unless routed |
29 |
VPN Environment |
Use VPN client |
Discovery may fail |
30 |
Firewall Blocking |
Block UDP 5353 |
Discovery fails |
31 |
Docker Container |
Run mDNS in container |
Depends on network mode |
32 |
Virtual Machine |
Use VM with bridged/NAT |
Bridged: works; NAT: may fail |
33 |
IoT Device Discovery |
Use smart plugs/cameras |
Devices respond if mDNS-enabled |
34 |
Printer Discovery |
Use network printer |
Printer responds |
35 |
Smart TV Discovery |
Use smart TV |
TV responds to query |
36 |
Media Player Discovery |
Use VLC/Kodi |
Services discovered |
37 |
Camera Discovery |
Use IP camera |
Camera responds if supported |
38 |
Raspberry Pi with Avahi |
Use Pi with Avahi |
Services advertised |
39 |
Node.js Zeroconf |
Use mdns module |
Services discovered |
40 |
Python Zeroconf |
Use zeroconf module |
Services discovered |
41 |
Java Zeroconf |
Use JmDNS library |
Services discovered |
42 |
C/C++ Zeroconf |
Use dnssd API |
Services discovered |
43 |
Go Zeroconf |
Use github.com/grandcat/zeroconf |
Services discovered |
44 |
Rust Zeroconf |
Use mdns crate |
Services discovered |
45 |
Wi-Fi Isolation |
Enable AP isolation |
Devices not discovered |
46 |
IGMP Snooping |
Enable IGMP snooping |
Multicast may be blocked |
47 |
Proxy Environment |
Use HTTP proxy |
mDNS bypasses proxy |
48 |
Service Filtering |
Query for specific service type |
Only matching services respond |
49 |
TXT Record Validation |
Check TXT record format |
Valid key-value pairs |
50 |
SRV Record Validation |
Check SRV record for service |
Contains hostname and port |
Multicast Communication - Testcases
# |
Test Case |
Description |
Expected Result |
---|---|---|---|
1 |
Multicast Query Transmission |
Send mDNS query to 224.0.0.251:5353 |
Devices receive and respond |
2 |
Multicast Response Handling |
Receive mDNS response via multicast |
Response visible on network |
3 |
Multicast Packet Format |
Inspect mDNS packet structure |
Valid DNS message format |
4 |
TTL Validation |
Check TTL value in multicast packet |
TTL = 255 |
5 |
Multicast Interface Binding |
Bind socket to specific interface |
mDNS traffic routed correctly |
6 |
Multiple Interface Support |
Use device with multiple interfaces |
mDNS works on all interfaces |
7 |
Multicast Group Join |
Join 224.0.0.251 multicast group |
Device receives mDNS traffic |
8 |
Multicast Group Leave |
Leave multicast group |
Device stops receiving mDNS traffic |
9 |
IGMP Snooping Enabled |
Enable IGMP snooping on switch |
Multicast may be blocked |
10 |
Multicast Packet Loss |
Drop multicast packets |
Some queries/responses lost |
11 |
Multicast Packet Duplication |
Duplicate mDNS packets |
Multiple responses received |
12 |
Multicast Packet Delay |
Introduce delay in multicast delivery |
Responses delayed |
13 |
Multicast Packet Reordering |
Reorder mDNS packets |
Responses arrive out of order |
14 |
Multicast Packet Corruption |
Corrupt mDNS packet |
Ignored or error logged |
15 |
VLAN Isolation |
Devices on separate VLANs |
No multicast communication |
16 |
AP Isolation |
Enable Wi-Fi AP isolation |
Devices cannot discover each other |
17 |
NAT Environment |
Devices behind NAT |
Multicast may not work |
18 |
VPN Environment |
Use VPN client |
Multicast may be blocked |
19 |
Firewall Blocking |
Block UDP port 5353 |
mDNS traffic blocked |
20 |
Multicast Loopback |
Enable loopback on multicast socket |
Device receives its own packets |
21 |
Multicast TTL Modification |
Set TTL < 255 |
Packet may not reach all devices |
22 |
Multicast on IPv6 |
Send mDNS query to FF02::FB |
Devices respond (if supported) |
23 |
Dual Stack Multicast |
Use IPv4 and IPv6 multicast |
Dual responses received |
24 |
Multicast Traffic Monitoring |
Use Wireshark to capture mDNS |
Packets visible on UDP 5353 |
25 |
Multicast Traffic Filtering |
Apply filter on multicast packets |
Only mDNS traffic shown |
26 |
Multicast Traffic Logging |
Enable logging on mDNS daemon |
Logs show multicast activity |
27 |
Multicast Query Suppression |
Send duplicate queries |
Devices suppress redundant responses |
28 |
Multicast Response Suppression |
Respond only if no known answer |
Reduces traffic |
29 |
Multicast Rate Limiting |
Send queries rapidly |
Devices throttle responses |
30 |
Multicast Burst Handling |
Send burst of queries |
Responses handled gracefully |
31 |
Multicast with Docker |
Run mDNS in container |
Depends on network mode |
32 |
Multicast with Virtual Machine |
Use VM with bridged/NAT |
Bridged: works; NAT: may fail |
33 |
Multicast with IoT Devices |
Use smart devices |
Devices respond if mDNS-enabled |
34 |
Multicast with Printers |
Use network printer |
Printer responds |
35 |
Multicast with Smart TVs |
Use smart TV |
TV responds to query |
36 |
Multicast with Media Players |
Use VLC/Kodi |
Services discovered |
37 |
Multicast with Cameras |
Use IP camera |
Camera responds if supported |
38 |
Multicast with Raspberry Pi |
Use Pi with Avahi |
Services advertised |
39 |
Multicast with Node.js |
Use mdns module |
Services discovered |
40 |
Multicast with Python |
Use zeroconf module |
Services discovered |
41 |
Multicast with Java |
Use JmDNS library |
Services discovered |
42 |
Multicast with C/C++ |
Use dnssd API |
Services discovered |
43 |
Multicast with Go |
Use github.com/grandcat/zeroconf |
Services discovered |
44 |
Multicast with Rust |
Use mdns crate |
Services discovered |
45 |
Multicast with Bonjour |
Use Apple Bonjour |
Services discovered |
46 |
Multicast with Avahi |
Use Avahi on Linux |
Services discovered |
47 |
Multicast with Windows |
Use Windows 10+ |
Services discovered |
48 |
Multicast with macOS |
Use macOS |
Services discovered |
49 |
Multicast Packet Size Test |
Send large mDNS packets |
Fragmentation or drop |
50 |
Multicast Service Filtering |
Query for specific service type |
Only matching services respond |
.local Domain Usage - Testcases
Sl.No |
Test Case |
Description |
Expected Result |
---|---|---|---|
1 |
Basic Hostname Resolution |
Query device.local |
Returns correct IP address |
2 |
Case Insensitivity |
Query DEVICE.LOCAL |
Resolves successfully |
3 |
Hostname Conflict Detection |
Two devices with same .local name |
One device renames itself |
4 |
Hostname Change |
Change device hostname |
New .local name resolves |
5 |
Hostname Removal |
Power off device |
.local name no longer resolves |
6 |
Hostname Reuse |
Reuse .local name after device leaves |
New device claims name |
7 |
Multiple Hostnames |
Device advertises multiple .local names |
All names resolve |
8 |
Hostname with Hyphen |
Use my-device.local |
Resolves correctly |
9 |
Hostname with Underscore |
Use my_device.local |
May not resolve (invalid DNS label) |
10 |
Hostname with Numbers |
Use device123.local |
Resolves correctly |
11 |
Hostname with Unicode |
Use device.local |
May not resolve (depends on implementation) |
12 |
Hostname TTL Expiry |
Wait for TTL to expire |
Name removed from cache |
13 |
Hostname Cache Flush |
Send response with cache flush bit |
Old record replaced |
14 |
Hostname Query via Multicast |
Send query to 224.0.0.251:5353 |
Device responds |
15 |
Hostname Query via Unicast |
Request unicast response |
Device replies via unicast |
16 |
Hostname Query Suppression |
Include known answer in query |
Devices suppress response |
17 |
Hostname Resolution on IPv6 |
Query .local over IPv6 |
Resolves if supported |
18 |
Hostname Resolution on Dual Stack |
Use IPv4 and IPv6 |
Dual responses received |
19 |
Hostname Resolution with VPN |
Use VPN client |
May not resolve |
20 |
Hostname Resolution with NAT |
Devices behind NAT |
.local works only on local subnet |
21 |
Hostname Resolution with VLANs |
Devices on different VLANs |
No resolution unless routed |
22 |
Hostname Resolution with Proxy |
Use HTTP proxy |
.local bypasses proxy |
23 |
Hostname Resolution with Firewall |
Block UDP 5353 |
Resolution fails |
24 |
Hostname Resolution with Docker |
Run mDNS in container |
Depends on network mode |
25 |
Hostname Resolution with VM |
Use VM with bridged/NAT |
Bridged: works; NAT: may fail |
26 |
Hostname Resolution with Bonjour |
Use Apple Bonjour |
.local names resolve |
27 |
Hostname Resolution with Avahi |
Use Avahi on Linux |
.local names resolve |
28 |
Hostname Resolution on Android |
Use Android device |
Resolves if supported |
29 |
Hostname Resolution on Windows |
Use Windows 10+ |
Resolves via built-in mDNS |
30 |
Hostname Resolution on macOS |
Use macOS |
Resolves via Bonjour |
31 |
Hostname Resolution on Linux |
Use Avahi or systemd-resolved |
Resolves .local names |
32 |
Hostname Resolution with Wireshark |
Capture .local queries |
mDNS packets visible |
33 |
Hostname Resolution with nsswitch |
Check /etc/nsswitch.conf for mdns |
.local resolution enabled |
34 |
Hostname Resolution with DNS |
Try resolving .local via external DNS |
Should not resolve (reserved domain) |
35 |
Hostname Resolution with DNS-SD |
Use DNS-SD to browse .local services |
Services listed |
36 |
Hostname Resolution with TXT |
Query for TXT record of .local service |
Returns metadata |
37 |
Hostname Resolution with SRV |
Query for SRV record of .local service |
Returns hostname and port |
38 |
Hostname Resolution with CNAME |
Use CNAME pointing to .local name |
May not resolve (not standard) |
39 |
Hostname Resolution with PTR |
Query for PTR of .local service |
Returns service instances |
40 |
Hostname Resolution with A Record |
Query for A record of .local name |
Returns IPv4 address |
41 |
Hostname Resolution with AAAA |
Query for AAAA record of .local name |
Returns IPv6 address |
42 |
Hostname Resolution with TTL Test |
Set low TTL in response |
Entry expires quickly |
43 |
Hostname Resolution with Logging |
Enable mDNS logs |
Logs show .local queries |
44 |
Hostname Resolution with Delay |
Delay response to .local query |
Client retries or times out |
45 |
Hostname Resolution with Flooding |
Send many .local queries rapidly |
Devices may throttle |
46 |
Hostname Resolution with Spoofing |
Send spoofed .local response |
Client may ignore or accept |
47 |
Hostname Resolution with Loopback |
Query own .local name |
Resolves to local IP |
48 |
Hostname Resolution with Static IP |
Assign static IP to device |
.local name still resolves |
49 |
Hostname Resolution with Sleep |
Put device to sleep |
.local name may time out |
50 |
Hostname Resolution with Wake |
Wake device from sleep |
.local name becomes active again |
Service Discovery (via DNS-SD) - Testcases
# |
Test Case |
Description |
Expected Result |
---|---|---|---|
1 |
Service Advertisement |
Advertise _http._tcp.local service |
Service visible on network |
2 |
Service Browsing |
Browse for _http._tcp.local |
All matching services listed |
3 |
Service Instance Resolution |
Resolve specific service instance |
Returns SRV and TXT records |
4 |
PTR Record Query |
Query for PTR of service type |
Returns service instances |
5 |
SRV Record Query |
Query for SRV of service instance |
Returns hostname and port |
6 |
TXT Record Query |
Query for TXT of service instance |
Returns metadata |
7 |
A Record Query |
Query for A record of service host |
Returns IPv4 address |
8 |
AAAA Record Query |
Query for AAAA record of service host |
Returns IPv6 address |
9 |
Multiple Service Types |
Advertise multiple service types |
All types discoverable |
10 |
Multiple Instances |
Advertise multiple instances of same type |
All instances listed |
11 |
Service Name Conflict |
Two services with same name |
One renamed with suffix |
12 |
Service Removal |
Stop service |
Sends goodbye message |
13 |
Service Update |
Change TXT record |
Sends updated announcement |
14 |
TTL Expiry |
Wait for TTL to expire |
Record removed from cache |
15 |
Cache Flush Bit |
Set cache flush bit in response |
Replaces old record |
16 |
Query with Known Answer |
Include known answer in query |
Devices suppress duplicate answers |
17 |
Query Rate Limiting |
Send rapid service queries |
Devices throttle responses |
18 |
Service Discovery on IPv6 |
Use DNS-SD over IPv6 |
Services discovered (if supported) |
19 |
Dual Stack Service Discovery |
Use IPv4 and IPv6 |
Dual responses received |
20 |
Service Discovery with Bonjour |
Use Apple Bonjour |
Services discovered |
21 |
Service Discovery with Avahi |
Use Avahi on Linux |
Services discovered |
22 |
Service Discovery on Android |
Use Android device |
Services discovered |
23 |
Service Discovery on Windows |
Use Windows 10+ |
Services discovered |
24 |
Service Discovery on macOS |
Use macOS |
Services discovered |
25 |
Service Discovery on Linux |
Use Avahi or systemd-resolved |
Services discovered |
26 |
Service Discovery with Wireshark |
Capture DNS-SD traffic |
mDNS packets visible |
27 |
Service Discovery with Docker |
Run DNS-SD in container |
Depends on network mode |
28 |
Service Discovery with VM |
Use VM with bridged/NAT |
Bridged: works; NAT: may fail |
29 |
Service Discovery with IoT Devices |
Use smart plugs/cameras |
Devices respond if mDNS-enabled |
30 |
Service Discovery with Printers |
Use network printer |
Printer services discovered |
31 |
Service Discovery with Smart TVs |
Use smart TV |
TV services discovered |
32 |
Service Discovery with Media Players |
Use VLC/Kodi |
Services discovered |
33 |
Service Discovery with Cameras |
Use IP camera |
Services discovered |
34 |
Service Discovery with Raspberry Pi |
Use Pi with Avahi |
Services advertised |
35 |
Service Discovery with Node.js |
Use dnssd or mdns module |
Services discovered |
36 |
Service Discovery with Python |
Use zeroconf module |
Services discovered |
37 |
Service Discovery with Java |
Use JmDNS library |
Services discovered |
38 |
Service Discovery with C/C++ |
Use dnssd API |
Services discovered |
39 |
Service Discovery with Go |
Use github.com/grandcat/zeroconf |
Services discovered |
40 |
Service Discovery with Rust |
Use mdns crate |
Services discovered |
41 |
Service Discovery with Proxy |
Use HTTP proxy |
DNS-SD bypasses proxy |
42 |
Service Discovery with VLANs |
Devices on different VLANs |
No discovery unless routed |
43 |
Service Discovery with NAT |
Devices behind NAT |
Local discovery works |
44 |
Service Discovery with VPN |
Use VPN client |
Discovery may fail |
45 |
Service Discovery with Firewall |
Block UDP 5353 |
Discovery fails |
46 |
Service Discovery with IGMP Snooping |
Enable IGMP snooping |
Multicast may be blocked |
47 |
Service Discovery with Wi-Fi Isolation |
Enable AP isolation |
Devices not discovered |
48 |
Service Discovery with Logging |
Enable mDNS logs |
Logs show service discovery |
49 |
Service Discovery with Delay |
Delay service response |
Client retries or times out |
50 |
Service Discovery with Spoofing |
Send spoofed service response |
Client may ignore or accept |
Cross-Platform Support - Testcases
# |
Test Case |
Description |
Expected Result |
---|---|---|---|
1 |
Windows to macOS Discovery |
Discover macOS service from Windows |
Service is discovered |
2 |
macOS to Windows Discovery |
Discover Windows service from macOS |
Service is discovered |
3 |
Linux to Windows Discovery |
Discover Windows service from Linux |
Service is discovered |
4 |
Windows to Linux Discovery |
Discover Linux service from Windows |
Service is discovered |
5 |
macOS to Linux Discovery |
Discover Linux service from macOS |
Service is discovered |
6 |
Linux to macOS Discovery |
Discover macOS service from Linux |
Service is discovered |
7 |
Android to Windows Discovery |
Discover Windows service from Android |
Service is discovered |
8 |
Android to macOS Discovery |
Discover macOS service from Android |
Service is discovered |
9 |
Android to Linux Discovery |
Discover Linux service from Android |
Service is discovered |
10 |
iOS to Windows Discovery |
Discover Windows service from iOS |
Service is discovered |
11 |
iOS to macOS Discovery |
Discover macOS service from iOS |
Service is discovered |
12 |
iOS to Linux Discovery |
Discover Linux service from iOS |
Service is discovered |
13 |
Windows to Android Discovery |
Discover Android service from Windows |
Service is discovered |
14 |
macOS to Android Discovery |
Discover Android service from macOS |
Service is discovered |
15 |
Linux to Android Discovery |
Discover Android service from Linux |
Service is discovered |
16 |
Windows to iOS Discovery |
Discover iOS service from Windows |
Service is discovered |
17 |
macOS to iOS Discovery |
Discover iOS service from macOS |
Service is discovered |
18 |
Linux to iOS Discovery |
Discover iOS service from Linux |
Service is discovered |
19 |
Raspberry Pi to Windows Discovery |
Discover Windows service from Raspberry Pi |
Service is discovered |
20 |
Raspberry Pi to macOS Discovery |
Discover macOS service from Raspberry Pi |
Service is discovered |
21 |
Raspberry Pi to Linux Discovery |
Discover Linux service from Raspberry Pi |
Service is discovered |
22 |
Windows to Raspberry Pi Discovery |
Discover Raspberry Pi service from Windows |
Service is discovered |
23 |
macOS to Raspberry Pi Discovery |
Discover Raspberry Pi service from macOS |
Service is discovered |
24 |
Linux to Raspberry Pi Discovery |
Discover Raspberry Pi service from Linux |
Service is discovered |
25 |
Cross-Platform TXT Record Validation |
Validate TXT record from different OS |
Correct metadata shown |
26 |
Cross-Platform SRV Record Validation |
Validate SRV record from different OS |
Hostname and port resolved |
27 |
Cross-Platform PTR Record Validation |
Validate PTR record from different OS |
Service instance listed |
28 |
Cross-Platform A Record Resolution |
Resolve IPv4 address from different OS |
Correct IP returned |
29 |
Cross-Platform AAAA Record Resolution |
Resolve IPv6 address from different OS |
Correct IP returned |
30 |
Cross-Platform Service Browsing |
Browse services from different OS |
All services listed |
31 |
Cross-Platform Service Resolution |
Resolve services from different OS |
Correct SRV/TXT records |
32 |
Cross-Platform Service Removal |
Remove service from one OS and verify on others |
Service disappears |
33 |
Cross-Platform Service Update |
Update service TXT record on one OS and verify on others |
Update reflected |
34 |
Cross-Platform TTL Expiry |
Wait for TTL expiry and verify on all platforms |
Record removed from cache |
35 |
Cross-Platform Cache Flush |
Send cache flush and verify on all platforms |
Old record replaced |
36 |
Cross-Platform Logging |
Enable mDNS logs on all platforms |
Logs show consistent behavior |
37 |
Cross-Platform Wireshark Capture |
Capture mDNS traffic from all platforms |
Consistent packet structure |
38 |
Cross-Platform IPv6 Support |
Use IPv6 mDNS on all platforms |
Services discovered |
39 |
Cross-Platform Dual Stack Support |
Use IPv4 and IPv6 on all platforms |
Dual responses received |
40 |
Cross-Platform Firewall Handling |
Block UDP 5353 on one platform |
Discovery fails on that platform |
41 |
Cross-Platform VLAN Isolation |
Place devices on different VLANs |
No discovery unless routed |
42 |
Cross-Platform NAT Handling |
Devices behind NAT |
Local discovery works |
43 |
Cross-Platform VPN Handling |
Use VPN on one platform |
Discovery may fail |
44 |
Cross-Platform Proxy Handling |
Use HTTP proxy on one platform |
mDNS bypasses proxy |
45 |
Cross-Platform Docker Container |
Run mDNS in container on different OS |
Depends on network mode |
46 |
Cross-Platform Virtual Machine |
Use VM with bridged/NAT on different OS |
Bridged: works; NAT: may fail |
47 |
Cross-Platform Service Filtering |
Query specific service type on all platforms |
Only matching services respond |
48 |
Cross-Platform Bonjour Compatibility |
Use Bonjour on macOS and test with other OS |
Services discovered |
49 |
Cross-Platform Avahi Compatibility |
Use Avahi on Linux and test with other OS |
Services discovered |
50 |
Cross-Platform DNS-SD Compliance |
Validate DNS-SD behavior across platforms |
Consistent service discovery |
No Central Server Needed - Testcases
# |
Test Case |
Description |
Expected Result |
---|---|---|---|
1 |
Peer-to-Peer Name Resolution |
Resolve device.local without DNS server |
Name resolves successfully |
2 |
Service Discovery Without DNS |
Discover _http._tcp.local without DNS |
Services discovered |
3 |
No DHCP Server |
Device assigns link-local IP (169.254.x.x) |
mDNS still functions |
4 |
No Internet Connection |
Disconnect from internet |
Local mDNS discovery still works |
5 |
No Router Present |
Devices connected via switch only |
mDNS discovery works |
6 |
No Gateway IP |
Devices have no default gateway |
mDNS still resolves names |
7 |
No DNS Configuration |
Remove DNS settings from device |
.local names still resolve |
8 |
No Host File Entry |
No entry in /etc/hosts or hosts file |
.local name still resolves |
9 |
No Central DHCP Lease |
Device uses self-assigned IP |
mDNS works |
10 |
No DNS-SD Server |
No centralized DNS-SD infrastructure |
Services still discoverable |
11 |
Multicast Query Without DNS |
Send mDNS query without DNS fallback |
Devices respond |
12 |
Multicast Response Without DNS |
Receive mDNS response without DNS |
Response received |
13 |
Hostname Conflict Resolution |
Two devices claim same .local name |
One renames automatically |
14 |
Service Conflict Resolution |
Two services with same name |
One renamed with suffix |
15 |
Device Reboot |
Reboot device without DNS |
mDNS resumes after boot |
16 |
Service Reannouncement |
Wait for periodic service announcement |
Service reappears |
17 |
TTL Expiry Without DNS |
Let TTL expire |
Record removed from cache |
18 |
Cache Flush Without DNS |
Send cache flush bit |
Record updated |
19 |
Service Removal Without DNS |
Stop service |
Goodbye message sent |
20 |
Hostname Change Without DNS |
Change .local name |
New name resolves |
21 |
IPv6 mDNS Without DNS |
Use mDNS over IPv6 |
Services discovered |
22 |
Dual Stack mDNS Without DNS |
Use IPv4 and IPv6 |
Dual responses received |
23 |
Wireshark Capture Without DNS |
Capture mDNS traffic |
Packets visible |
24 |
Avahi Without DNS |
Use Avahi on Linux |
Services discovered |
25 |
Bonjour Without DNS |
Use Bonjour on macOS |
Services discovered |
26 |
Android Without DNS |
Use Android device |
Services discovered |
27 |
Windows Without DNS |
Use Windows 10+ |
Services discovered |
28 |
macOS Without DNS |
Use macOS |
Services discovered |
29 |
Linux Without DNS |
Use Linux with Avahi |
Services discovered |
30 |
Raspberry Pi Without DNS |
Use Pi with Avahi |
Services advertised |
31 |
Docker Container Without DNS |
Run mDNS in container |
Discovery depends on network mode |
32 |
VM Without DNS |
Use VM with bridged/NAT |
Bridged: works; NAT: may fail |
33 |
IoT Device Without DNS |
Use smart plug/camera |
Responds if mDNS-enabled |
34 |
Printer Without DNS |
Use network printer |
Printer responds |
35 |
Smart TV Without DNS |
Use smart TV |
TV responds to query |
36 |
Media Player Without DNS |
Use VLC/Kodi |
Services discovered |
37 |
Camera Without DNS |
Use IP camera |
Camera responds if supported |
38 |
Node.js Without DNS |
Use mdns module |
Services discovered |
39 |
Python Without DNS |
Use zeroconf module |
Services discovered |
40 |
Java Without DNS |
Use JmDNS library |
Services discovered |
41 |
Go Without DNS |
Use grandcat/zeroconf |
Services discovered |
42 |
Rust Without DNS |
Use mdns crate |
Services discovered |
43 |
Service Browsing Without DNS |
Browse all services |
All advertised services listed |
44 |
Service Resolution Without DNS |
Resolve service instance |
Returns SRV and TXT records |
45 |
TXT Record Query Without DNS |
Query for TXT record |
Returns metadata |
46 |
SRV Record Query Without DNS |
Query for SRV record |
Returns hostname and port |
47 |
PTR Record Query Without DNS |
Query for PTR record |
Returns service instances |
48 |
A Record Query Without DNS |
Query for A record |
Returns IPv4 address |
49 |
AAAA Record Query Without DNS |
Query for AAAA record |
Returns IPv6 address |
50 |
Full Network Discovery Without DNS |
Discover all devices and services |
All mDNS-enabled devices respond |
Automatic Conflict Resolution - Testcases
# |
Test Case |
Description |
Expected Result |
---|---|---|---|
1 |
Hostname Conflict Detection |
Two devices claim same .local name |
One device renames automatically |
2 |
Service Name Conflict Detection |
Two services advertise same instance name |
One service renamed with suffix |
3 |
Simultaneous Hostname Claim |
Devices boot simultaneously with same name |
Conflict resolved deterministically |
4 |
Hostname Conflict After Reboot |
Reboot device with previously used name |
Conflict resolved if name is taken |
5 |
Service Conflict After Reboot |
Reboot service with same name |
Conflict resolved if name is taken |
6 |
Hostname Conflict with Delay |
Second device joins later with same name |
Conflict detected and resolved |
7 |
Service Conflict with Delay |
Second service joins later with same name |
Conflict detected and resolved |
8 |
Hostname Conflict with Different IPs |
Same name, different IPs |
Conflict resolved |
9 |
Hostname Conflict with Same IP |
Same name and IP |
No conflict detected |
10 |
Hostname Conflict with MAC Spoofing |
Spoof MAC and hostname |
Conflict resolution triggered |
11 |
Service Conflict with TXT Differences |
Same name, different TXT records |
Conflict resolved |
12 |
Conflict Resolution Logging |
Enable logs |
Conflict events logged |
13 |
Conflict Resolution Timing |
Measure time to resolve conflict |
Resolution within seconds |
14 |
Conflict Resolution Retry |
Retry name claim after conflict |
New name accepted |
15 |
Conflict Resolution with Avahi |
Use Avahi on Linux |
Conflict resolved automatically |
16 |
Conflict Resolution with Bonjour |
Use Bonjour on macOS |
Conflict resolved automatically |
17 |
Conflict Resolution with Windows |
Use Windows 10+ |
Conflict resolved automatically |
18 |
Conflict Resolution with Android |
Use Android device |
Conflict resolved automatically |
19 |
Conflict Resolution with iOS |
Use iOS device |
Conflict resolved automatically |
20 |
Conflict Resolution with Raspberry Pi |
Use Pi with Avahi |
Conflict resolved automatically |
21 |
Conflict Resolution with Docker |
Run mDNS in container |
Conflict resolved based on hostname |
22 |
Conflict Resolution with VM |
Use VM with same hostname |
Conflict resolved |
23 |
Conflict Resolution with Static IP |
Devices with same name, different static IPs |
Conflict resolved |
24 |
Conflict Resolution with DHCP IP |
Devices with same name, different DHCP IPs |
Conflict resolved |
25 |
Conflict Resolution with IPv6 |
Devices with same name on IPv6 |
Conflict resolved |
26 |
Conflict Resolution with Dual Stack |
Devices with same name on IPv4 and IPv6 |
Conflict resolved |
27 |
Conflict Resolution with VLANs |
Devices on different VLANs, same name |
No conflict unless routed |
28 |
Conflict Resolution with NAT |
Devices behind NAT, same name |
Conflict may not be detected |
29 |
Conflict Resolution with VPN |
Devices on VPN, same name |
Conflict may not be detected |
30 |
Conflict Resolution with Wi-Fi Isolation |
Devices on isolated Wi-Fi, same name |
Conflict not detected |
31 |
Conflict Resolution with IGMP Snooping |
Enable IGMP snooping |
Conflict resolution may be delayed |
32 |
Conflict Resolution with Sleep/Wake |
Device sleeps and wakes with same name |
Conflict resolved if name is taken |
33 |
Conflict Resolution with Rapid Join |
Multiple devices join rapidly with same name |
Conflict resolved deterministically |
34 |
Conflict Resolution with Long Names |
Use long conflicting hostnames |
Conflict resolved with suffix |
35 |
Conflict Resolution with Unicode Names |
Use Unicode names |
Conflict resolved if supported |
36 |
Conflict Resolution with Special Chars |
Use names with special characters |
Conflict resolved or name rejected |
37 |
Conflict Resolution with Service Port |
Same service name, different ports |
Conflict resolved |
38 |
Conflict Resolution with TXT Update |
Change TXT record after conflict |
New record accepted |
39 |
Conflict Resolution with SRV Update |
Change SRV record after conflict |
New record accepted |
40 |
Conflict Resolution with A Record |
Same name, different A records |
Conflict resolved |
41 |
Conflict Resolution with AAAA Record |
Same name, different AAAA records |
Conflict resolved |
42 |
Conflict Resolution with PTR Record |
Same service type, conflicting PTRs |
Conflict resolved |
43 |
Conflict Resolution with Logging Tools |
Use Wireshark or Avahi logs |
Conflict packets visible |
44 |
Conflict Resolution with TTL Expiry |
Let conflicting record expire |
New claim accepted |
45 |
Conflict Resolution with Cache Flush |
Send cache flush after conflict |
Old record replaced |
46 |
Conflict Resolution with Manual Rename |
Manually rename device after conflict |
New name accepted |
47 |
Conflict Resolution with Auto Retry |
Device retries with incremented name |
Conflict resolved |
48 |
Conflict Resolution with Service Restart |
Restart service with same name |
Conflict resolved |
49 |
Conflict Resolution with Host Restart |
Restart host with same name |
Conflict resolved |
50 |
Conflict Resolution with Mixed OS |
Conflict between macOS and Linux devices |
Conflict resolved automatically |
Lightweight Protocol - Testcases
# |
Test Case |
Description |
Expected Result |
---|---|---|---|
1 |
Basic Query Size |
Measure size of standard mDNS query packet |
Small packet size (<512 bytes) |
2 |
Basic Response Size |
Measure size of standard mDNS response packet |
Small packet size (<512 bytes) |
3 |
Low CPU Usage |
Monitor CPU usage during mDNS operation |
Minimal CPU usage |
4 |
Low Memory Usage |
Monitor memory usage during mDNS operation |
Minimal memory footprint |
5 |
No External Dependencies |
Run mDNS without external libraries |
Works independently |
6 |
No DNS Server Required |
Operate without DNS server |
Name resolution still works |
7 |
No DHCP Server Required |
Operate without DHCP server |
Link-local IP assigned |
8 |
No Configuration Needed |
Plug-and-play operation |
Services auto-discovered |
9 |
Minimal Packet Overhead |
Inspect mDNS packet headers |
Lightweight DNS format |
10 |
UDP Transport |
Verify mDNS uses UDP |
UDP port 5353 used |
11 |
No TCP Dependency |
Attempt mDNS over TCP |
Fails (UDP only) |
12 |
No Encryption Overhead |
Check for TLS/SSL usage |
None used |
13 |
No Authentication Overhead |
Check for auth headers |
None used |
14 |
No Session Management |
Check for session state |
Stateless protocol |
15 |
No Handshake Required |
Observe connection setup |
No handshake needed |
16 |
Small Codebase |
Review mDNS implementation size |
Compact source code |
17 |
Embedded Device Compatibility |
Run mDNS on microcontroller |
Works with limited resources |
18 |
IoT Device Compatibility |
Run mDNS on smart plug/camera |
Works with low-power devices |
19 |
Raspberry Pi Compatibility |
Run mDNS on Raspberry Pi |
Works efficiently |
20 |
Android Compatibility |
Run mDNS on Android |
Services discovered |
21 |
iOS Compatibility |
Run mDNS on iOS |
Services discovered |
22 |
Windows Compatibility |
Run mDNS on Windows |
Services discovered |
23 |
macOS Compatibility |
Run mDNS on macOS |
Services discovered |
24 |
Linux Compatibility |
Run mDNS on Linux |
Services discovered |
25 |
Minimal Network Load |
Monitor network traffic during mDNS |
Low bandwidth usage |
26 |
Low Power Consumption |
Measure power usage during mDNS operation |
Minimal power draw |
27 |
Service Discovery with Minimal Data |
Advertise service with minimal TXT record |
Service still discoverable |
28 |
Hostname Resolution with Minimal Data |
Resolve .local name with minimal response |
Name resolves correctly |
29 |
No Central Server Needed |
Operate without DNS/DHCP server |
Peer-to-peer discovery works |
30 |
Stateless Operation |
Restart device and observe mDNS behavior |
No session loss |
31 |
Lightweight Logging |
Enable mDNS logs |
Minimal log output |
32 |
Lightweight Packet Capture |
Capture mDNS traffic |
Small, readable packets |
33 |
Lightweight Service Update |
Update TXT record |
Minimal traffic generated |
34 |
Lightweight Service Removal |
Stop service |
Sends small goodbye packet |
35 |
Lightweight Conflict Resolution |
Trigger hostname conflict |
Minimal traffic for resolution |
36 |
Lightweight Retry Mechanism |
Retry name claim |
Efficient retry logic |
37 |
Lightweight TTL Handling |
Set low TTL |
Record expires quickly |
38 |
Lightweight Cache Flush |
Send cache flush bit |
Old record replaced efficiently |
39 |
Lightweight Multicast Query |
Send multicast query |
Small packet broadcast |
40 |
Lightweight Unicast Response |
Receive unicast response |
Small packet received |
41 |
Lightweight Service Browsing |
Browse services |
Minimal traffic generated |
42 |
Lightweight Service Resolution |
Resolve service instance |
Efficient response |
43 |
Lightweight TXT Record Query |
Query for TXT record |
Small metadata returned |
44 |
Lightweight SRV Record Query |
Query for SRV record |
Hostname and port returned |
45 |
Lightweight PTR Record Query |
Query for PTR record |
Service instances listed |
46 |
Lightweight A Record Query |
Query for A record |
IPv4 address returned |
47 |
Lightweight AAAA Record Query |
Query for AAAA record |
IPv6 address returned |
48 |
Lightweight Implementation in C |
Use dnssd API |
Efficient execution |
49 |
Lightweight Implementation in Python |
Use zeroconf module |
Low resource usage |
50 |
Lightweight Implementation in Node.js |
Use mdns module |
Efficient service discovery |
Reference links