---
obj: concept
aliases: ["IP"]
wiki: https://en.wikipedia.org/wiki/Internet_Protocol
rfc: https://datatracker.ietf.org/doc/html/rfc791
---

# Internet Protocol (IP)
The Internet Protocol (IP) is the network layer communications protocol in the Internet protocol suite for relaying datagrams across network boundaries. Its routing function enables internetworking, and essentially establishes the Internet.

IP has the task of delivering packets from the source host to the destination host solely based on the IP addresses in the packet headers. For this purpose, IP defines packet structures that encapsulate the data to be delivered. It also defines addressing methods that are used to label the datagram with source and destination information.

IP was the connectionless datagram service in the original Transmission Control Program introduced by Vint Cerf and Bob Kahn in 1974, which was complemented by a connection-oriented service that became the basis for the Transmission Control Protocol ([TCP](TCP.md)). The Internet protocol suite is therefore often referred to as TCP/IP.

The first major version of IP, Internet Protocol version 4 (IPv4), is the dominant protocol of the Internet. Its successor is Internet Protocol version 6 (IPv6), which has been in increasing deployment on the public Internet since around 2006.[1]
Function
Encapsulation of application data carried by [UDP](UDP.md) to a link protocol frame

The Internet Protocol is responsible for addressing host interfaces, encapsulating data into datagrams (including fragmentation and reassembly) and routing datagrams from a source host interface to a destination host interface across one or more IP networks.[2] For these purposes, the Internet Protocol defines the format of packets and provides an addressing system.

Each datagram has two components: a header and a payload. The IP header includes a source IP address, a destination IP address, and other metadata needed to route and deliver the datagram. The payload is the data that is transported. This method of nesting the data payload in a packet with a header is called encapsulation.

IP addressing entails the assignment of IP addresses and associated parameters to host interfaces. The address space is divided into subnets, involving the designation of network prefixes. IP routing is performed by all hosts, as well as routers, whose main function is to transport packets across network boundaries. Routers communicate with one another via specially designed routing protocols, either interior gateway protocols or exterior gateway protocols, as needed for the topology of the network. 

# IPv4
Internet Protocol version 4 (IPv4) is the first version of the Internet Protocol (IP) as a standalone specification. It is one of the core protocols of standards-based internetworking methods in the Internet and other packet-switched networks. IPv4 was the first version deployed for production on SATNET in 1982 and on the ARPANET in January 1983. It is still used to route most Internet traffic today, even with the ongoing deployment of Internet Protocol version 6 (IPv6), its successor.

## Addressing
IPv4 uses 32-bit addresses which limits the address space to 4294967296 ($2^{32}$) addresses.

IPv4 reserves special address blocks for private networks (224 + 220 + 216 ≈ 18 million addresses) and multicast addresses (228 ≈ 268 million addresses).

IPv4 addresses may be represented in any notation expressing a 32-bit integer value. They are most often written in dot-decimal notation, which consists of four octets of the address expressed individually in decimal numbers and separated by periods.

For example, the quad-dotted IP address in the illustration (`172.16.254.1`) represents the 32-bit decimal number `2886794753`, which in hexadecimal format is ` 0xAC10FE01`.

CIDR notation combines the address with its routing prefix in a compact format, in which the address is followed by a slash character (/) and the count of leading consecutive 1 bits in the routing prefix (subnet mask). 

### Special-use addresses
The Internet Engineering Task Force (IETF) and IANA have restricted from general use various reserved IP addresses for special purposes. Notably these addresses are used for multicast traffic and to provide addressing space for unrestricted uses on private networks.

**Special address blocks**:
| Address block      | Address range               | Number of  <br>addresses | Scope           | Description                                                                                                                                                                          |
| ------------------ | --------------------------- | ------------------------ | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 0.0.0.0/8          | 0.0.0.0–0.255.255.255       | 16777216                 | Software        | Current (local, "this") network                                                                                                                                                      |
| 10.0.0.0/8         | 10.0.0.0–10.255.255.255     | 16777216                 | Private network | Used for local communications within a private network                                                                                                                               |
| 100.64.0.0/10      | 100.64.0.0–100.127.255.255  | 4194304                  | Private network | Shared address space for communications between a service provider and its subscribers when using a carrier-grade NAT                                                                |
| 127.0.0.0/8        | 127.0.0.0–127.255.255.255   | 16777216                 | Host            | Used for loopback addresses to the local host                                                                                                                                        |
| 169.254.0.0/16     | 169.254.0.0–169.254.255.255 | 65536                    | Subnet          | Used for link-local addresses between two hosts on a single link when no IP address is otherwise specified, such as would have normally been retrieved from a [DHCP](DHCP.md) server |
| 172.16.0.0/12      | 172.16.0.0–172.31.255.255   | 1048576                  | Private network | Used for local communications within a private network                                                                                                                               |
| 192.0.0.0/24       | 192.0.0.0–192.0.0.255       | 256                      | Private network | IETF Protocol Assignments, DS-Lite (/29)                                                                                                                                             |
| 192.0.2.0/24       | 192.0.2.0–192.0.2.255       | 256                      | Documentation   | Assigned as TEST-NET-1, documentation and examples                                                                                                                                   |
| 192.88.99.0/24     | 192.88.99.0–192.88.99.255   | 256                      | Internet        | Reserved. Formerly used for IPv6 to IPv4 relay (included IPv6 address block `2002::/16`).                                                                                            |
| 192.168.0.0/16     | 192.168.0.0–192.168.255.255 | 65536                    | Private network | Used for local communications within a private network                                                                                                                               |
| 198.18.0.0/15      | 198.18.0.0–198.19.255.255   | 131072                   | Private network | Used for benchmark testing of inter-network communications between two separate subnets                                                                                              |
| 198.51.100.0/24    | 198.51.100.0–198.51.100.255 | 256                      | Documentation   | Assigned as TEST-NET-2, documentation and examples                                                                                                                                   |
| 203.0.113.0/24     | 203.0.113.0–203.0.113.255   | 256                      | Documentation   | Assigned as TEST-NET-3, documentation and examples                                                                                                                                   |
| 224.0.0.0/4        | 224.0.0.0–239.255.255.255   | 268435456                | Internet        | In use for multicast (former Class D network)                                                                                                                                        |
| 233.252.0.0/24     | 233.252.0.0–233.252.0.255   | 256                      | Documentation   | Assigned as MCAST-TEST-NET, documentation and examples (Note that this is part of the above multicast space.)                                                                        |
| 240.0.0.0/4        | 240.0.0.0–255.255.255.254   | 268435455                | Internet        | Reserved for future use (former Class E network)                                                                                                                                     |
| 255.255.255.255/32 | 255.255.255.255             | 1                        | Subnet          | Reserved for the "limited broadcast" destination address                                                                                                                             |

### Private networks
Of the approximately four billion addresses defined in IPv4, about 18 million addresses in three ranges are reserved for use in private networks. Packets addresses in these ranges are not routable in the public Internet; they are ignored by all public routers. Therefore, private hosts cannot directly communicate with public networks, but require network address translation at a routing gateway for this purpose.

**Reserved private IPv4 network ranges**:
| Name         | CIDR block     | Address range                 | Number of addresses | Classful description                   |
| ------------ | -------------- | ----------------------------- | ------------------- | -------------------------------------- |
| 24-bit block | 10.0.0.0/8     | 10.0.0.0 – 10.255.255.255     | 16777216            | Single Class A                         |
| 20-bit block | 172.16.0.0/12  | 172.16.0.0 – 172.31.255.255   | 1048576             | Contiguous range of 16 Class B blocks  |
| 16-bit block | 192.168.0.0/16 | 192.168.0.0 – 192.168.255.255 | 65536               | Contiguous range of 256 Class C blocks |

### Loopback
The class A network `127.0.0.0` (classless network `127.0.0.0/8`) is reserved for loopback. IP packets whose source addresses belong to this network should never appear outside a host. Packets received on a non-loopback interface with a loopback source or destination address must be dropped.

# IPv6
Internet Protocol version 6 (IPv6) is the most recent version of the Internet Protocol (IP), the communications protocol that provides an identification and location system for computers on networks and routes traffic across the Internet. IPv6 was developed by the Internet Engineering Task Force (IETF) to deal with the long-anticipated problem of IPv4 address exhaustion, and was intended to replace IPv4.

## Addressing
IPv6 addresses have 128 bits. The design of the IPv6 address space implements a different design philosophy than in IPv4, in which subnetting was used to improve the efficiency of utilization of the small address space. In IPv6, the address space is deemed large enough for the foreseeable future, and a local area subnet always uses 64 bits for the host portion of the address, designated as the interface identifier, while the most-significant 64 bits are used as the routing prefix. While the myth has existed regarding IPv6 subnets being impossible to scan, RFC 7707 notes that patterns resulting from some IPv6 address configuration techniques and algorithms allow address scanning in many real-world scenarios.

The 128 bits of an IPv6 address are represented in 8 groups of 16 bits each. Each group is written as four hexadecimal digits (sometimes called hextets or more formally hexadectets and informally a quibble or quad-nibble) and the groups are separated by colons (`:`). An example of this representation is `2001:0db8:0000:0000:0000:ff00:0042:8329`.

For convenience and clarity, the representation of an IPv6 address may be shortened with the following rules:
- One or more leading zeros from any group of hexadecimal digits are removed, which is usually done to all of the leading zeros. For example, the group `0042` is converted to `42`. The group `0000` is converted to `0`.
- Consecutive sections of zeros are replaced with two colons (`::`). This may only be used once in an address, as multiple use would render the address indeterminate. RFC 5952 requires that a double colon not be used to denote an omitted single section of zeros.

An example of application of these rules:

- Initial address: `2001:0db8:0000:0000:0000:ff00:0042:8329`.
- After removing all leading zeros in each group: `2001:db8:0:0:0:ff00:42:8329`.
- After omitting consecutive sections of zeros: `2001:db8::ff00:42:8329`.

The loopback address `0000:0000:0000:0000:0000:0000:0000:0001` is defined in RFC 5156 and is abbreviated to `::1` by using both rules.

As an IPv6 address may have more than one representation, the IETF has issued a proposed standard for representing them in text.

Because IPv6 addresses contain colons, and URLs use colons to separate the host from the port number, RFC2732 specifies that an IPv6 address used as the host-part of a [URL](URL.md) should be enclosed in square brackets, e.g. http://[2001:db8:4006:812::200e] or http://[2001:db8:4006:812::200e]:8080/path/page.html.
