A Node in Zero represents an actively running peer in the Zero Grid. Nodes establish an active Transport on a local device that is responsible for managing network traffic over specific Internet protocols such as TCP, UDP, WebRTC and WebSockets. Transports utilize the libp2p-transport protocol along with its standard multiaddress convention. E.g. /ip4/
Once a Node is up and running, it is capable of listening and dialing with other peers in the Zero Grid. Listening enables the Node to establish a connection for incoming traffic, whereas dialing establishes an outgoing connection, over the specified Transport layer. A Node's Transport connection is set as WebRTC by default, however is capable of supporting TCP, UDP, Websockets and other custom network protocols. Standardization on WebRTC ensures both browser-based applications and platform binaries (such as desktop or Electron apps) can easily exchange network data with one another.
Stream multiplexing (often referred to as 'muxing') is also enabled by default using the mplex library in order to reduce the connection overhead associated with opening multiple concurrent connections. Muxing encases connections into a single Transport medium, reducing the number of connections that need to be opened and closed at a given time, while ensuring that NAT traversal only needs to happen once.
Transports are encrypted by default using the Noise Protocol Framework via libp2p-noise and libp2p-secio, which form a Diffie-Hellman key agreement between peers. SECIO is a TLS 1.3 like channel to establish an encrypted connection between two peers that was originally developed for IPFS.
Last modified 6mo ago
Copy link