# IP Control Protocol

En redes de computadoras, el Internet Protocol Control Protocol (IPCP) es un protocolo de control de red (Network Control Protocol, NCP) para configurar el IP en un enlace Point-to-Point Protocol (PPP).
IPCP recién se puede usar una vez establecido el nivel de enlace, es decir, hasta la fase de configuración de red. Cualquier paquete IPCP recibido antes de esta fase deberá ser descartado. IPCP usa el mismo mecanismo de negociación de opciones que Link Control Protocol (LCP).

## Trama IPCP

El formato de la trama de red de IPCP es el siguiente:
| Código | ID | Longitud | Opciones de configuración |
| 1 byte | 1 byte | 2 bytes | Longitud variable |
El campo código puede contener uno de los siguientes valores:
* Configure Request
* Configure Ack
* Configure Nak
* Configure Reject
* Code Reject
El campo ID lleva un número para asociar cada petición (request) con su respuesta (ack, nak o reject). El campo longitud indica la longitud completa de la trama IPCP. Las opciones de configuración se codifican usando el formato Tipo-Longitud-Valor. Indican qué parámetros de la capa o nivel de red se están configurando y cuál es su valor.

## Cómo funciona

IPCP negocia los valores que van a tener ciertos parámetros de IP. Para ello la estación manda un Configure Request con un ID único indicando en las opciones de configuración los campos que quiere configurar y el valor que van a tener. El otro extremo responde con una trama que contiene el mismo ID. El código varía en función de la respuesta:
* ACK de configuración: se aceptan todos los parámetros del Configure Request con sus respectivos valores. La negociación ha acabado y la capa de red está configurada.
* NAK de configuración: se considera que el valor de las opciones que adjunta en la información IPCP es incorrecta y sugiere los valores correctos.
* Rechazo de configuración: informa de que los valores en el campo de opciones de configuración no se negociarán.
* Petición de terminación: hace una petición para cerrar la sesión.
* ACK de terminación: se refiere a que la petición de terminación fue concedida y se procede a cerrar la sesión.
* Rechazo de código: informa de qué los valores en la información de IPCP son opciones desconocidas por el otro extremo. Por tanto, no se negociarán, dado que no sabe interpretarlos.
La negociación es una sucesión de Configure Request con su respuesta hasta que la estación manda un Configure Request que es respondido con un Configure Ack.

### Ejemplo

Imaginemos una conexión PPP en la que ya está establecido el nivel de enlace, es decir, ha finalizado la negociación LCP y se ha autenticado la estación. La estación empieza la negociación de la capa de red, mandando un Configure Request con los parámetros que quiere configurar:
Como la estación no sabe su dirección IP (campo Address), y por ello lo deja en blanco, para que el servidor en el otro extremo lo configure. Pide también direcciones de dos servidores DNS y NBNS. Sugiere las direcciones de los servidores DNS, probablemente porque las conserva de conexiones anteriores. El servidor le contesta:
Por lo tanto, informa de que los servidores de nombres de netbios (NBNS) no se configurarán. La estación reformula el Configure Request, esta vez sin los servidores NBNS:
El Identifier ha cambiado. La respuesta del otro extremo tendrá también el nuevo valor de ID.
En este caso, el servidor indica que la dirección IP que la estación ha mandado es incorrecta (Configure NAK) y sugiere una nueva. Al poner un valor inválido en el Address del Configure Request la estación estaba pidiendo que le asignaran una dirección IP. Esta es la que se ha asignado. La estación manda un Configure Request con un nuevo identificador y el valor corregido.
El servidor acepta esta configuración:
La negociación ha finalizado correctamente. La estación ya tiene configurado su nivel de red, por lo que ya puede empezar a mandar paquetes IP.