Este documento explica conceptos fundamentales de direcciones IP, incluyendo cómo las direcciones IP identifican dispositivos en una red, los protocolos DHCP y netmask, las clases de redes, direcciones reservadas y rangos privados, puertos y sockets TCP y UDP, y cómo estos elementos permiten la comunicación entre dispositivos en una red.
1. Direcciones IP, Números de Puertos y
Sockets
Dirección IP
Una dirección IP es un número de 32 bits que identifica de manera lógica y
jerárquica a una interfaz de un dispositivo (habitualmente una computadora)
dentro de una red que utilice el protocolo IP (Internet Protocol).
Direcciones MAC
Dicho número es distinto de la dirección MAC que es un número hexadecimal
asignado a la tarjeta o dispositivo de red por el fabricante.
DHCP
La dirección IP de una máquina puede cambiar con la conexión. A esta forma
de asignación de dirección IP se denomina una dirección IP dinámica. DHCP
(Dynamic Host Configuration Protocol) es un protocolo para asignar
direcciones IP dinámicas.
Dotted Quad Address
En la expresión de direcciones IPv4 en decimal se separa cada octeto por un
carácter ".". Cada uno de estos octetos puede estar comprendido entre 0 y 255,
salvo algunas excepciones. Los ceros iniciales, si los hubiera, se pueden
obviar. Por ejemplo: 164.12.123.65
Netmask
Una dirección IP se descompone de forma arbitraria en una parte de red y una
parte de máquina. Por ejemplo 164.12.123 puede ser la parte de red y 65 la
parte de máquina (host). Para describir en que punto se parte una IP se usa
una máscara de red o netmask la cual es un número cuya representación
binaria tiene unos en la parte de red.
Clases de Redes
Hay tres clases de direcciones IP que una organización puede recibir de parte
de la Internet Corporation for Assigned Names and Numbers(ICANN): clase
A, clase B y clase C.
2. En una red de clase A, se asigna el primer octeto para identificar la red,
reservando los tres últimos octetos (24 bits) para que sean asignados a
los hosts.
En una red de clase B, se asignan los dos primeros octetos para
identificar la red.
En una red de clase C, se asignan los tres primeros octetos para
identificar la red.
Direcciones IPs Reservadas
Hay una serie de direcciones reservadas:
La dirección 0.0.0.0 es utilizada por las máquinas cuando están
arrancando o no se les ha asignado dirección.
La dirección que tiene su parte de host a cero sirve para definir la red
en la que se ubica. Se denomina dirección de red.
La dirección que tiene su parte de host a uno sirve para comunicar con
todos los hosts de la red en la que se ubica. Se denomina dirección de
broadcast.
Las direcciones 127.x.x.x se reservan para pruebas de
retroalimentación (en términos CIDR la subred 127.0.0.0/8). Se
denomina dirección de bucle local o loopback. Cualquier mensaje que
se envía a una de estas direcciones es recibido por localhost.
Véase un ejemplo:
pp2@mimaquina:/tmp$ ssh
127.232.101.249
The authenticity of host
'127.232.101.249 (127.232.101.249)'
can't be established.
RSA key fingerprint is
b6:39:26:69:c3:6e:39:f1:d4:70:36:6c:
57:36:98:fa.
Are you sure you want to continue
connecting (yes/no)? yes
Warning: Permanently added
'127.232.101.249' (RSA) to the list
of known hosts.
3. Linux mimaquina.deioc.ull.es 2.6.18-
5-686 #1 SMP Mon Dec 24 16:41:07 UTC
2007 i686
You have new mail.
Last login: Thu Apr 24 15:55:41 2008
from mimaquina
pp2@mimaquina:~$
Rangos IP Reservados
Hay ciertas direcciones en cada clase de dirección IP que no están asignadas y
que se denominan direcciones privadas. Las direcciones privadas pueden ser
utilizadas por los hosts que usan traducción de dirección de red (NAT) para
conectarse a una red pública o por los hosts que no se conectan a Internet. En
una misma red no puede existir dos direcciones iguales, pero sí se pueden
repetir en dos redes privadas que no tengan conexión entre sí o que se sea a
través de NAT. Las direcciones privadas son:
Clase A: 10.0.0.0 a 10.255.255.255 (8 bits red, 24 bits hosts)
Clase B: 172.16.0.0 a 172.31.255.255 (16 bits red, 16 bits hosts)
Clase C: 192.168.0.0 a 192.168.255.255 (24 bits red, 8 bits hosts)
Classless Inter-Domain Routing
El sistema Classless Inter-Domain Routing (CIDR) permite que la máscara de
red no tenga que terminar en una frontera de byte. Por ejemplo la
dirección 216.240.32.0/27 indica que la máscara de red contiene 27 bits
dando lugar a una red de tamaño 32.
El módulo Net::Netmask
El módulo Net::Netmask nos permite calcular las diferentes partes de una
máscara en notación CIDR:
pp2@nereida$ perl -MNet::Netmask -wde 0
main::(-e:1): 0
DB<1> $x = Net::Netmask->new('216.240.32.0/27')
DB<2> p $x->size() # Tamaño de la red
32
DB<3> p $x->bits() # Número de bits en la máscara
27
DB<4> p $x->hostmask() # Máscara de máquina
0.0.0.31
4. DB<5> p $x->base() # Primera dirección: red
216.240.32.0
DB<6> p $x->broadcast() # Última: broadcast
216.240.32.31
DB<7> p $x->mask() # Máscara de red
255.255.255.224
DB<8> printf "%b",224 # 3 bits a uno
11100000
DB<9> x $x # El objeto
0 Net::Netmask=HASH(0x848e7e8)
'BITS' => 27
'IBASE' => 3639615488
DB<10> p $x->match('216.240.32.16') # Pertenece
16
DB<11> p $x->match('216.240.29.16') # No pertenece
0
DB<13> p "<".$x->match('216.240.32.0').">"
<0 >
DB<14> p $x->maxblock # Máscara de la dirección de
base
19
DB<18> @a = $x->enumerate # Enumerar direcciones
DB<19> p "@a[0..3,-4..-1]"
216.240.32.0 216.240.32.1 216.240.32.2 216.240.32.3
216.240.32.28 216.240.32.29 216.240.32.30
216.240.32.31
DB<20> @b = $x->inaddr() # zonas DNS
DB<22> $" = ","
DB<23> p "@b[-4..-1]"
,32.240.216.in-addr.arpa,0,31
DB<24>
Zonas
Una zona es una porción del espacio de nombres DNS cuya responsabilidad
ha sido delegada a una organización.
Puertos y Sockets
Una vez que el mensaje llega a la IP de destino es necesario conocer a que
programa/proceso hay que entregarlo. Esta es la función del número de
puerto: un número de puerto es un número de 16 bits (de 1 a 65535) que sirve
para identificar el proceso al que entregar el mensaje dentro de la máquina.
Socket
5. Un socket es una interfaz de entrada-salida de datos que permite la
intercomunicación entre procesos. Los procesos pueden estar ejecutándose en
el mismo o en distintos sistemas, unidos mediante una red. Un identificador de
socket es una pareja formada por una dirección IP y un puerto. Cuando un
programa crea un socket puede solicitarle al sistema operativo que asocie un
número de puerto con el socket.
Hay dos tipos de sockets que son especialmente importantes: Streams y
Datagrams.
Sockets Stream
Los Sockets Stream son los más utilizados, hacen uso del protocolo TCP, el
cual nos provee un flujo de datos bidireccional, secuenciado, sin duplicación
de paquetes y libre de errores. La especificación del protocolo TCP se puede
leer en la RFC-793 .
Sockets Datagram
Los Sockets Datagram hacen uso del protocolo UDP, el cual nos provee un
flujo de datos bidireccional, pero los paquetes pueden llegar fuera de
secuencia, pueden no llegar o contener errores. Se llaman también sockets sin
conexión, porque no hay que mantener una conexión activa, como en el caso
de sockets stream. Son utilizados para transferencia de información paquete
por paquete.
Puertos TCP y UDP
De hecho hay dos conjuntos de números de puerto: uno para sockets TCP y
otro para sockets UDP. Los números de puerto del 0 al 1023 están reservados
para servicios bien conocidos. la mayor parte de los servicios usan bien TCP
bien UDP pero hay algunos que pueden comunicar con los dos
protocolos. Internet Corporation for Assigned Names and Numbers (ICANN)
reserva habitualmente ambos números TCP y UDP para el mismo servicio.
Disponibilidad del Puerto
En algunas versiones de Unix los puertos del 49152 al 65535 se reservan para
la asignación automática de conexiones cuando el número de puerto no se ha
explicitado. Los restantes en el rango 1024 a 49151 estan libre para uso por
nuestras aplicaciones. Es una buena idea comprobar que el número de puerto
solicitado esta libre usando, por ejemplo, netstat :
pp2@unamaquina:~/Lbook$ netstat -t
Active Internet connections (w/o servers)
6. Proto Recv-Q Send-Q Local Address Foreign
Address State
tcp 0 0 unamaquina:www 200-
112-136-16.bbt:3217 SYN_RECV
tcp 0 0 unamaquina:www
crawl12.exabot.co:35207 TIME_WAIT
tcp 0 0 unamaquina:www
122.red-83-58-106:10646 FIN_WAIT2
tcp 0 0 unamaquina:42373
funchal:ssh ESTABLISHED
tcp 0 0 unamaquina:41987
funchal:ssh ESTABLISHED
tcp 0 0 unamaquina:55541
funchal:ssh ESTABLISHED
tcp 0 0 unamaquina:56452 fk-
in-f147.google.c:www ESTABLISHED
tcp 0 0 unamaquina:56451 mg-
in-f83.google.co:www ESTABLISHED
tcp 0 0 unamaquina:56462 mg-
in-f83.google.co:www ESTABLISHED
Subsecciones
o
Dirección IP
Direcciones MAC
DHCP
Dotted Quad Address
Netmask
Clases de Redes
Direcciones IPs Reservadas
Rangos IP Reservados
Classless Inter-Domain Routing
El módulo Net::Netmask
Zonas
Puertos y Sockets
Socket
Sockets Stream
Sockets Datagram
Puertos TCP y UDP
Disponibilidad del Puerto