Mobile Ad Hoc Network (MANET) Neighborhood Discovery Protocol (NHDP)
updated by
- rfc-7183 — Integrity Protection for the Neighborhood Discovery Protocol (NHDP) and Optimized Link State Routing Protocol Version 2 (OLSRv2)
- rfc-7188 — Optimized Link State Routing Protocol Version 2 (OLSRv2) and MANET Neighborhood Discovery Protocol (NHDP) Extension TLVs
- rfc-7466 — An Optimization for the Mobile Ad Hoc Network (MANET) Neighborhood Discovery Protocol (NHDP)
Extracted elements (29)
Link quality in NHDP is defined as a dimensionless 0–1 admittance value to exclude marginal links from use, not as a link metric or substitute for one. This design keeps link quality purely local, avoiding the need to signal it and preserving interoperability between heterogeneous implementations.
Symmetric 2-hop neighborhood information is maintained specifically to enable MANET routing protocols to employ relay set reductions (e.g., MPR selection) for efficient network-wide flooding, as described in RFC 3626 and RFC 5449. This is the primary motivation for NHDP's 2-hop discovery.
The Removed Interface Address Set tracks recently reassigned local interface addresses for I_HOLD_TIME to prevent a formerly local address from being incorrectly recorded as a symmetric 2-hop neighbor's address when it is reused by a neighboring router.
Link quality information is strictly local and never carried in signaling. Routers using different, the same, or no link quality algorithms can fully interoperate; link quality is a local admittance policy and is not equivalent to a link metric.
NHDP packets are sent using the 'manet' protocol number or well-known UDP port number from RFC 5498, and MAY use the link-local multicast address LL-MANET-Routers. All packets and messages MUST conform to RFC 5444 format.
A HELLO message MUST contain exactly one VALIDITY_TIME Message TLV (per RFC 5497) representing H_HOLD_TIME for the transmitting MANET interface. The zero and infinite time representations defined in RFC 5497 MUST NOT be used.
A received HELLO message is invalid and MUST be discarded if it lacks exactly one VALIDITY_TIME Message TLV, contains conflicting TLV values on the same address object, contains an address matching the receiver's own current or recently used addresses, or has out-of-range LOCAL_IF / LINK_STATUS / OTHER_NEIGHB values.
All network addresses in the router's Local Interface Set MUST be included as address objects in every generated HELLO message (with a narrow exception allowing omission of a single-address interface's address when it is the IP datagram source). Each such address MUST be associated with a LOCAL_IF Address Block TLV.
Each interface network address MUST be unique to the router and MUST NOT be used by any other router. If the address represents a prefix range, that entire range MUST NOT overlap with any other router's interface address ranges.
H_HOLD_TIME MUST be >= REFRESH_INTERVAL. If HELLO messages can be lost, both L_HOLD_TIME and H_HOLD_TIME SHOULD be significantly greater than REFRESH_INTERVAL to prevent premature expiration of neighbor information.
HELLO message jitter SHOULD be used as described in RFC 5148 on data link layers subject to collision-based packet loss. Two successive HELLO messages on the same MANET interface MUST be separated by at least HELLO_MIN_INTERVAL.
HELLO messages MUST NOT be forwarded. A msg-hop-limit field, if present, MUST have value 1; a msg-hop-count field, if present, MUST have value 0.
If HELLO_INTERVAL increases, the next HELLO message on that interface MUST still be generated according to the previous shorter HELLO_INTERVAL to honor previously advertised timing promises until they expire.
If link quality is not updated (i.e., a static deployment), L_quality MUST be set to indicate an always-usable quality link (>= HYST_ACCEPT). Modification of link quality is OPTIONAL.
On receiving a HELLO message, the router MUST check for invalidity conditions defined in Section 12.1 and discard invalid messages. For valid messages, the router MUST update its Interface and Neighbor Information Bases in the exact order specified in Sections 12.3–12.6.
Within every time interval of length REFRESH_INTERVAL on a given MANET interface, sent HELLO messages MUST collectively include all relevant information in the corresponding Link Set and Neighbor Information Base. The router MUST consider the full interval ending at the latest possible next HELLO transmission, not just past transmissions.
A 2-Hop Tuple (N2_neighbor_iface_addr_list, N2_2hop_addr, N2_time) records a single network address of a symmetric 2-hop neighbor reachable via a named symmetric 1-hop neighbor interface. The 2-Hop Set is populated from received HELLO messages advertising SYMMETRIC links.
A HELLO message is the sole signaling mechanism in NHDP. Each router generates HELLO messages independently on each MANET interface to advertise its own addresses, report 1-hop link status, and enable discovery of symmetric 2-hop neighbors.
A Link Tuple (L_neighbor_iface_addr_list, L_HEARD_time, L_SYM_time, L_quality, L_pending, L_lost, L_time) records a single link from a 1-hop neighbor's MANET interface. L_status is derived from these fields and takes values PENDING, HEARD, SYMMETRIC, or LOST.
A Lost Neighbor Tuple (NL_neighbor_addr, NL_time) records a network address of a router that recently was a symmetric 1-hop neighbor but is now lost. This enables HELLO messages to advertise the loss, accelerating removal from recipients' 2-Hop Sets.
A Neighbor Tuple (N_neighbor_addr_list, N_symmetric) aggregates all known network addresses of a single 1-hop neighbor and tracks whether any link to it is currently symmetric. Neighbor Tuples are removed only when all corresponding Link Tuples expire, not by independent timers.
This document creates HELLO-message-type-specific TLV Type registries (for both Message TLVs and Address Block TLVs) under Expert Review, and registers the LOCAL_IF, LINK_STATUS, and OTHER_NEIGHB Address Block TLV types.
This document creates value registries for LOCAL_IF (THIS_IF=0, OTHER_IF=1), LINK_STATUS (LOST=0, SYMMETRIC=1, HEARD=2), and OTHER_NEIGHB (LOST=0, SYMMETRIC=1) Address Block TLVs, all under Expert Review policy.
This document registers the HELLO message type in the MANET Message Types registry (RFC 5444 framework) via IANA, with Expert Review as the registration policy.
NHDP is vulnerable to attacks via forged or replayed HELLO messages, including topology poisoning (advertising false links or neighbors), black-hole and wormhole attacks, and resource exhaustion DoS. Without additional security mechanisms, routers cannot distinguish forged from authentic HELLO messages.
NHDP's Section 12.1 invalid-message checks provide a first line of defense against malformed messages. Authentication, integrity protection, and confidentiality SHOULD be provided by an external security mechanism (e.g., a MANET cryptographic protocol); NHDP provides an extension point allowing security protocols to reject unverifiable HELLO messages before NHDP processing.
Link status (L_status) has four states: PENDING (candidate link not yet established), HEARD (one-directional), SYMMETRIC (bi-directional confirmed), and LOST (expired or below quality threshold). Transitions are triggered by HELLO reception, timer expiry (L_HEARD_time, L_SYM_time), and link quality changes.
The LINK_STATUS Address Block TLV (Value length = 1 octet; values LOST=0, SYMMETRIC=1, HEARD=2) reports the link status to the transmitting interface for a neighbor's address. The OTHER_NEIGHB TLV (Value length = 1 octet; values LOST=0, SYMMETRIC=1) reports addresses of symmetric 1-hop neighbors or recently lost neighbors.
The LOCAL_IF Address Block TLV (Value length = 1 octet) marks each local interface address as THIS_IF (the transmitting MANET interface) or OTHER_IF (another interface of the same router). It MUST be associated with every local address object in HELLO messages.