Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INTRODUCCIoN
Si alguna vez has intentado comprender Internet, seguro que has acabado frente a un
libro de TCP-IP. Y seguro que a la sexta página lo has dado por IMPOSIBLE!!!
TCP-IP es el alma de la red, nosotros te ofrecemos un curso MUY ESPECIAL ;)
Si, por ejemplo, eliminásemos de la parrafada Por supuesto, para que dos profesionales se
del doctor PyC todo aquello que no formase entiendan tienen que hablar no sólo el mismo
parte exclusivamente del lenguaje técnico de lenguaje técnico, si no también el mismo
los cirujanos, esta frase: idioma común.
Si el doctor PyC hablase Japonés, sin duda entrar más en profundidad en la comunicación
el doctor Scherzo habría puesto la misma que vimos en las viñetas.
cara de incomprensión.
¿Qué otro medio común han utilizado el doctor
Según lo que hemos visto hasta ahora, la Scherzo y el doctor Pyc para comunicarse?
comunicación entre los dos doctores funciona ¡El habla!
gracias a dos capas independientes: el idioma, Si trasladásemos toda esa conversación a un
y el lenguaje técnico. papel, ¿no tendría el mismo sentido? ¿Y si la
trasladásemos a una conversación telefónica?
¿O a una conversación por IRC (Internet Relay
Chat)?
¿Cuál es el motivo por el cual es esto así? Tanto si esa conversación es hablada como si
Pues, si pensáis un poco, llegaréis vosotros es escrita, seguiría utilizando tanto el lenguaje
mismos a la conclusión. técnico de los cirujanos, como el idioma
castellano. En nada cambiaría, salvo en el
Imaginad que el lenguaje técnico de los hecho de que el medio utilizado sería diferente.
cirujanos fuese un lenguaje completo, con
sus fórmulas de saludos, despedidas, una Ahora bien, igual que un cirujano japonés no
gramática completa para construir las frases, puede entenderse con un cirujano de Jaén, si
palabras para expresar cualquier término el doctor PyC le hubiese soltado la parrafada
común en cualquier comunicación (como los al doctor Scherzo por correo, y éste le hubiese
habituales: me lo repita, ¡habla más respondido a viva voz cuando recibiese la
despacio, que no me da tiempo a apuntarlo!, carta (es decir, que se lo habría contado a las
etc.), e incluso tuviese sus propios nombres, paredes), tampoco habría sido posible una
en lugar de los que tenemos en castellano comunicación.
(doctor Pyc, y doctor Scherzo). ¡Sería una
completa locura! Ambos interlocutores tienen que compartir el
mismo medio físico para comunicarse. Si un
Desde luego, no sería nada práctico que interlocutor está utilizando el teléfono, y el
cualquier cirujano tuviese que aprender un otro está respondiendo por escrito en un papel,
idioma totalmente nuevo sólo para poder jamás podrá haber una comunicación.
comunicarse con sus colegas.
Por supuesto, tampoco sirve de nada que
Lo más práctico, y lo más lógico, es utilizar ambos hablen a viva voz, si cada uno está en
el recurso conocido por todos que es el idioma un lugar diferente, donde no se puedan
castellano, y simplemente ampliarlo con una escuchar mutuamente.
serie de términos que permitan entrar en
detalle en los conceptos manejados por los Podemos considerar, por tanto, al medio físico
cirujanos. como otra capa de la comunicación. En este
caso, esta capa ya no existe por una
Una vez comprendida la necesidad de conveniencia de hacer las cosas más fáciles,
comunicarse utilizando dos capas, vamos a si no por una necesidad natural.
Por ejemplo, un programa que funcione bajo Por el momento, continuaremos con los
Windows no tiene que preocuparse de saber conceptos sin entrar en ningún detalle.
cómo dibujar una ventana en la pantalla, si Ahora que ya habéis comprendido el concepto
no que simplemente le dice al sistema de capas, he de pediros que os olvidéis del
dibújame una ventana de estas ejemplo de los cirujanos, porque mi intención
características y Windows hará el trabajo era únicamente que comprendieseis el
sucio por él. concepto de capas, pero no mostrar
metafóricamente cada capa del protocolo
Todavía recuerdo los tiempos en los que TCP/IP con su equivalente en el mundo real,
programaba aplicaciones gráficas en MS-DOS ya que las capas que forman TCP/IP no tienen
y me tenía que currar desde cero todo el prácticamente nada que ver con las capas que
interfaz... un auténtico infierno. Perdías más forman la comunicación entre dos cirujanos.
tiempo con el interfaz que con el propio
programa. La única capa que sí que tienen en común
tanto las máquinas como los cirujanos es la
Pues lo mismo que ocurre con las ventanas, del medio físico ya que, como dije, esta capa
que son una función común a todas las no surge como una facilidad para la
aplicaciones de Windows, también ocurre con comunicación, si no que es una necesidad
las comunicaciones, que tienen una serie de natural irremediable. Igual que dos cirujanos
funciones comunes a todas las aplicaciones necesitan compartir un mismo medio para
de comunicaciones. Estas funciones comunes, comunicarse, también han de hacerlo dos
que son las que proporciona el idioma TCP/IP, máquinas.
se ubican precisamente en el Sistema
Operativo, para que sea él el que lidie con los
detalles, igual que las ventanas las gestiona
el Sistema Operativo, y es él el único que se
preocupa de
conocer los
detalles para
dibujarlas.
Perico Palotes
C/Pirulin. Nº12. 1º A.
35003 Villapalotes (Huelva).
Gracias a las direcciones postales todo el sistema 3.2. La capa TCP (Transmission
de Correos puede funcionar. Y no sólo gracias a la Control Protocol = Protocolo de
dirección del destinatario, si no también a la del Control de Transmisión) : La
remitente, que será una dirección con el mismo
formato (nombre, calle, código postal, población, y
necesidad de las conexiones para
provincia). tener una comunicación fiable
Gracias a la dirección del remitente se sabrá a quién Volvamos ahora al escenario del hospital. En
informar si la carta no llega a su destino, y el esta ocasión, el doctor PyC recibe un aviso de
destinatario podrá responder a la carta si lo desea. urgencia a través del servicio de megafonía
del hospital.
Pues exactamente lo mismo ocurre con las
direcciones de Internet. Aunque estas direcciones,
las famosas IPs, aparentemente no consten de varios
campos (nombre, calle, población, etc.), en realidad
esos campos sí que existen, y están codificados
dentro del propio número que forma la dirección IP.
Como en algunos casos la comunicación no Sería absurdo que si el frame 7 no llega, se parase la película,
orientada a conexión es suficiente, en las pidiésemos de nuevo al emisor el frame 7, esperásemos su llegada,
máquinas también es utilizada para algunos la comprobásemos y volviésemos a activar la película. Si pensamos
casos concretos. Cuando no necesitamos que llegan entre 15 y 30 frames por segundo, bufff, estaríamos
saber si nuestro interlocutor nos está parando la película cada dos por tres
es mejor despreciar
escuchando, no necesitaremos utilizar un ese frame que no ha llegado y seguir con la peli :)
protocolo de transporte fiable, como es TCP,
si no que nos bastará con utilizar un protocolo En el caso de los programas de intercambio de archivos tipo P2P
no orientado a conexión, que también os (como el eMule, http://www.emule-project.net/), el tema se
sonará bastante, y es el UDP (Protocolo de complica un poquito, pero solo un poquito.
Datagramas de Usuario).
Si estamos descargando un programa llamado officexp.zip (de
Por tanto, UDP es también un protocolo de 650MB) desde 7 usuarios a la vez, este nos llega en trocitos
transporte e, igual que la mayoría de pequeños. Lo importante es que nos lleguen cuanto más trocitos
aplicaciones de comunicaciones utilizan como mejor y en el menor espacio de tiempo. Pero claro, también es
apoyo TCP/IP, también hay varias aplicaciones importante que no perdamos ningún trocito (o después el ZIP
que en lugar de eso utilizan como apoyo nos dará errores).
UDP/IP.
En este caso, podríamos pensar que es mejor utilizar TCP, puesto DOCTOR en un sistema UDP en un mundo P2P :)
que nos asegura que llegan todos los trocitos; pero entonces El doctor (receptor) recibe por megafonía un mensaje (archivo)
estaríamos sobrecargando la red P2P con centenares de peticiones PERO el tipo del megáfono (emisor) es MUY DESPREOCUPADO
de comprobación y la descarga sería muy lenta. ¿Cómo resolvemos y no le importa si el doctor (receptor) recibe o no el mensaje.
esto?
El mensaje (archivo) a transmitir es: PRESÉNTESE
Pues trabajamos con UDP y hacemos que sea el programa P2P INMEDIATAMENTE EN EL QUIRÓFANO.
quien compruebe si faltan trocitos. En caso de faltar algún trozo
se reclama y en caso de no faltar no se reclama. 1.- El tipo del megáfono (emisor) emite la primera palabra
(primera parte del archivo): PRESÉNTESE
PARALELISMO: Por si alguien no lo ha pillado, retomemos el 2.- El doctor (receptor) en teoría recibe la primera palabra
caso del doctor y hagamos un paralelismo con el mundo P2P. (primera parte del archivo): PRESÉNTESE
DOCTOR en un sistema TCP en un mundo P2P :) 3.- El tipo del megáfono (emisor) emite la segunda palabra
El doctor (receptor) recibe por megafonía un mensaje (archivo) (segunda parte del archivo): INMEDIATAMENTE
PERO el tipo del megáfono (emisor) es MUY EXIGENTE y
4.- El doctor (receptor) en teoría recibe la segunda palabra
OBLIGA al doctor (receptor) que confirme la correcta recepción
(segunda parte del archivo): INMEDIATAMENTE
de cada palabra (parte del archivo) que recibe.
pero cada palabra (trozo de archivo) emitida tendrá estará deberíamos poder olvidar. Una cosa es el tipo de protocolo que
precedida de un número correlativo (número de control). Vamos estamos utilizando para nuestras conexiones (TCP o UDP e
a verlo. incluso ambos a la vez) y sus consecuencias sobre la red y, OTRA
MUY DISTINTA, cómo programamos el software para mejorar
DOCTOR en un sistema UDP en un mundo P2P (con control el rendimiento de dichas conexiones.
añadido).
El doctor (receptor) recibe por megafonía un mensaje (archivo) Hemos visto que las carencias de seguridad del protocolo UDP
con un sistema previamente pactado :) (capa de transporte) han sido "salvadas" gracias a cómo hemos
programado el software (nivel de aplicación).
El mensaje (archivo) a transmitir es: PRESÉNTESE
INMEDIATAMENTE EN EL QUIRÓFANO. PARA LOS QUISQUILLOSOS:
- Si, pero
¿y si el doctor (software receptor) no recibe ninguna
Según han pactado, el mensaje a transmitir será: palabra (trocito de archivo) porque está dormido?
UNOPRESÉNTESE DOSINMEDIATAMENTE TRESEN Pues entonces dotamos de un poco más de inteligencia al programa
CUATROEL CINCOQUIRÓFANO. para que la primera palabra (trocito de archivo) se haga por
TCP (confirmacion aobligatoria) y el resto por UDP. De esta
1.- El tipo del megáfono (emisor) emite la primera palabra forma no se emitirán mas palabras (trocitos de archivo) por
( p r i m e r a p a r t e d e l a rc h i v o ) : U N O P R E S É N T E S E megafonía hasta que el doctor llame al Sr. del megáfono
confirmando que la recibido la primera palabra.
2.- El doctor (receptor) en teoría recibe la primera palabra
( p r i m e r a p a r t e d e l a rc h i v o ) : U N O P R E S É N T E S E - Si, pero
¿y si el doctor (software receptor) no confirma la
recepción de esa primera palabra (trocito de archivo)?
3.- El tipo del megáfono (emisor) emite la segunda palabra Pues hacemos que el Sr. de megafonía (software emisor) envíe
(segunda parte del archivo): DOSINMEDIATAMENTE un mensaje al teléfono móvil del doctor cada 5 minutos durante
2 horas hasta que conteste.
4.- El doctor (receptor) en teoría recibe la segunda palabra
(segunda parte del archivo): DOSINMEDIATAMENTE ¿Y si a pesar de todo no contesta? Pues llamamos a otro doctor
mientras el primero está dormido (en un P2P sería el equivalente
5.- Seguiríamos así hasta que el doctor (receptor) en teoría a servir el archivo a otro cliente mientras el primero pasa a una
recibiese la última palabra (último trozo del archivo). En ese lista de espera :)
momento el doctor (receptor/software receptor) comprobaría que
tiene en su poder las palabras (trozos de archivo) y que no falta La intención de esta extensa nota no es otra que ACERCAR ese
ninguna (se puede comprobar gracias a que tienen números extraño mundo de las capas OSI a la realidad, a programas que
correlativos). utilizamos diariamente y que no tenemos ni idea de cómo funcionan
(por ejemplo la visualización de video en tiempo real y los P2P).
Solo en caso de que faltase alguna palabra (trozo de archivo) el Quizás ahora pensemos un poco más en lo que hay detrás de
doctor llamaría por teléfono al emisor pidiéndole UNICAMENTE esas cosas que utilizamos mecánicamente sin pensar :)
la palabra que le falta.
Como podemos ver, ahora la conexión sigue siendo del tipo UDP Olvidándonos ya de UDP, vamos a ver entonces
(cargamos poco la red); pero gracias a que hemos dotado al Sr. qué es TCP, que es el que más nos interesa.
del megáfono y al doctor (software emisor y receptor) de A diferencia de las comunicaciones no
inteligencia (software), hemos conseguido además bastante orientadas a conexión, las orientadas a
seguridad en la comunicación. conexión son aquellas en las cuales hay un
diálogo directo con el interlocutor. Es decir, no
ACABANDO Y PUNTUALIZANDO: es ningún monólogo que sueltas con la
esperanza de que alguien te escuche, si no
Acabamos de aprender algo importantísimo que ya nunca que es una conversación entre dos o más
interlocutores, donde todos saben en todo necesitarás saber que tu servidor de correo
momento si están siendo escuchados por lo está recibiendo (aunque si llega al buzón
los demás. del destinatario o no es ya un asunto
aparte), si estás en un Chat necesitas saber
Como ejemplo de comunicación orientada que la persona o personas con las que
a conexión tenemos el teléfono, donde en hablas están conectadas en ese momento,
todo momento sabes si la persona con la y leyéndote.
que estás hablando está siguiendo el
diálogo. Por el contrario, cuando hablas Hasta donde la capa IP entiende, sólo
con un contestador automático telefónico, existen sobres que circulan desde una
se trata precisamente de una comunicación dirección de remitente hacia una dirección
no orientada a conexión. de destinatario, pero en ningún momento
existe un diálogo entre remitentes y
destinatarios. Es en la capa TCP donde
aparece este nuevo concepto, que engloba
l o s s o b r e s q u e p a ra I P c i r c u l a n p o r
separado, en un único flujo de diálogo
entre las dos partes.
mensaje dijese: Doctor PyC, acuda a la sala Los buzones de correos tienen un tamaño
de cirugía cardiovascular para atender una limitado y, si bien cada fascículo por separado
urgencia de cardiopatía precarótida en un cabe perfectamente en el buzón, la colección
paciente varón de 70 años, diabético, de entera no cabría en ningún buzón.
grupo sanguíneo AB+, y cuyo color preferido Lo mismo ocurre con las máquinas, que tienen
es el fucsia. Si el Doctor PyC no respondiese un buzón de recepción de un tamaño limitado,
a la primera llamada, habría que repetir toda y hemos de ajustarnos a esas limitaciones
la parrafada de nuevo. tecnológicas.
No tiene sentido soltar parrafadas muy largas 3.4. La capa TCP: Las conexiones
si no tienes la certeza de que estás siendo simultáneas
escuchado. Por eso, si lo que tienes que
transmitir es muy largo, lo mejor es que lo Una de las principales funciones de la capa
vayas contando poco a poco, y esperando la TCP es la de permitir que existan varios
confirmación de que cada parte ha sido diálogos simultáneos entre dos interlocutores.
escuchada. Aquí no recurriré a más metáforas, si no que
será más sencillo verlo directamente en nuestro
Cuando hablamos por teléfono, normalmente campo de trabajo.
no soltamos un rollo de varias horas sin parar
(aunque los hay que si...), si no que estamos Si, por ejemplo, está PyC en MSN chateando
pendientes de que cada cierto tiempo nuestro con Scherzo, y a la vez le está enviando un
sufrido interlocutor nos dé las confirmaciones archivo, ¿no estarán manteniendo dos diálogos
de rigor como si, si, o aja, o que te calles simultáneos? Por un lado, están chateando,
ya. Normalmente, si llevamos dos minutos y por otro lado están enviando un archivo.
seguidos hablando y no hemos escuchado un
aja de nuestro interlocutor, nos mosqueamos Suponiendo que un Chat en MSN funcionase
bastante, y decimos oye, ¿sigues ahí?. mediante una conexión punto a punto (que
no es así, como sabréis si habéis leído mi
En resumen, lo natural a la hora de transmitir artículo sobre MSN, pero imaginaremos que
mucha información es hacerlo en pequeños sí), habría una serie de paquetes cuyo
trozos, cada uno de los cuales confirmará su remitente sería PyC y cuyo destinatario sería
recepción por separado. Scherzo, pero de esos paquetes algunos serían
parte del archivo que se está transfiriendo
Lo mismo ocurre en la comunicación entre (que, por supuesto, estaría partido en trozos,
máquinas. Como TCP se encarga de enviar tal y como vimos en el punto anterior), y otros
confirmaciones, es también el que se encarga serían parte de la conversación que mantienen
de partir los paquetes muy grandes en PyC y Scherzo a través del Chat.
paquetes más pequeños para que estas
confirmaciones puedan llegar poco a poco, y Para permitir que esto ocurra, el protocolo de
no tener que retransmitir todo si no llegase transporte, TCP, tiene que tener algún sistema
la confirmación. que identifique qué paquetes son del Chat, y
qué paquetes son del archivo. Esto lo hace
Esto nos permite, además, adaptarnos a la capacidad
asignando un número a cada diálogo
de nuestro interlocutor. Por ejemplo, si nos
simultáneo y, según el número que haya en
suscribiésemos a una enciclopedia por fascículos,
cada paquete, sabrá si éste forma parte del
y nos enviasen toda la colección de golpe,
probablemente el cartero mandaría al garete a los
archivo, o del Chat.
tíos de Espasa, y les diría que los 20 volúmenes
Pues estos números mágicos de los que estoy hablando
los iba a llevar hasta allí su simpática abuela.
no son otros que los archiconocidos PUERTOS.
Un puerto es un campo del protocolo TCP que se abre esta conexión lo detallaremos a lo
permite identificar el servicio al que va largo del curso, pero no en este artículo.
destinado cada paquete en una conexión De momento lo que sí que sabemos es que
entre dos máquinas. la responsable de abrir y mantener las
conexiones es la capa TCP.
Así, cada vez que una máquina reciba un 3. Scherzo escoge el archivo que
paquete con el número de puerto 25, sabrá quiere bajar: comandos CWD, CDUP,
que ese paquete es un e-mail, cada vez que LIST,... todo esto ya lo vimos en los artículos
reciba un paquete con el número de puerto sobre FTP de la serie RAW, y ahora no nos
21, sabrá que ese paquete es un comando interesa mucho.
de FTP, cada vez que reciba un paquete con 4. Scherzo inicia la transferencia del
el número de puerto 80 sabrá que es una archivo: comandos PORT o PASV, y RETR
conexión Web, etc., etc. o REST. También lo vimos en los artículos
de la serie RAW, y tampoco nos interesa
4. Ejemplo: Enviando un archivo. ahora.
5. El archivo se transfiere desde el
Para recapitular todas las ideas mostradas a servidor de PyC hacia el cliente de
lo largo del artículo, termino con un ejemplo Scherzo: Aquí unos enanitos se encargan
bastante completo que muestra paso a paso de llevar el archivo de una máquina a otra,
el envío de un archivo de PyC a Scherzo. cargando los datos en sacos que llevan a
la espalda. Pero... ¡espera! ¡Si esto no es
Estad muy atentos a cada paso, porque espero la serie RAW! En la serie RAW no me
que este ejemplo os ayude a comprender quedaba más remedio que deciros estas
mucho mejor todos los conceptos que cosas, porque al llegar a este punto no
necesitareis para seguir el resto del curso. podía daros más detalles, ya que más de
Fijad también vuestra atención en todas las una vez os mencioné que explicar lo que
ilustraciones, pues muestran gráficamente ocurre en estos momentos sería suficiente
toda la secuencia del ejemplo, y además los para llenar no sólo un artículo, si no una
datos que aparezcan en las propias serie entera. ¡Y al fin ha llegado esa serie!
ilustraciones son también fundamentales. Así que esperad unas cuantas líneas, que
enseguida os explico cómo funcionan las
A lo largo de la serie RAW os he explicado ya cosas realmente. Tampoco quiero chafar
varios sistemas de transferencia de archivos la ilusión a nadie, así que si alguien no
(FTP, DCC, MSN,...). En este ejemplo quiere dejar de creer en los enanitos que
usaremos, por ejemplo, una transferencia transportan paquetes de datos, que no siga
por FTP. leyendo! ;-)
6. Finaliza la transferencia del
Antes de nada, vamos a ver cómo sería el archivo: y a otra cosa, mariposa.
proceso si sólo nos fijásemos en la capa de
arriba, es decir, en la capa sobre la que he ¿Para qué os he mostrado todos estos pasos
ido hablando mes tras mes en la serie RAW. que conocéis ya perfectamente (sobre todo si
habéis seguido la serie RAW)? Pues
1. PyC abre su servidor FTP: pone sencillamente, para que veáis que entre los
un puerto en escucha, gracias a una pasos 5 y 6 ocurren una gran cantidad de
función que da el sistema operativo que cosas que siempre hemos obviado, y que serán
permite a cualquier aplicación realizar las que precisamente detalle en este ejemplo.
estas y otras funciones de TCP/IP.
2. Scherzo abre una conexión con Nos olvidaremos, por tanto, del resto de pasos,
el servidor FTP de PyC: el modo en que y nos centraremos únicamente en lo que ocurre
si no según el número de byte del archivo en La capa TCP ya ha terminado su trabajo inicial,
el que empieza ese trozo. Así, el primer trozo y de momento se puede relajar un poco
tendrá un número de secuencia 0, el segundo mandando los bloques a la capa IP, que sabrá
un número de secuencia 1500, y el tercero qué hacer con ellos a continuación. Pero, a
un número de secuencia 3000. diferencia del programa de FTP, la capa TCP
no se puede dormir en los laureles esperando
Pero, ¿es éste el único dato que ha de asignar a que la transferencia del archivo termine, si
la capa TCP a cada trozo? Pues me temo que no que tendrá que seguir trabajando más
n o, ya q u e s a b e m o s b i e n q u e l a s adelante, tal y como iremos viendo.
responsabilidades de esta capa van más allá
de simplemente partir los paquetes en bloques. 4.3. En el sistema operativo de
Hablamos también de los números de puerto, PyC: La capa IP.
así que tendrá que añadir a cada trozo los
dos puertos implicados en la conexión. En cuanto TCP llama a la capa IP, y le pasa
¿Adivináis cuáles son estos puertos? los 3 bloques, ésta se pone en marcha. Su
labor principal consiste en añadir a cada bloque
Je, je... era una pregunta con trampa. Si
las direcciones IP de PyC y Scherzo para que,
habéis pensado que uno de los puertos era
el 21, puerto asignado al servicio FTP, os una vez que los bloques estén flotando por el
habéis equivocado, aunque he de reconocer ciberespacio, todos aquellos mediadores por
que lo he preguntado a mala leche. 0:-) los que pasen sepan dónde llevarlos.
Como vemos en la ilustración, la única como para que nunca tengan que repetirse.
máquina que se comunica directamente con Estas direcciones, más largas que las
Internet es el router ADSL, y es éste el que direcciones IP, constan de 48 bits, por lo que
tiene que encargarse de llevar todos los teóricamente permiten identificar casi 300
paquetes de PyC y de su hermano a Internet. Billones de dispositivos Ethernet diferentes.
Para ello, ambos ordenadores están Entonces, ¿qué datos añadirá el nivel Ethernet
conectados al router mediante un cable de a cada bloque que queremos transmitir? Pues,
red (si el router sólo tiene un conector RJ-45 al igual que la capa IP, añadirá una dirección
tendría que haber en medio un switch, pero MAC de origen, y una dirección MAC de destino.
esa cuestión la obviamos por salirse del tema). Y, también igual que en la capa IP, tendrá que
añadir un dato más, que es un identificador
El problema aquí es que la comunicación en de la capa superior que le pasó los bloques,
Ethernet es de tipo broadcast. es decir, en este caso la capa IP.
Pero lo que nos interesa aquí es conocer el Los tres paquetes que forman el archivo, con sus cabeceras TCP,
mecanismo utilizado para distinguir unas IP, y Ethernet. En ésta la MAC de origen será la de PyC, y la
máquinas de otras en una LAN. MAC de destino la del router ADSL de PyC, que será el próximo
punto con el que habrá que enlazar la comunicación. El ordenador
Como podéis imaginar, esto se consigue de PyC conoce la dirección MAC del router gracias al protocolo
asignando un número diferente a cada tarjeta ARP, pero eso se sale del tema del artículo.
de red de las máquinas conectadas a la LAN.
Este número es único en el mundo para cada
tarjeta de red.
! ¿No sabes...
Los fabricantes de dispositivos Ethernet tienen
un acuerdo para que nunca se fabriquen dos ¿No sabes la MAC de tu tarjeta de Red? ¿de verdad?...
tarjetas de red con el mismo número. Este
bueno, bueno
tendrías que haber leído los anteriores
número mágico es precisamente la famosa
números de esta revista :)
dirección MAC (comúnmente conocida
como dirección física) de la que
probablemente habréis oído hablar.
Abre una ventana de comandos (Menú inicio --> Todos
los Programas --> Accesorios --> Símbolo del sistema).
Al haber una MAC diferente por cada Escribe IPCONFIG /ALL. Pulsa enter y ZAS!!! Ahí tienes
dispositivo Ethernet del mundo, las direcciones la MAC de tu/s tarjetas Ethernet (Tarjetas de Red).
MAC tienen que ser lo suficientemente grandes
¡Al fin el paquete llegó hasta el último router La capa IP de Scherzo analizará ahora no sólo
del camino! Este, por supuesto, es el router la IP de destino (que es la de Scherzo), si no también
ADSL de Scherzo. Éste analizará el paquete, la de origen (que es la de PyC), ya que tendrá que
y verá que en la capa IP tiene como dirección enviar sus respuestas a esa dirección. Una vez que
IP de destino la IP de Scherzo, así que ahora se queda con estos dos datos, manda el paquete
sólo le falta saber a cuál de los PCs de la LAN a la capa superior que, según la cabecera IP, es la
de Scherzo enviarlo. capa TCP.
En todos los saltos que ha ido dando el paquete de
un router a otro, ninguno ha analizado su cabecera
Todos los PCs de la LAN de Scherzo comparten
TCP, ya que esto es sólo responsabilidad del
una misma IP de cara a Internet, que es la
destinatario final (Scherzo).
IP del router, y éste los diferencia sólo por su
Una vez analizada la cabecera IP, se elimina, y se pasa el resto El sistema de Scherzo construye un nuevo paquete para indicar
del paquete a la capa TCP.
a PyC que recibió el suyo. La cabecera TCP de este nuevo
paquete constará de un campo ACK con el mismo valor que el
número de secuencia del paquete al que quiere responder, e
4.14. En el sistema operativo de intercambiará los puertos de origen y de destino. El contenido
Scherzo: la capa TCP del paquete (zona azul) estará vacío, ya que lo único importante
aquí son las cabeceras.
La capa TCP de Scherzo cogerá el paquete,
y verá que no es un paquete completo, si no
sólo un trozo (recordemos que el archivo se
partió en 3 trozos en la capa TCP de PyC). 4.15. En el sistema operativo de
Scherzo: de vuelta en la capa IP
La capa TCP de Scherzo tiene ahora dos
responsabilidades: responder a PyC diciéndole Esta cabecera la pasaremos a la capa IP, que
que ha recibido el primer trozo, y mandar el conoce la IP de PyC, por lo que construye una
paquete a la capa de arriba, es decir, a la cabecera IP adecuada para ese paquete:
aplicación cliente de FTP, que será la que sepa
qué hacer con los datos contenidos en el
paquete.
PyC envía los tres paquetes y espera un tiempo razonable a Gracias al número de secuencia de cada paquete se puede
que le llegue la respuesta (ACK) de Scherzo diciendo que ha reconstruir el archivo original, uniendo cada fragmento en el
recibido cada uno de los paquetes punto (posición en bytes) indicado por el número de secuencia.
Las conexiones de las que hemos hablado Para poder realizar este chat entre 3
son siempre conexiones entre dos personas mediante cables de 2 conectores
puntos, y así son todas las conexiones se hace imprescindible la presencia de un
en TCP. Aunque puedas estar en un chat intermediario que gestione todas las
hablando con 100 personas a la vez, en conexiones de todos los usuarios. Esta es
realidad toda esa comunicación se realiza precisamente la misión de un servidor
a través de pares de conexiones. de chat.
Esto en realidad no es tal y como lo pinto. Este Una solución mucho más eficiente es
número cambiante realmente existe, pero su principal englobar en un sólo paquete los datos
finalidad no es la de identificar conexiones, si no transmitidos y la confirmación de los datos
más bien la de mantener el estado de evolución de recibidos.
una conexión, y saber así en todo momento qué
paquetes se pueden enviar y qué paquetes se pueden
recibir a través de esa conexión.
la máquina B, que recibe los paquetes. comunicación, a no ser que sea un mal-
Por tanto, la máquina A empieza a enviar nacido (que los hay), tendrá que actuar
paquetes a toda velocidad y sin en consecuencia, relajándose un poco y
compasión, esperando las confirmaciones dándonos tiempo a asimilar lo que ya nos
de la máquina B. Como B no da abasto, ha enviado.
no es capaz de enviar las confirmaciones
de recepción a tiempo. Al no llegar las Más adelante veremos en detalle cómo
confirmaciones, A se pondrá a reenviar se implementa el control de flujo en TCP.
los paquetes anteriores, al mismo tiempo
que continúa enviando paquetes a diestro
y siniestro, por lo que la congestión, ! Todo esto que...
sumando los paquetes nuevos y los viejos,
será muchísimo mayor. Todo esto que estamos explicando después lo tocaremos
en la realidad. Veremos los paquetes TCP y dónde está
localizado cada concepto del que hablamos.
Por el canal de entrada irán llegando los servidor el resto de nuestros intentos de
paquetes uno tras otro. Se irán conexión, el servidor nos responderá con
almacenando en el buffer de recepción, RST a cada nuevo intento de conexión,
y no serán procesados hasta que llegue para que nos olvidemos de esa conexión
el último paquete, que contiene el flag y nos centremos en la que ya tenemos.
PSH. Como este paquete es el que
completa el archivo de 400B, para cuando 4.7.5. Flag SYN (Synchronization)
llegue, el sistema receptor ya podrá
procesar los datos de los 4 paquetes y Cuando este flag está activo (vale 1, en
reconstruir el archivo original. lugar de 0), estamos indicando al otro
extremo que deseamos establecer una
Como decíamos, el flag PSH debe nueva conexión. Este flag se utiliza
combinarse con el flag URG cuando haya únicamente al abrir una nueva conexión.
datos urgentes. El flag URG será el
encargado de decir al receptor que ha Más adelante veremos el mecanismo
de atender los datos con máxima exacto por el que se establecen las
prioridad, y el flag PSH se asegurará de conexiones, así como algunas cuestiones
que el paquete no se retrase esperando de seguridad relacionadas con este flag.
en los buffers.
4.7.6. Flag FIN (Finish)
4.7.4. Flag RST (Reset)
Cuando este flag está activo (vale 1, en
Cuando este flag está activo (vale 1, en lugar de 0), indicamos al otro extremo
lugar de 0), estamos indicando al otro de la conexión de que, por lo que a
extremo de la conexión que algo no anda nosotros respecta, la conexión ya se
bien, ya que los datos que nos han llegado puede cerrar.
no coinciden con nuestra conexión, por
lo que se ha perdido la sincronización Normalmente, una vez que enviemos
entre ambas partes. nuestro propio FIN, tendremos que
esperar a que nuestro compañero nos
Ante cualquier campo incorrecto que envíe el suyo. Una vez puestos los dos
recibamos (números de secuencia de acuerdo en que no hay más que hablar,
inválidos, o flags no esperados) se puede cerrar la conexión pacíficamente.
tendremos que responder con un paquete
con este flag activo, para que el otro
Tanto RST como FIN se utilizan para
extremo se entere del problema, y se
finalizar conexiones, pero la diferencia es
cierre la conexión para re-sincronizar
que RST avisa de una situación de error,
ambas partes.
mientras que FIN avisa de una
terminación sin problemas.
Un uso típico de este flag es cuando
estamos intentando conectar con un
servidor, enviando varios paquetes para Ante una terminación con RST,
establecer la conexión, y al final uno de normalmente las aplicaciones avisarán al
ellos tiene éxito. Si después de ese usuario, por ejemplo con una ventana
paquete de conexión siguen llegando al avisando que se ha perdido la conexión.
además, el próximo paquete tendrá que mensaje (vacío si hace falta) cuya única
ser como máximo de 250 bytes. finalidad sea precisamente avisar del
cambio de la ventana. Por otra parte, la
En respuesta, A envía un nuevo paquete, responsabilidad del emisor (el que ha
comenzando en el byte 2500, y congestionado al otro) es dejar de enviar
conteniendo tan sólo 250 bytes. más datos, y esperar un tiempo prudencial
para continuar la transmisión pasados
Todo esto es muy bonito, A y B son muy unos dos minutos, si es que el receptor
amigos, y A le va enviando a B las cosas no ha enviado una nueva ventana antes.
poco a poco cuando éste se agobia. Pero
esto en realidad no es una idea muy 4.9. Suma de comprobación
buena. Si A va haciendo caso a B según Al igual que en el caso de UDP, la suma
éste le vaya diciendo lo que puede de comprobación se calcula mediante una
manejar, y B va avisando a A según vaya operación de aritmética binaria (suma en
liberando hueco en su buffer de recepción, complemento a uno de 16 bits) que se
los paquetes que se transmitan irán realiza sobre una cabecera especial que
siendo cada vez más pequeños. contiene los datos más relevantes.
En el peor de los casos, podría llegar a Cada vez que se recibe un paquete TCP,
ser 0 la ventana de B, y en el instante hay que realizar esta misma operación
en que hiciese hueco para un mísero con los datos recibidos, y comparar el
byte, avisar a A, por lo que A le enviaría número obtenido con el campo suma de
un paquete con un único byte de datos. comprobación del paquete. Si ambos
Esto daría lugar a una transferencia muy números no son iguales, los datos son
poco efectiva de los datos, donde muchos incorrectos, y será necesaria una
de los paquetes serían de un tamaño retransmisión de los mismos. En ese caso,
ridículo. no enviaremos la confirmación de
recepción pertinente, esperando a que el
Por tanto, es aconsejable no ir emisor decida retransmitir el paquete al
ajustándose literalmente al tamaño de ver que no les respondemos.
la ventana, si no dejar unos pequeños
márgenes. Por ejemplo, cuando se detecte Aunque ya lo comenté en el anterior
que la ventana va decreciendo por artículo, os recuerdo que tenéis detallada
momentos, lo mejor es esperar un tiempo la operación de la suma de comprobación
para dejar que la ventana vuelva a en el RFC 1071, y que tenéis un código
recuperar toda su capacidad, y continuar de ejemplo en C en la siguiente URL:
entonces la transmisión. Si fuésemos con http://www.netfor2.com/tcpsum.htm
prisas, empeñándonos en enviar más y
más datos, la reducción de tamaño de la En este caso no tenéis que realizar ninguna
ventana sería cada vez mayor, y la modificación sobre el código, ya que sirve
transferencia cada vez menos eficiente. precisamente para calcular la suma de
comprobación de TCP.
En el caso de que la ventana llegue a ser
La cabecera que se forma para llevar a
cero, la responsabilidad del receptor (el
cabo la suma de comprobación es la
que se ha congestionado) es avisar
siguiente:
cuando su ventana se recupere, con un
4.11. Opciones
Pero, ¿significa esto que los datos tienen La opción definida se utiliza únicamente
que ir en un único paquete para ellos al establecer una nueva conexión. Lo que
solos? Esto podría ser poco eficiente, ya indica este campo opcional es el máximo
que los datos urgentes podrían ser tan tamaño de los segmentos que estamos
sólo unos pocos bytes, y nos obligaría a dispuestos a recibir. Un segmento es cada
enviar paquetes casi vacíos sólo para una de las partes en las que se dividen
poder transmitir el dato urgente. los datos, por lo que nuestro compañero
de conexión no debe enviarnos nunca
Por ejemplo, el CONTROL-C del que paquetes más grandes de lo que
hablábamos, es un comando muy breve, indiquemos con esta opción. En el caso
y sería un desperdicio enviar paquetes de que no usemos este campo opcional,
vacíos que sólo llevasen ese comando. nos podrá enviar paquetes de cualquier
Por tanto, TCP permite combinar en tamaño ajustándose, eso sí, a nuestra
un mismo paquete datos urgentes ventana de recepción.
con datos no urgentes.
¿Y qué relación hay entonces entre la
Para conseguir esto, el campo puntero
ventana de recepción y el tamaño máximo
de urgencia nos indica el punto a partir
de segmento?
del cual terminan los datos urgentes.
Si, por ejemplo, nuestro paquete contiene Pues la ventana es un parámetro dinámico,
1000 bytes de datos, y el puntero de que va variando según la congestión que
urgencia es 150, sabremos que los 150 hay en cada momento, mientras que el
primeros bytes del paquete son urgentes, tamaño máximo de segmento es una
y los otros 850 son datos normales. constante para toda la sesión, que se
Por supuesto, esto sólo tendrá sentido si establece de antemano. Muchas veces,
el flag URG está activo. Si no es así, el el tamaño máximo de segmento será
campo puntero de urgencia menor que la ventana. Esto puede parecer
simplemente será ignorado. absurdo, pero no es así, ya que el tener
Ambos artículos se complementan y nuestra intención es Es interesante conocer algunas cosas acerca
que puedas comprender este texto aunque no comprases del protocolo TCP de cara a comprender varias
en su momento el número 9 de PC PASO A PASO. cosas que leerás a continuación y por ello
volveremos a mencionar algunos de los
conceptos de artículos anteriores.
Quizás seas de los que piensa que un 'simple
escaneo de puertos' no es la mejor forma para El protocolo de control de transmisión (TCP) es
entrar en un sistema... aunque sea orientado a conexión y esto implica que se
simplemente uno de los pasos previos genera un circuito (virtual) entre dos host's
evidentemente te equivocas, imaginemos por cuya comunicación se considera fiable, TCP
ejemplo que un usuario aburrido se dedica a asegura unas condiciones
jugar con el 'Intesné' escaneando la red y tiene óptimas para el circuito establecido y utiliza lo
una lista con 250.000 host's con interesante que se denomina "acuse de recibo" para
información acerca de su sistema operativo, garantizar que los datos lleguen correctamente
puertos abiertos, etc. a su destino. Cuando queremos establecer una
conexión ambas partes deberán estar de acuerdo en participar 3. El número de secuencia ack (o acknowledge number) es
o dicha conexión no se podrá realizar. lo que permite validar los segmentos que van llegando a un
host, con este fin se coloca en el campo el número de
SEGMENTO TCP secuencia del segmento incrementado en 1, dicho byte
espera ser recibido en el siguiente envío. **
La cabecera de un segmento tcp (20 bytes normalmente)
es la siguiente: ** Los puntos 2 y 3 es, para que nos entendamos, la
forma que tiene el protocolo TCP de no perder ningún
paquete. Si estamos enviando a un compañero un
archivo Word de un par de megas, este se corta en
pequeños trocitos y el receptor debe recibirlos todos,
no puede perderse un solo paquete. Vale, ya se que
explicarlo así es muy poco técnico, pero quiero que
se entienda.
RST, indica que la comunicación debe reiniciarse. la cabecera IP y TCP así como las posibles opciones TCP si
las hay. El host A genera una llamada a connect () para el
SYN, durante la conexión indica el proceso de sincronización. propósito.
FIN, indica que el host desea finalizar la conexión. 2) Ahora el host B enviará la validación para el segmento
anterior y activará el flag ACK y en el número de secuencia
6. El tamaño de la ventana es el número de bytes que ack colocará el número de secuencia del segmento recibido
esperan ser recibidos sin necesidad de ser validados por + 1, como el proceso de sincronización no ha terminado el
parte de un host y puede variar durante la conexión activa. flag SYN sigue levantado.
7. La integridad de los datos y la cabecera tcp se 3) El host A sabe que el host B ha validado la petición al
pueden verificar mediante el checksum o suma de verificación. recibir el segmento pero ahora el host B está esperando a
que se valide su segmento. El host A envía un segmento
8. El puntero urgente (que se utiliza junto al flag URG) colocando el valor oportuno en el número de secuencia ack
indica el número de secuencia del último byte que se considera y activando el flag ACK, el flag SYN no viaja levantado esta
parte de los datos fuera de banda (urgentes). vez. En este punto la conexión se ha completado con éxito.
9.Opciones TCP como el tamaño máximo de segmento, el ¿COMO SE FINALIZA UNA CONEXIÓN ORDENADA TCP?
window scale y otras que de momento no vamos a ver aquí.
El proceso para recibir una petición de conexión implica estar 3) Para que el host A pueda cerrar la conexión el host
preparado para llevar a cabo una serie de llamadas a funciones B debe enviar un segmento con el flag FIN activado.
como lo son bind (), listen () o connect () de las que 4) Se valida el segmento anterior y la conexión se cierra con
hablaremos en el texto de forma genérica. éxito.
1) Cuando el host A desea establecer una conexión ** Todo esto ocurre de forma transparente al usuario
mediante un circuito TCP envía un segmento al host B, el cada vez que establecemos una conexión con un pc
segmento llevará el flag SYN levantado indicando el proceso remoto (por ejemplo cuando hacemos un simple PING
de sincronización y no suele llevar ningún tipo de datos salvo o nos conectamos a una Web con el navegador). De
hecho suceden muchas más cosas, pero nos en lugar de eso la abortaremos mediante un paquete con
conformamos con que captes el concepto general de RST, ¿y eso por qué? Te preguntarás, la respuesta es muy
que establecer una conexión es un proceso de 3 pasos sencilla, si ya sabemos que hay alguien al otro lado (tras
y cerrarla es un proceso de cuatro pasos y que los recibir SYN|ACK) para que seguir intentando conectar ¿? así
flags (BANDERAS) tienen mucho que decir en este evitamos establecer la conexión completa y es poco probable
proceso :) que nuestro escaneo quede registrado que es de lo que se
trata ;) este escaneo probablemente pasará desapercibido
3- Las técnicas de port scanning pero recuerda, eso sí, que se necesitan privilegios de
administrador para usar esta técnica y que el sistema pueda
Existen muchas técnicas para descubrir qué puertos tiene montar ese tipo de paquetes, a este tipo de escaneo se le
abiertos un host y determinar que servicios están corriendo conoce también como escaneo medio abierto.
e incluso bajo que privilegios, pero lo más importante es
hacerlo de forma sigilosa sin que la actividad quede registrada - TCP FIN, aunque el escaneo TCP SYN no suele dejar
en los logs de nuestra víctima y evitar que los sistemas de rastro en los logs del sistema y su detección puede ser algo
detección de intrusos (IDS) nos apunten como origen del complicada hay algunos entornos sensibles al escaneo SYN
escaneo. Te aseguro que a muchos usuarios no les hará como aquellos en los que hay filtros de paquetes o firewalls
gracia que les toques los... puertos :P y por otro lado existen utilidades que registrarán los intentos
de conexión SYN. Para estos casos puede resultar de interés
Vamos a ver detalladamente varias de las técnicas de escaneo echar mano al escaneo sigiloso FIN (o stealth scan), se
ya conocidas, algunas son una maravilla :) y otras no tanto fundamenta en el hecho de que los puertos abiertos ignoran
pero en cualquier caso debes conocerlas para poder adaptar los paquetes recibidos con el flag FIN (vacío) y los cerrados
mejor el escaneo a tus necesidades jeje. Ya empezaste a responderán con RST. Como se dijo en su momento al
leer acerca de ellas cuando tratamos en la revista el NMap presentar Nmap los sistemas de Micro$oft entre otros no
pero ahora veremos con más detalle esas y otras técnicas son susceptibles a este tipo de ataques pues no siguen las
como el Idle Scan :) pautas establecidas, quien lo diría xD ¿verdad?
- TCP CONNECT (), mediante esta técnica no - ACK scan, para esos ambientes hostiles con la
necesitarás ningún tipo de privilegio especial como sucederá presencia de cortafuegos puede interesar nmapear las
con otros tipos de escaneo como TCP SYN, y además es una reglas de filtrado. Mediante esta técnica podemos enviar un
técnica muy rápida puesto que podemos efectuar varias paquete con el flag ACK con los números de secuencia y ack
conexiones en paralelo. Su funcionamiento (la mayoría ya de forma incorrecta o aleatoria de manera que recibamos
lo habéis deducido) es el siguiente: intentamos establecer un paquete de control (ICMP unreachable, inalcanzable)
una conexión con un puerto determinado si el puerto está o no se reciba respuesta, en tal caso el puerto se encuentra
abierto la llamada a connect () tiene éxito y se nos retornará filtrado y en caso contrario la conexión será reiniciada y las
el valor oportuno en caso contrario la llamada fallará. El conexiones al puerto no estarían filtradas. Como habrás
problema reside en que los intentos de conexión se registrarán deducido, no puedes usar este tipo de escaneo para averiguar
automáticamente en el sistema y en principio no nos interesa los puertos abiertos. Si deseas además encontrar los puertos
en absoluto dejar huellas de ningún tipo. abiertos y además clasifica los puertos según se encuentren
filtrados o no, existe otra técnica conocida como Window
- TCP SYN (), hace un momento te acabo de explicar Scan que además aprovecha anomalías el tamaño de la
como se establece una conexión completa, mandamos un ventana TCP por parte de varios sistemas operativos para
paquete con el flag SYN tal y como se haría normalmente determinar si el puerto está abierto.
al intentar establecer una conexión y ahora la máquina
remota nos responde amablemente con SYN|ACK hasta aquí - UDP scan (User Datagram Protocol scan), antes de
va todo perfecto pero ahora nosotros para llevar la contraria nada aclarar que se trata de un escaneo mediante un
NO vamos a responder con ACK para establecer la conexión, protocolo no orientado a conexión de manera que no existe
un circuito virtual entre hosts ni tampoco garantía de entrega enviamos un paquete falso como si fuésemos el host ZOMBIE
alguna de los paquetes enviados. Se utiliza cuando queremos de manera que la respuesta del host VICTIMA irá para el
averiguar que puertos udp (un puerto puede ser tcp y udp host tal y como muestra el ejemplo, supondremos que el
al mismo tiempo pues difieren en el tipo de protocolo pese IPid del zombie es ahora 100 e ignoraremos a que puerto
a tener el mismo número identificador) están abiertos, si se dirige junto con otros datos irrelevantes para hacer el
tras mandar el paquete se recibe un mensaje de control ejemplo un poco más inteligible:
informando del error el puerto está cerrado y en caso
contrario, no recibir nada, se encuentra abierto. Esta técnica Lo primero es obtener el IPid del zombie escogido (100),
es muy poco precisa ya que si por ejemplo se filtran las
conexiones udp aparecerán como abiertos puertos que están
bloqueados. Además el número de conexiones udp suele
estar limitado por los sistemas de manera que el escaneo
puede ser bastante lento, y he dicho que suele limitarse
porque existe cierto sistema operativo cuyo nombre no
recuerdo ;) que no atiende a las especificaciones establecidas Tras la primera consulta procedemos,
por los RFCs de manera que el escaneo irá mucho más
rápido en los sistemas de la compañía Micro$oft. Por el
mismo motivo el escaneo denominado Null Scan o escaneo
nulo que se basa en no levantar ninguna bandera tampoco
funcionará al usarlo contra una máquina Window$ :(
- Xmas Scan: muy similar al escaneo nulo esta técnica Chequeamos el IPid para ver si el puerto se encuentra
envía un paquete con todas las banderas levantadas. Si el abierto,
puerto está abierto debe ignorar el paquete.
Hasta aquí hemos visto con detalle los tipos de escaneo más linux $ telnet 216.127.72.117
importantes y más utilizados. Te recuerdo que explicamos en un ...
artículo anterior la herramienta que aplica estas y otras técnicas Red Hat Linux release 7.2 (Enigma)
de port scanning que fue NMap, permíteme que te sugiera dicha Kernel 2.4.9-34 on an i686
utilidad si no te apetece programar tu propio escáner de puertos login: ^D
ahora que ya sabes como funciona el asunto :)
ANALIZANDO LA PILA TCP/IP
4- UN PASO MÁS: DETECCIÓN REMOTA DE SOs
A este método se le suele llamar Stack FingerPrinting y permite
Ni que decir tiene la importancia que tiene saber a que sistema
obtener conclusiones analizando la pila de protocolos
operativo nos enfrentamos ya que resulta fundamental de cara al
TCP/IP.
análisis y la penetración de un sistema así como la explotación
remota debido a fallas conocidas (e incluso desconocidas :P) en
Algunas formas de discriminar según el sistema operativo conocidas
alguno de los servicios, etc. Existen varias formas y utilidades que
se basan en:
nos permitirán obtener una huella digital (o fingerprint) de nuestra
víctima que nos sirva para discriminar un sistema operativo del
- Flag de fragmentación, en casos concretos se establece
resto, ahora veremos algunas.
por parte de ciertos SOs el flag DF (deshabilitar la fragmentación)
de la cabecera IP.
PRIMER CONTACTO
- Números de secuencia, se intentan encontrar patrones
Si ya has realizado conexiones directamente desde la consola ya
en los números iniciales escogidos al responder a una solicitud de
sea para mirar el correo, usar el FTP y/o cualquier otra cosa que
conexión como por ejemplo incrementar un valor X cada cierto
se pueda hacer mediante telnet te habrás fijado de que en muchos
tiempo o elegir valores totalmente aleatorios, devolver el mismo
casos se nos está dando una valiosa información de forma totalmente
número enviado, etc.
gratuita por parte del demonio que corre en ese puerto referente
a ellos mismos y en muchos casos la plataforma sobre la que corren
- Limitación ICMP, el sistema operativo Linux siguiendo las
:) pero no siempre lo tendremos tan fácil por lo que ahora veremos
normas y recomendaciones establecidas limita el número de
otras técnicas bastante más sofisticadas jeje.
- Opciones TCP, se pueden observar los valores devueltos, La línea de comandos básica para PortSentry teniendo en cuenta
su orden o si son soportadas o no ciertas opciones como lo son que estamos bajo Linux como super usuario es:
el window scale, o el MSS (tamaño máximo de segmento).
root # portsentry stcp, detectar escaneos ocultos TCP.
- Fragmentos solapados, dependiendo de la implementación
del sistema para el tratamiento de los fragmentos solapados, el root # portsentry atcp, como el anterior pero en modo avanzado.
nuevo fragmento sobrescribe o es sobrescrito por el fragmento
anterior, hay que utilizar todos los fragmentos para reconstruir el root # portsentry tcp, detección básica TCP con atadura al puerto
paquete original completo. (con binding o ligado al puerto).
Estos son algunos de los métodos que existen y que se suelen root # portsentry udp, detección básica UDP con atadura al puerto.
utilizar para determinar con MUCHA precisión que SO corre en
nuestra víctima pero no son los únicos y posiblemente aparecerán root # portsentry sudp, puede detectar escaneos UDP ocultos.
algunos otros más por lo que no es el objetivo de este artículo
profundizar en todos ellos ahora, quizás más adelante en próximos root # portsentry audp, como -sudp pero en modo avanzado.
artículos ;-)
Puede que hablemos de esta y otras utilidades relacionadas en un
Por supuesto existen potentes utilidades como QUESO (Qué Sistema futuro pero por ahora esto es más que suficiente :) para empezar.
Operativo) que puedes obtener de http://www.apostols.org con
el objetivo de detectar el SO de un host remotamente. QUESO 6- Medidas de seguridad básicas
utiliza varios paquetes con ACK=0 y un número de secuencia
aleatorio de la siguiente forma: Como has podido observar existen numerosas formas de escanear
una red y obtener información sensible acerca de la misma por
1 SYN lo que se recomienda instalar sistemas IDS que registren cualquier
2 SYN|ACK actividad sospechosa así como un buen cortafuegos (con una
6 PSH buena política restrictiva) y disponer de un buen syslog. Además
3 FIN lo ideal sería guardar todos nuestros logs en un servidor remoto
4 SYN|FIN junto con sumas de verificación u otros sistemas que nos aseguren
5 FIN|ACK que no se han modificado nuestros registros. Existen muchas
7 SYN|otros flags no estandarizados. aplicaciones para proteger nuestro sistema del exterior pero ninguna
medida es suficiente como para proteger al 100% nuestro sistema,
QUESO es un programa bien diseñado mediante un fichero aparte eso es lo único que es realmente seguro si tu computadora está
que contiene las respuestas que se esperan según el tipo de conectada a la red de redes :P y lo seguiremos demostrando en
paquete enviado y que se utilizada para contrastar los resultados los siguientes artículos ;-)
obtenidos para afirmar con bastante seguridad que SO corre en
nuestro objetivo, en fin una maravilla que ya deberías
tener :)
-Reverse Ident (TCP): realizamos un -Null Scan: se trata de otro método de escaneo
escaneo normal TCP pero miramos si el puerto stealth, en el que enviamos un curioso paquete
113 está abierto con el objetivo de saber quién sin banderas levantadas.
es dueño de los servicios que corren en otros
puertos de la máquina. -Xmas Scan: lo realizamos enviando paquetes
TCP anormalmente configurados y todos los
-Ping Scan: ...bastante explícito xD en todo flags (banderas) SYN, ACK, PSH, RST, URG
caso se debe usar cuando tu intención sea y FIN levantados.
saber que máquina(s) están despiertas, es
posible bloquear los pings, pero luego (con la -Idle scan: se trata de una técnica de escaneo
practica) veremos como saltarse esta stealth muy potente y eficaz, con la que no
"protección" en caso de encontrarnos con el tenemos necesidad de enviar ni un solo paquete
inconveniente. con nuestra IP si no que se utilizan host's
zombis, sería interesante comentar esta técnica
-Bounce Attack (vía ftp): se trata de detalladamente en su propio espacio por lo que
aprovechar la conexión proxy ftp para escanear no profundizaremos ahora.
a través de un servidor FTP. Esto es así porque
podemos utilizar el comando PORT indicando Finalmente,
una dirección IP y un puerto, en este caso el
objetivo de nuestro escaneo y solicitamos una -RCP Scan: se trata de enviar el comando
transmisión de datos, si el puerto en cuestión NULL (SunRPC) a los puertos tcp o udp
está cerrado se generará un error 425 ("Can´t que están abiertos y ver si son puertos RPC
get data conection" o algo muy similar). Es para saber qué programa y su versión está
una buena idea deshabilitar la opción ftp corriendo.
proxy para evitar que terceros utilicen nuestro
servidor para escanear y/o atacar otras redes. Estos son los tipos de escaneo fundamentales
aunque no son los únicos.
-UDP Scan: este escaneo mostrará los puertos
abiertos que utilizan el protocolo UDP (con 3- Nuestros enemigos: "IDS".
sus inconvenientes), es bastante lento aunque
irá mejor si escaneas una máquina que utilice Antes de proceder a ver de qué manera
la plataforma Window$ gracias a la política podemos aplicar los diferentes ataques
de M$ de hacer las cosas "iguales pero existentes que acabamos de repasar brevemente
diferentes" y "viva el monopolio". me gustaría dejar clara una cosa a la hora de
escanear puertos a diestro y siniestro: DEBES
-ACK Scan: muchas veces nos encontramos SER CUIDADOSO Y NO DAR LA NOTA (--
con un bonito firewall que impide el "correcto ¡no j*d*s!) ten en cuenta que aparte de haber
flujo de los paquetes" xDD desde nuestra buenos administradores (pocos pero hay :P)
máquina al host víctima, por eso y otros monitoreando el tráfico y la actividad de sistema,
motivos nos interesa saber qué tipo de los cortafuegos y los logs del sistema... existen
configuración tiene el cortafuegos, es decir si los llamados: IDS (Intrusion Detection System,
el tráfico ha sido filtrado o no. que no traduciré porque seguro que ya sabéis
lo que significa xD) mediante estos sistemas
-Window Scan: muy parecido al anterior, es posible detectar un escaneo, activar las
pero nos dice también que puertos están alarmas y llevar a cabo las acciones oportunas,
abiertos. es decir, que si un "UIA" (Usuario del Intesné
ttp://download.insecure.org/nmap/dist/nmapwin
IDS ¿Qué? ¿?¿? Si nunca has oído hablar de esto, ya sabes, _1.3.1.exe
www.google.com e investiga un poco por tu cuenta.
INSTALACIÓN DEL NMAP:
un sistema mediante las diversas técnicas que También se permite el uso del asterisco, por
he comentado. ejemplo: 198.154.3.* e incluso el escaneo de
puertos dentro de un rango específico.
Como se puedes ver si quieres indicar un rango así: -PT80 (puerto 80 por no ser normalmente
de puertos a escanear (con -P) debes marcar filtrado) si el objetivo no permite pings puedes
la opción Port Range, por ejemplo así: 10- estas dos últimas opciones... aunque es una
2048. sugerencia xD.
Otra opción curiosa que me gusta bastante -Realizar un "ping" TCP usando SYN (-PS).
(aunque yo no la uso :P) es Decoy, sirve para -Realizar un ping mediante ICMP.
escanear usando uno o más señuelos para que Por defecto NMap realiza un ping ICMP + ACK
el servidor objetivo vea que le atacan desde en paralelo, es decir, -PI y -PT.
varias IP's que debes indicar separadas por
comas, si no indicas "ME" en una de las Si ahora te vas a "OPTIONS" podrás ver unas
posiciones se te asignará una de oficio, digo, opciones muy interesantes, por ejemplo:
aleatoria xD imagínate que locura para un
administrador ;) Fragmentation (-f) con esta opción se usan
paquetes fragmentados que dificultan la
Más cosas, en Device (-e) especificamos la detección del escaneo, en un futuro os
interfaz desde la que enviar y recibir los hablaremos de ataques de ataques de
paquetes, aunque normalmente NMap detecta fragmentación y relacionados ampliamente.
esto de forma automática :) así que salvo casos
puntuales no debes preocuparte por eso. OS detection: pues eso, si quieres determinar
Otra de las opciones de especial interés es que tipo de SO utiliza el objetivo marca esta
indicar una IP en Source Address (-S) de casilla, recomendado.
manera que aparentemente el ataque se realiza
desde esa IP, aunque evidentemente el escaneo Get Ident Info: usa la técnica del escaneo
no te servirá de nada :( especifica la interfaz inverso (TCP reverse ident scanning) siempre
en este caso (-e) y ten en cuenta que falsear que sea posible, úsalo al realizar un escaneo
la dirección de origen por otra ajena puede tipo -sT (connect), útil cuando quieras saber si
hacer que "esa IP" se meta en problemas, por un servicio corre con privilegios de administrador.
favor, utiliza esta función con responsabilidad.
Fast Scan (-F): escanea los puertos especificados
Otra opción es Bounce Attack (-b) necesita de /etc/services (nmap-services en nuestro
que le pases usuario:password@servidor:puerto caso xD).
y ya sabes lo que hace ;) pero recuerda que
va muy lento. Random Host's: objetivos aleatorios (-iR) y
También podemos especificar el Source Port bueno, realmente no nos interesa.
(puerto de origen) con -g o marcando su casilla
en la interfaz gráfica con el fin de establecer Con don´t resolve (-n) y resolve all (-R)
ese puerto como fuente de nuestro escaneo. indicamos si queremos resolución DNS, es decir,
Esto tiene sentido especialmente si un firewall resolución de nombres de host por su IP.
hace excepciones en función del puerto de
origen para filtrar o no los paquetes. Mediant Resume (--resume fichero) podemos
retomar un escaneo detenido usando un fichero
En la pestañita "DISCOVER" encontrarás de salida.
nuevas posibilidades:
Verbose y very verbose: nos da información
-No realizar un ping previo. (-P0) más amplia de lo que sucede (-v) puedes usarlo
-Realizar un "ping" TCP usando ACK tal que dos veces (very verbose) para mostrar todavía
Otras alternativas disponibles (¡no debes usarlas A continuación se puede ver la pestaña "Service"
si modificas algo usando Throttle!) que simplemente se usa para configurar el
servicio pero para lo que estamos tratando
Host Timeout: indica el tiempo máximo en ahora no es importante así que pasemos a
milisegundos que se dedica al escaneo de un otras opciones que aunque tampoco son
único sistema, por defecto no tiene impuesto especialmente necesarias veremos algunas,
un límite tal y como se puede ver. son las de la pestañita "Win32" y se usan para
lo siguiente:
Max RTT: tiempo máximo de espera en
milisegundos que NMap esperará a recibir No Pcap (--win_nopcap): deshabilita el soporte
respuesta del sistema escaneado. Wincap.
Min RTT (ms): para evitar casos de demora en No Raw Sockets (--win_norawsock): deshabilita
la comunicación NMap nos asegura un tiempo el soporte para raw sockets (algún día
mínimo de espera. hablaremos de los sockets y los sockets en
crudo puesto que proporcionan ventajas
Initial RTT (ms): al especificar la opción -P0 interesantes aunque por ahora puede ser
para probar un cortafuegos podemos especificar demasiado avanzado).
un tiempo de espera en las pruebas iniciales.
List Interfaces (--win_list_interfaces): lista todas
Parallelism: (--max_parallelism num) indica el las interfaces de red.
Más ejemplos,