# Internet Protocol Control Protocol

In computer networking, Internet Protocol Control Protocol (IPCP) is a Network Control Protocol (NCP) for establishing and configuring Internet Protocol over a Point-to-Point Protocol link. IPCP is responsible for configuring the IP addresses as well as for enabling and disabling the IP protocol modules on both ends of the point-to-point link. IPCP uses the same packet exchange mechanism as the Link Control Protocol. IPCP packets may not be exchanged until PPP has reached the Network-Layer Protocol phase, and any IPCP packets received before this phase is reached should be silently discarded. IPCP has the NCP protocol code number 0x8021.
Each of the two endpoints of a PPP connection must send an IPCP configure request to its peer because the TCP/IP options are independent for each direction of a PPP connection.
A PPP endpoint can request a specific IP address from its peer. It can also ask the peer to suggest an IP address by requesting the address 0.0.0.0; the peer then sends its suggestion in an IPCP Nak packet, which the first peer must subsequently request in order to complete the negotiation. In practice, in protocols like PPPoE which is commonly used in home broadband connections, the latter method (request suggestion, nak with suggestion, request suggested address) is used to set the IP address of the ISP's client endpoint (i.e. the customer-premises equipment), while the former method (request address) is used to inform the client of the ISP endpoint IP (provider edge equipment).
A similar NCP, the IPv6 Control Protocol exists for IPv6. It can be used together with IPCP on the same PPP connection for a dual stack link. (When interfacing newer and older equipment that doesn't support IPv6 one sees LCP ProtRej messages for protocol 0x8057 from the side that doesn't support IPV6CP.)

## IP Frame

After the configuration is done, the link is able to carry IP data as a payload of the PPP frame. This code indicates that IP data is being carried.
| PPP header | IPCP header | Data::: |
IPCP header:
| Offsets | Octet | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| Octet | Bit | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
| 0 | 0 | Code | Code | Code | Code | Code | Code | Code | Code | Identifier | Identifier | Identifier | Identifier | Identifier | Identifier | Identifier | Identifier | Length | Length | Length | Length | Length | Length | Length | Length | Length | Length | Length | Length | Length | Length | Length | Length |
Code.
8 bits. Specifies the function to be performed.
| Code | Description | References |
| 0 | Vendor Specific. | RFC 2153 |
| 1 | Configure-Request. | |
| 2 | Configure-Ack. | |
| 3 | Configure-Nak. | |
| 4 | Configure-Reject. | |
| 5 | Terminate-Request. | |
| 6 | Terminate-Ack. | |
| 7 | Code-Reject. | |
Identifier. 8 bits.
Used to match requests and replies.
Length. 16 bits. Size of the packet including the header.
Data. Variable length. Zero or more bytes of data as indicated by the Length. This field may contain one or more Options.

## Configuration Options

IPCP Configuration Options allow negotiatiation of desirable Internet Protocol parameters. IPCP uses the same Configuration Option format defined for LCP Link Control Protocol, with a separate set of Options.
IPCP Configuration Options:
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 |
| Option | Option | Option | Option | Option | Option | Option | Option | Length | Length | Length | Length | Length | Length | Length | Length |
| Data ||||||||||||||||
Option. 8 bits.
| Option | Length | Description | References |
| 1 | 10 | IP-Addresses (deprecated) | RFC 1172, RFC 1332 |
| 2 | ≥4 | IP-Compression-Protocol | RFC 1332, RFC 3241, RFC 3544 |
| 3 | 6 | IP-Address. | RFC 1332 |
| 4 | 6 | Mobile-IPv4. | RFC 2290 |
| 129 | 6 | Primary DNS Server Address. | RFC 1877 |
| 130 | 6 | Primary NBNS Server Address. | RFC 1877 |
| 131 | 6 | Secondary DNS Server Address. | RFC 1877 |
| 132 | 6 | Secondary NBNS Server Address. | RFC 1877 |
Length. 8 bits.
Data. Variable length.

### IP-Compression-Protocol

| Type | Length | IP-Compression-Protocol | Data |
| 1 byte | 1 byte | 2 bytes | variable |

### IP-Address

| Type | Length | IP address |
| 1 byte | 1 byte | 4 bytes |

## Microsoft

In the Microsoft implementation, "Common IPCP options include an IP address and the IP addresses of DNS and NetBIOS name servers."