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.

  • 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

Optional Known-Answer Section

(Additional RRs)

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