Resumen de las Capas del Modelo TCP/IP
El modelo TCP/IP se compone de cuatro capas:
- Capa de Aplicación
- Capa de Transporte
- Capa de Internet
- Capa de Acceso a la Red
1. Capa de Aplicación
La capa de aplicación incluye los protocolos que usan las aplicaciones para comunicarse a través de una red.
1 2 3 4 5 6 7 8 9 10 11 |
import socket # Ejemplo simple de un cliente HTTP (Capa de Aplicación) def cliente_http(): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect(("example.com", 80)) s.sendall(b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n") respuesta = s.recv(4096) print(respuesta.decode("utf-8")) cliente_http() |
2. Capa de Transporte
La capa de transporte se encarga de la comunicación de datos entre sistemas y proporciona servicios como el control de flujo, la corrección de errores y la segmentación de datos.
1 2 3 4 5 6 7 8 9 10 11 |
import socket # Ejemplo de una conexión TCP (Capa de Transporte) def conexion_tcp(): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect(("example.com", 80)) s.sendall(b"Hello, world") data = s.recv(1024) print(f"Received {data!r}") conexion_tcp() |
3. Capa de Internet
La capa de Internet se encarga de mover los paquetes de datos desde el origen hasta el destino a través de múltiples redes.
1 2 3 4 5 6 7 8 9 |
import socket # Ejemplo de obtención de dirección IP utilizando DNS (Capa de Internet) def obtener_ip(): hostname = 'example.com' direccion_ip = socket.gethostbyname(hostname) print(f"La dirección IP de {hostname} es {direccion_ip}") obtener_ip() |
4. Capa de Acceso a la Red
La capa de acceso a la red se ocupa de la transmisión de datos entre el hardware de la red y los dispositivos.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import socket import struct # Ejemplo de creación de un socket en la capa de enlace (Capa de Acceso a la Red) def crear_socket_enlace(): # Crear un socket de nivel de enlace s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs(0x0003)) while True: # Recibir un paquete packet = s.recvfrom(65565) packet = packet[0] # Desempaquetar el paquete Ethernet eth_length = 14 eth_header = packet[:eth_length] eth = struct.unpack('!6s6sH', eth_header) eth_protocol = socket.ntohs(eth[2]) print(f"Protocolo Ethernet: {eth_protocol}") crear_socket_enlace() |