19. Address resolution
org.arl.unet.Services.ADDRESS_RESOLUTION
19.1. Overview
An ADDRESS_RESOLUTION service provider is responsible for address allocation and resolution. The size of the address space is detemined by the
addressSize
parameter of the NODE_INFO service (
Chapter 18
).
19.1.1. Messages
Agents supporting this service honor the following requests:
-
AddressAllocReq
⇒AddressAllocRsp
/REFUSE
/FAILURE
— request for allocation of address to node -
AddressResolutionReq
⇒AddressResolutionRsp
/REFUSE
/FAILURE
— resolve node name to address
19.2. Usage and notes
Shell usage of this service via the
host
command is described in
Section 4.1
. In this section, we show examples of how address allocation and address resolution can be implemented directly by sending messages.
Address allocation is typically required at startup, and usually initiated by the agent providing the NODE_INFO service to populate the
address
parameter of that service. To ask the ADDRESS_RESOLUTION service provider to allocate an address, an agent sends it a
AddressAllocReq
. The allocation may depend on the node name, and so the request must contain the node name.
We can start the 2-node network, and manually test this on the shell of node A:
> a = agentForService(org.arl.unet.Services.ADDRESS_RESOLUTION);
> a << new AddressAllocReq(name: 'A')
AddressAllocRsp:INFORM[address:232]
Address resolution is performed via the
AddressResolutionReq
message. The
host
command sends this message on your behalf, and shows you the response:
> a << new AddressResolutionReq(name: 'A')
AddressResolutionRsp:INFORM[address:232 name:A]
> ans.address
232
> host('A')
232
While the address allocation and resolution processes may seem very similar, there is a conceptual difference between the two. Address allocation is performed for a new node without an address. The address allocation process associates it with an address. Address resolution is performed to find the address that was assigned to a node.
The default ADDRESS_RESOLUTION service provider uses a hashing function to map node names to addresses. This enables it to allocate and resolve addresses without generating network traffic, as the hashing function generates the same address for a given name on each node. Because the hashing maps a large name space to a small address space, there is always the chance that two names map to the same address; we require that the network architect check this manually, and assign node names such that there are no address conflicts. |
Network designers and protocol developers should not rely on the ADDRESS_RESOLUTION service provider being based on a hashing function for correct operation of the network. |
<<< [Node information] | [Medium access control] >>> |