> For the complete documentation index, see [llms.txt](https://juan-martin-franco.gitbook.io/network-+/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://juan-martin-franco.gitbook.io/network-+/3.-modelo-tcp-ip/3.4-tcp-udp-icmp-gre-ipsec.md).

# 3.4 - TCP, UDP, ICMP, GRE, IPsec

## Resumen

En esta página, se detalla información adicional acerca de los siguientes protocolos:

* <mark style="color:blue;">**TCP**</mark>
* <mark style="color:blue;">**UDP**</mark>
* <mark style="color:blue;">**ICMP**</mark>
* <mark style="color:blue;">**GRE**</mark>
* <mark style="color:blue;">**IPsec**</mark>

### TCP (Transmission Control Protocol)

El protocolo <mark style="color:blue;">**TCP**</mark> es un protocolo de Capa de Transporte, es decir, opera en la Capa 4 del Modelo OSI.

TCP se utiliza encima del protocolo IP para una <mark style="color:green;">**transmisión fiable de paquetes**</mark>.

Este protocolo opera realizando lo que conocemos como Three-Way Handshake entre el cliente y el servidor y luego establece la conexión. Por esta razón, TCP es considerado un protocolo <mark style="color:green;">**Orientado a la Conexión**</mark>.\
\
Una vez establecida la conexión, el cliente y el servidor continúan renegociando cuantos datos pueden ser enviados y recibidos por medio del proceso conocido como **Windowing**.

A medida que se envían los datos, el receptor verifica que recibe todos los paquetes como se esperaba, enviando un <mark style="color:green;">**acuse de recibo**</mark> (un paquete con la bandera ACK activa) cada cierto tiempo.&#x20;

Incluso si los datos se reciben fuera de orden, TCP puede **reordenarlos** para que sean procesados y finalmente leídos por el sistema que los recibe.\
Si hay paquetes faltantes, el emisor los **retransmite** ya que se da cuenta por no haber recibido un ACK correspondiente.

Resumiendo, TCP provee de varias funciones, entre ellas:

* <mark style="color:blue;">**Transmisión fiable**</mark> de paquetes
* <mark style="color:blue;">**Control de Flujo**</mark> mediante **Windowing**
* <mark style="color:blue;">**Acuse de recibo**</mark> para asegurarse de que los paquetes llegan correctamente
* <mark style="color:blue;">**Reordenamiento**</mark> de los paquetes
* <mark style="color:blue;">**Retransmisión**</mark> en caso de que los paquetes se pierdan o no lleguen correctamente

### UDP (User Datagram Protocol)

El protocolo <mark style="color:blue;">**UDP**</mark> es el otro protocolo de Capa de Transporte, es decir, al igual que TCP, opera en la Capa 4 del Modelo OSI.

Este protocolo es considerado el opuesto de TCP, ya que es un protocolo <mark style="color:red;">**No Orientado a la Conexión**</mark>.

UDP es un protocolo de transporte de datos mucho más "liviano" que TCP, y también se utiliza encima del protocolo IP.

Este protocolo puede detectar si los paquetes fueron corrompidos cuando se reciben del cliente por medio de un <mark style="color:red;">**Checksum**</mark>.

Además de no existir conexión, <mark style="color:red;">**tampoco existe secuenciamiento**</mark>, por lo que si un paquete no llega o llega fuera de orden, el cliente nunca se enterará de esto y no volverá a emitir dicho paquete.&#x20;

Por estos motivos, UDP es útil para ciertas aplicaciones específicas como **streaming de audio y video, y aplicaciones que sean de tiempo real como llamadas VoIP o juegos online**.

UDP es considerado un protocolo <mark style="color:red;">**rápido**</mark> y simple de utilizar pero, si se necesita precisión sobre la llegada de los paquetes, no se debería utilizar dicho protocolo.

Resumiendo, UDP es un protocolo:

* <mark style="color:blue;">**No orientado a la Conexión**</mark>
* <mark style="color:blue;">**No fiable**</mark>
* <mark style="color:blue;">**Rápido**</mark>
* <mark style="color:blue;">**Útil para aplicaciones de tiempo real como streaming de audio y video, llamadas VoIP, etc.**</mark>
* <mark style="color:blue;">**No posee secuenciamiento, ni control de flujo, reordenamiento ni retransmisión.**</mark>

### ICMP (Internet Control Message Protocol)

El protocolo <mark style="color:blue;">**ICMP**</mark> es un protocolo de Capa de Red, es decir, opera en la Capa 3 del Modelo OSI.

Este protocolo es utilizado para <mark style="color:green;">c</mark><mark style="color:green;">**omunicar información acerca de problemas de conectividad**</mark> de red al emisor.

Por ejemplo, si se utiliza la herramienta **ping** para ver si un host remoto está activo o no, se está utilizando ICMP.

ICMP actualmente es listado como el protocolo número uno dentro de la suite TCP/IP y es utilizado como un <mark style="color:green;">**mecanismo de reporte de errores y un servicio de consultas**</mark>.

El protocolo ICMP es utilizado para enviar datagramas ICMP desde un cliente, un servidor o un dispositivo de red para indicar cuando hay un problema de conectividad de red, enviando mensajes redirigidos, **echo request y echo replies** y otros mensajes de diagnóstico.

### GRE (Generic Routing Encapsulation)

El protocolo <mark style="color:blue;">**GRE**</mark> es un **protocolo de tunelización** desarrollado por Cisco para **encapsular una gran variedad de protocolos** **de capa de Red** dentro de un enlace punto-a-punto o punto a multi-punto a través de la red del protocolo de Internet (IP)**.**

Este protocolo es utilizado como una forma simple y efectiva de crear un tunel, el cual es conocido como túnel GRE (<mark style="color:red;">**GRE tunnel**</mark>) sobre una red pública.

El uso de este protocolo permite que dos dispositivos compartan sus datos sobre esa red pública.

Cuando un Tunel GRE es establecido al nivel del router, <mark style="color:blue;">**es importante considerar el tamaño de unidad máxima de transmisión (MTU) para dicho tunel**</mark>. Un valor recomendable es utilizar 1400 bytes para que, sumando la encapsulación extra que se le va a agregar, no se superen los 1500 bytes, número que muchos dispositivos de red tienen definido en su respectivo MTU.

El tunel GRE es una forma de encapsulamiento, pero por defecto <mark style="color:red;">**no provee de encriptado**</mark>. \
Si se necesita un tunel seguro, se debe considerar el uso de un tunel IPsec.

### IPsec (Internet Protocol Security)

El protocolo <mark style="color:blue;">**IPsec**</mark> es un conjunto de protocolos de comunicación seguros de capa de Red o de procesamiento de paquetes.

Este protocolo es utilizado para proteger uno o más flujos de datos entre dos peers.

IPsec es un protocolo que <mark style="color:green;">**utiliza TCP**</mark> y <mark style="color:green;">**autentica y encripta paquetes IP**</mark> de manera efectiva asegurando las comunicaciones entre computadoras y dispositivos.

Utilizando <mark style="color:orange;">**IPsec, se provee la confidencialidad, integridad, autenticación de origen y la anti-repetición**</mark> de los datos.

Este protocolo nos permite crear un tunel sobre una red WAN, al igual que un tunel GRE, pero IPsec además nos encripta este tunel para protege los datos. Esto crea un tunel seguro por el cual podemos enviar todo nuestro tráfico y esto es utilizado dentro de las VPNs.

Para lograr esto, IPsec utilizada **dos protocolos subyacentes**:

* <mark style="color:purple;">**AH (Authentication Header)**</mark>: Este protocolo, el cual está dentro de IPsec, nos provee <mark style="color:blue;">**integridad y autenticación**</mark>. \
  Este protocolo toma el header normal de IP y la carga útil (el payload) y realiza un hash de ambos. Luego, este hash es utilizado para crear un nuevo header AH, el cual se añade al paquete. Este nuevo header AH es transmitido por nuestro router al router destino, el cual verifica cuando el paquete fue recibido, hasheado y comprobado contra este header AH.\
  Si los hashes coinciden, significa que se verificó la integridad correctamente. Si no coinciden, significa que no se pudo asegurar la integridad, por lo que se descarta el paquete, que luego será reenviado ya que utiliza TCP por encima. <br>
* <mark style="color:purple;">**ESP (Encapsulating Security Payload)**</mark>: Este protocolo nos provee encriptado e integridad para los paquetes enviados sobre IPsec. Este Payload es agregado justo a la derecha del header IP estándar de nuestros paquetes y además nos asegura que puede ser fácilmente ruteado con dispositivos IP estándar. Esto quiere decir que ESP es compatible con la mayoría de routers IP, incluyendo aquellos que no fueron designados para trabajar con IPsec inicialmente.&#x20;
