[[modules-network]]
== Basic Settings

Commonly used network settings:

[cols="<,<",options="header",]
|=======================================================================
|Name |Description
|`network.host` |Host to bind and publish to other nodes. Accepts an IP address, hostname, or special value (see table below). Defaults to `_local_`.

|`discovery.zen.ping.unicast.hosts`|Initial list of other nodes. Accepts IP addresses or hostnames. Defaults to `["127.0.0.1", "[::1]"]`.

|`http.port` |Port to bind for incoming http requests. Accepts a single value or a range. Defaults to `9200-9300`.

|`transport.tcp.port` |Port to bind for communication between nodes. Accepts a single value or a range. Defaults to `9300-9400`.
|=======================================================================

Be careful with network configuration! Never expose an unprotected instance
to the public internet.

[float]
[[special-values]]
=== Special values for `network.host`

[cols="<,<",options="header",]
|=======================================================================
|Special Host Value |Description
|`_[networkInterface]_` |Addresses of a network interface, for example `_en0_`.

|`_local_` |Any loopback addresses on the system, for example `127.0.0.1`.

|`_site_` |Any site-local addresses on the system, for example `192.168.0.1`.

|`_global_` |Any globally-scoped addresses on the system, for example `8.8.8.8`.
|=======================================================================

These special values will work over both IPv4 and IPv6 by default,
but you can also limit this with the use of `:ipv4` of `:ipv6` specifiers. For 
example, `_en0:ipv4_` would only bind to the ipv4 addresses of interface `en0`.

When the `discovery-ec2` plugin is installed, you can use
{plugins}/discovery-ec2-discovery.html#discovery-ec2-network-host[ec2 specific host settings].

When the `discovery-gce` plugin is installed, you can use
{plugins}/discovery-gce-network-host.html[gce specific host settings].

[float]
[[advanced]]
=== Advanced network settings

`network.bind_host` and `network.publish_host` can be set instead of `network.host` 
for advanced cases such as when behind a proxy server.

`network.bind_host` sets the host different network
components will bind on.

`network.publish_host` sets the host the node will
publish itself within the cluster so other nodes will be able to connect to it.
Currently an elasticsearch node may be bound to multiple addresses, but only
publishes one.  If not specified, this defaults to the "best" address from 
`network.bind_host`, sorted by IPv4/IPv6 stack preference, then by reachability.

Both settings can be configured just like `network.host`: they accept ip
addresses, host names, and special values.

[float]
[[tcp-settings]]
=== Advanced TCP Settings

Any component that uses TCP (like the HTTP, Transport and Memcached)
share the following allowed settings:

[cols="<,<",options="header",]
|=======================================================================
|Setting |Description
|`network.tcp.no_delay` |Enable or disable tcp no delay setting.
Defaults to `true`.

|`network.tcp.keep_alive` |Enable or disable tcp keep alive. Defaults
to `true`.

|`network.tcp.reuse_address` |Should an address be reused or not.
Defaults to `true` on non-windows machines.

|`network.tcp.send_buffer_size` |The size of the tcp send buffer size
(in size setting format). By default not explicitly set.

|`network.tcp.receive_buffer_size` |The size of the tcp receive buffer
size (in size setting format). By default not explicitly set.
|=======================================================================

[float]
[[module-settings]]
=== Module-specific Settings

There are several modules within a Node that use network based
configuration, for example, the
<<modules-transport,transport>> and
<<modules-http,http>> modules. Node level
network settings allows to set common settings that will be shared among
all network based modules (unless explicitly overridden in each module).

