# Overview

**Networking** is what enables Compute Instances and other resources to communicate with each other. It can be broken down into three main use cases:

<figure><img src="https://content.gitbook.com/content/4csDFrNQz0Q4tDnx3xyT/blobs/0vLDM2J7fo3aU0sqihuT/image.png" alt=""><figcaption></figcaption></figure>

1. **Communication Between Compute Instances:** In large systems, workloads are often divided among multiple Compute Instances for easier management. These instances communicate with each other over an internal network called a **VPC (Virtual Private Cloud) Network**, identifying each other by their **Internal IPs**. In the example diagram, Compute Instance A can communicate directly with Compute Instance B as they are both within VPC Network A.
2. **Communication Across Different Groups:** In very large systems, instances can be grouped into different VPC Networks for varying levels of security. A **VPC Router** is used to connect these different networks, allowing them to communicate. The component that connects a VPC Network to the router is the **Router Interface**. In the example, for Compute Instance A to communicate with Compute Instance D, the traffic must pass from VPC Network A, through the VPC Router, and into VPC Network B.
3. **Communication Between Users and the System:** For services like websites or applications, communication occurs over the public internet. This requires a public-facing address, which is the **External IP**. In the example, for a user to communicate with Compute Instance A, they must know its External IP. A process called NAT (Network Address Translation) then translates this address to allow access to Compute Instance A within its private VPC Network.

## Networkig Components

The components of Networking consist of:

1. **VPC Networks:** Also known as internal networks, these connect processing resources (such as Compute Instances, Load Balancers, and Database Instances) within the same network, allowing them to communicate.
   * **Subnet:** This resource defines the scope of a VPC Network, including its size and the range of internal IP addresses it supports. On NIPA Cloud Space, there is a one-to-one relationship between a VPC Network and a Subnet, so the terms are often used interchangeably. The size and IP range are defined using **CIDR (Classless Inter-Domain Routing)**.
   * **Port:** Sometimes called an interface, this is the component that attaches to a resource, giving it access to the VPC Network. It holds the address (**internal IP**) that other resources use to connect to it.
2. **VPC Routers:** To connect different VPC Networks, each network must have a **Router Interface** attached to the same router.
   * **Router Interface:** The port that connects a VPC Network to a VPC Router.
3. **External Network:** A special VPC Network shared across the entire NCS platform that provides a gateway to the public internet.
   * **External IPs:** Public IP addresses that are bound to a port on a resource (like a Compute Instance, Load Balancer, or Database Instance) to serve as its address on the internet.

[Read more about Networking](https://nipa.cloud/products/nipa-cloud-iaas/nipa-space/networking)

## Recommendations

{% content-ref url="vpc-network" %}
[vpc-network](vpc-network)
{% endcontent-ref %}

{% content-ref url="security-group" %}
[security-group](security-group)
{% endcontent-ref %}

{% content-ref url="external-ip" %}
[external-ip](external-ip)
{% endcontent-ref %}

