# Network Communications with eXtremeDB

> eXtremeDB uses two modes of network communications implementing the stateful and the stateless protocols. The stateful communications protocols expect a response to a request, track information, and potentially resend the request if no response is received. One the other hand the stateless applications send a request to the eXtremeDB modules and relays the response back without storing any information. Most eXtremeDB communications architectures are stateful. Stateless communications are used only in the context of REST (REpresentational “State” Transfer) eXtremeDB services

> The eXtremeSQL, eXtremeDB High Availability and eXtremeDB Cluster extension modules, the Active Replication Fabric all use communication channel implementations for remote connections between eXtremeDB network nodes. The channel represents a simple end-to-end communication between nodes such as a master and a replica, cluster nodes, etc., The communication channel abstraction allows eXtremeDB networking components to be independent of the underlying media and the operating environment. Channels are configured by a set of specific performance, security and other parameters. Performance characteristics of a channel are specified in terms of timeouts, thus the primary attribute of the channel is its on-time reliability. Channel communications are protected (encoded) using SSL (Secure Socket Layer) the industry standard encryption technology. SSL is a security protocol that provides communications privacy and authentication for eXtremeDB networking components that operate over TCP/IP.

> The eXtremeDB REST services communications are stateless — the eXtremeDB runtime does not store any state about the eXtremeDB-based client applications’ session on the internally. One example of the REST-based application is the eXtremeDB xPanel. REST-based communications don’t use channels. However all communications are still optionally secured through the integrated third-party SSL software

> ## Secure Sockets Layer integration

> In order to facilitate secure communications, authorization and authentication, Network Transport Layer security is implemented using Secure Sockets Layer (TLS/SSL). At present eXtremeDB provides support for OpenSSL and wolfSSL TLS implementations.

> OpenSSL is a general purpose cryptography library that provides an open source implementation of the Secure Sockets Layer (SSL) and Transport Layer Security (TLS) protocols. OpenSSL is a robust, commercial-grade, full-featured toolkit for general-purpose cryptography and secure communication and is one of the most widespread SSL implementations.

> wolfSSL embedded SSL library is a lightweight SSL/TLS library written in ANSI C and targeted for embedded, RTOS, and resource-constrained environments because of its small size, speed. wolfSSL supports industry standards up to the current TLS 1.3 and DTLS 1.3 protocol levels, is powered by the wolfCrypt cryptography library, which has been FIPS 140-2 validated

> The following page highlights the key differences between the wolfSSL and OpenSSL: https://www.wolfssl.com/docs/wolfssl-openssl

> ## IPv6 Network Addresses

> As of eXtremeDB release 7.1.1795, IPv6 address protocol is used for specifying node addresses. In places where network addresses are represented in the form "<host>:<port>", the IPv6 addresses must be enclosed in the square brackets, for example: "[::1]:5000" or "[fe80::21e:4fff:fe9c:5398%1]:5000". This is to avoid conflicts with ':' in the IPv6 address.

> ## Native Language APIs

> The APIs and methods for managing network communications are specific to the programming language used. Please use the links below to view detailed explanations and examples for your development environment:

> C | Managing network communications in C
> C++ | Managing network communications in C++
> Java | Managing network communications Java
> Python | Managing network communications in Python
> C# | Managing network communications in C#
> xSQL | Managing network communications with xSQL