Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INTRODUCCION
Las funciones principales de la capa de transporte son transportar y regular el flujo de información
para garantizar la conectividad de extremo a extremo entre aplicaciones de host que se están
comunicando en red de manera confiable, eficiente y precisa, utilizando para ello los servicios de
la Capa de Red. Podemos resumir la funcionalidad de la Capa de Transporte en una corta frase:
calidad de servicio.
Los protocolos de transporte tienen la función de actuar de interfaces entre los niveles orientados
a la aplicación y los niveles orientados a la red dentro de la jerarquía de protocolos TCP/IP. En la
Capa de Transporte aparece un protocolo muy importante para una correcta transmisión de datos
entre redes, el Protocolo para el Control de la Transmisión (TCP), que ofrece maneras flexibles y de
alta calidad para crear comunicaciones de red confiables, sin problemas de flujo y con un nivel de
error bajo.
Para ello, TCP en el host fuente parte el flujo de bits en mensajes discretos y los envía, mientras
que TCP en el host destino los recibe y los monta de nuevo para crear el flujo original, manejando
el control de flujo de la transmisión.
Es uno de los protocolos fundamentales en Internet. Fue creado entre los años 1973 y 1974 por
Vint Cerf y Robert Kahn.
Muchos programas dentro de una red de datos compuesta por redes de computadoras, pueden
usar TCP para crear “conexiones” entre sí a través de las cuales puede enviarse un flujo de datos.
El protocolo garantiza que los datos serán entregados en su destino sin errores y en el mismo
orden en que se transmitieron. También proporciona un mecanismo para distinguir distintas
aplicaciones dentro de una misma máquina, a través del concepto de puerto.
TCP da soporte a muchas de las aplicaciones más populares de Internet (navegadores, intercambio
de ficheros, clientes FTP, etc.) y protocolos de aplicación HTTP, SMTP, SSH y FTP.
1
Administrador de redes CLASE 5
Es un protocolo orientado a la conexión, lo que significa que se establece una conexión entre
el emisor y el receptor antes de que se transfieran los datos entre ambos. Los segmentos de la
Capa de Transporte viajan de un lado a otro entre dos hosts para comprobar que la conexión
exista lógicamente para un determinado período, lo que se conoce como conmutación de
paquetes. Al circuito lógico por el que viajan los paquetes se le denomina circuito virtual,
porque aunque cada paquete enviado desde el host origen puede viajar por un camino o ruta
diferente hasta llegar al host destino por medio del protocolo IP, TCP consigue que parezca
que sólo existe un único circuito de comunicación entre ambos host. Con ello, el servicio
controla el flujo entre los host que se están comunicando, entregando al receptor
exactamente la misma secuencia de bytes que le ha pasado el trasmisor en el host origen.
Es un protocolo fiable, implementando mecanismos para conseguir que la información
enviada por el emisor llegue de forma correcta al receptor. De esta forma, las aplicaciones que
envían datos no tienen porqué preocuparse de la integridad de los mismos, dando por hecho
que los datos recibidos son correctos. TCP aporta la fiabilidad de que carece el protocolo
inferior IP. Para ello, cada paquete se trata de forma independiente, asignándole el emisor un
número identificador único, lo que permite un posterior control de los paquetes enviados y
recibidos.
Es un protocolo de flujo no estructurado, con posibilidad de enviar información de control
junto a datos.
Es un protocolo con transferencia de memoria intermedia , sistema mediante el cual, y con
objeto de hacer eficiente la transferencia y minimizar el tráfico de red, se van almacenando
datos suficientes del flujo de transmisión hasta completar un paquete lo suficientemente largo
como para ser enviado. En el lado receptor ocurre un proceso similar, almacenándose los
datos recibidos hasta completar una secuencia completa y correcta de ellos, momento en el
que son pasados al proceso de aplicación de destino. De esta forma, la transferencia a través
de la red puede ser sumamente eficiente. Estos datos se almacenan en unas memorias
intermedias, denominadas buffers.
Usa conexiones full-dúplex, en las que se permite la transferencia de datos concurrente en
ambas direcciones, sin ninguna interacción aparente desde el punto de vista de las
aplicaciones emisora y destinataria. Este sistema presenta la ventaja de que el software de
protocolo puede enviar datagramas de información de control de flujo al origen, a la vez que
lleva datos en dirección opuesta, con lo que se reduce el tráfico de red.
Usa conexiones punto a punto, en cada conexión tiene exactamente dos puntos terminales.
TCP no reconoce ni la multitransmisión ni la difusión.
Una conexión TCP es en realidad una corriente de bytes, no una corriente de mensajes. Además,
los límites de los mensajes enviados por las aplicaciones no se conservan de extremo a extremo,
por lo que un mensaje de 1000 bytes enviado por una aplicación puede dividirse por ejemplo en
dos bloques de 400 bytes y otro de 200 bytes, siendo luego tarea del protocolo TCP del host
destino el ensamblar correctamente las partes para reconstruir el mensaje original.
2
Administrador de redes CLASE 5
Cuando una aplicación pasa datos al protocolo TCP, éste puede enviar los datos de inmediato o
almacenarlos en una memoria buffer intermedia, hasta reunir los suficientes datos como para
enviarlos juntos. Esta elección es exclusiva de TCP.
Antes de poder transmitir datos entre dos host es necesario que el protocolo TCP abra una
conexión entre ellos. Los servicios orientados a conexión se dividen en tres fases:
Los hosts TCP establecen una sesión orientada a conexión entre sí a través de un intercambio de
señales de tres vías. Una secuencia de intercambio de señales de tres vías/conexión abierta
sincroniza una conexión en ambos extremos antes de transferir los datos. Este intercambio de
números introductorios de secuencia de conexión es importante, pues garantiza que si se pierden
datos debido a problemas de transmisión, se puedan recuperar más tarde.
El host receptor, que en el caso de más común será un servidor, espera pasivamente una
conexión ejecutando las primitivas LISTEN y ACCEPT.
En primer lugar, el host que desea iniciar la conexión ejecuta una primitiva CONNECT
especificando la dirección IP y el puerto con el que se desea conectar, el tamaño máximo del
segmento que está dispuesto a aceptar y opcionalmente otros datos, como alguna contraseña
de usuario. Entonces la primitiva CONNECT hace una apertura activa, enviando al otro host un
paquete que tiene el bit SYN (ver formato de un segmento TCP más abajo) activado,
indicándole también el número de secuencia inicial "x" que usará para enviar sus mensajes.
El host receptor recibe el segmento revisa si hay algún proceso activo que haya ejecutado un
LISTEN en el puerto solicitado, es decir, preparado para recibir datos por ese puerto. Si lo hay,
el proceso a la escucha recibe el segmento TCP entrante, registra el número de secuencia "x"
y, si desea abrir la conexión, responde con un acuse de recibo "x + 1" con el bit SYN activado e
incluye su propio número de secuencia inicial "y", dejando entonces abierta la conexión por
su extremo. El número de acuse de recibo "x + 1" significa que el host ha recibido todos los
octetos hasta e incluyendo "x", y espera "x + 1" a continuación. Si no desea establecer la
conexión, envía una contestación con el bit RST activado, para que el host en el otro extremo
lo sepa.
El primer host recibe el segmento y envía su confirmación, momento a partir del cual puede
enviar datos al otro extremo, abriendo entonces la conexión por su extremo.
3
Administrador de redes CLASE 5
Observamos pues que son necesarios tres segmentos para que ambas máquinas abran sus
conexiones y sepan que la otra está también preparada para la transmisión. De ahí el nombre de
saludo de tres vías.
Te puedes preguntar por qué los dos host utilizan números de secuencia distintos, "x" e "y", en vez
de usar el mismo. Con ello se pretende principalmente evitar conflictos entre las máquinas en
casos extremos, por ejemplo, cuando se corta una conexión nada más empezar. Es este caso, si
ambas han empezado su secuencia en cero es posible que el receptor entienda que la segunda
conexión es una continuación de la primera (en caso de usar los mismos puertos en ambas), con el
consiguiente error en la transmisión. Por este motivo, al establecer una conexión cada máquina
genera un número aleatorio basado en un esquema de reloj, con pulso cada 4 segundos, y lo envía
como inicio de secuencia.
Una vez abierta la conexión, ambas máquinas comienzan la transmisión de datos entre ellas, y
continúan así hasta que no quedan más datos que transmitir, momento en el que es necesario
cerrar la conexión. Para ello se utiliza una variante del mecanismo de tres vías usado para la
apertura de la conexión, aunque algo más complicado, debido a que, como las conexiones son full-
dúplex, es necesario cerrar cada uno de los dos sentidos de comunicación de forma
independiente. El proceso que tiene lugar entonces es el siguiente:
4
Administrador de redes CLASE 5
La máquina emisora, que ya no tiene más datos que transmitir, envía un segmento TCP con el
bit FIN activado y cierra el sentido de envío en la conexión, manteniendo abierto el sentido
de recepción.
El host receptor recibe el segmento con el bit FIN activado, devolviendo la correspondiente
confirmación, informando a la aplicación receptora de los datos de la petición de cierre,
siendo ésta la que decide el cierre del otro sentido de conexión. Mientras tanto, envía un
segmento ACK.
El host emisor recibe el correspondiente segmento ACK de acuse de recibo.
Cuando la máquina receptora decide cerrar la comunicación envía un segmento al emisor con
el bit FIN activado.
La primera máquina recibe este segmento, enviando el correspondiente acuse de recibo ACK
(aunque ha cerrado su sentido de conexión sigue devolviendo confirmaciones).
La máquina receptora recibe el segmento ACK y cierra definitivamente la conexión.
SEGMENTO TCP
5
Administrador de redes CLASE 5
El tamaño final de los segmentos es muy importante. Si el segmento es muy grande habrá que
dividirlo en partes de tamaño tal que puedan ser incluidas dentro de un datagrama, con la
consiguiente pérdida de rendimiento. Y si son muy pequeños se estarán enviando más cabeceras
que datos. Hay pues que elegir el tamaño de los segmentos de tal forma que no sea necesario
fragmentarlos en trozos. Hay dos límites para el tamaño de los segmentos: por un lado el tamaño
máximo de un paquete IP, que es de 64 Kbytes, y por otro la Unidad de Transferencia Máxima
(MTU) de cada red. La MTU de una red fija el tamaño máximo que pueden tener los datagramas
transmitidos por ella. Si los datagramas son mayores que la MTU de la red, se deben fragmentar
en varias partes, lo que reduce el rendimiento del sistema.
Si un segmento TCP pasa a través de una serie de redes sin fragmentar y luego entra en una cuya
MTU es inferior al segmento, el router frontera entre ambas redes deberá dividir el segmento en
varios más pequeños. Entonces, cada segmento nuevo recibe sus propias cabeceras TCP e IP.
6
Administrador de redes CLASE 5
Puerto TCP origen: campo obligatorio de 16 bits que especifica el puerto del host origen que
se envía el segmento.
Puerto TCP destino: campo obligatorio de 16 bits que especifica el puerto del host destino al
que se envía el segmento.
Número de secuencia: campo obligatorio de 32 bits que identifica el primer byte del campo de
datos. En este protocolo no se enumeran segmentos sino bytes, por lo que este número indica
el primer byte de datos que hay en el segmento. Al principio de la conexión se asigna un
número de secuencia inicial (ISN, Initial Sequence Number) y a continuación los bytes son
numerados consecutivamente.
Número de acuse de recibo (ACK): campo obligatorio de 32 bits. TCP utiliza la técnica de
piggybacking para reconocer los datos. Cuando el bit ACK está activo, este campo contiene el
número de secuencia del primer byte que espera recibir. Dicho de otra manera, el número
ACK - 1 indica el último bit reconocido.
Longitud de cabecera (HLEN): campo obligatorio de 4 bits quei>ndica el número de palabras
de 32 bits que hay en la cabecera. De esta manera el TCP puede saber dónde se acaba la
cabecera y por lo tanto donde empieza los datos. Normalmente el tamaño de la cabecera es
de 20 bytes por lo que en este campo se almacenará el número 5. Si el TCP utiliza todos los
campos de opciones la cabecera puede tener una longitud máxima de 60 bytes
almacenándose en este campo el valor 15.
Reservado: campo de 6 bits que actualmente se establece en cero, y que está reservado para
usos futuros.
Indicadores o campos de control: campo de 6 bits que contienen funciones de control (como,
por ejemplo, configuración y terminación de una sesión). Cada uno de los bits recibe el
nombre de indicador y cuando está a 1 indica una función específica del protocolo:
URG: campo puntero de urgencia. Indica que el segmento contiene datos urgentes, lo
que hace que el número de secuencia se traslade dónde están dichos datos. Se
complementa con el campo "Marcador urgente", en el que se indica el número de
datos urgentes que hay en el segmento.
ACK: campo número de acuse de recibo. Hay que tener en cuenta que un mismo
segmento puede transportar los datos en un sentido y las confirmaciones en el sentido
opuesto de la comunicación. Indica por tanto que tiene significado el número que hay
almacenado en el campo "Número de acuse de recibo".
PSH: campo push, que implica que la aplicación ha solicitado enviar los datos
existentes en la memoria temporal sin esperar a completar el segmento. De esta
7
Administrador de redes CLASE 5
Ventana: campo de 16 bits que indica cuántos bytes tiene la ventana de transmisión del
protocolo de control de flujo utilizado en el mecanismo de ventanas deslizantes. A diferencia
de lo que ocurre en los protocolos del nivel de enlace, en los que la ventana era constante y
contaba tramas, en el TCP la ventana es variable y cuenta bytes. Contiene el número de bytes
de datos comenzando con el que se indica en el campo de confirmación y que el que envía
está dispuesto a aceptar.
Checksum TCP: campo de 24 bits que contiene una suma de comprobación de errores del
segmento actual, calculada del encabezado y de los campos de datos, y que contiene también
las direcciones IP de origen y destino.
Marcador urgente: campo de 8 bits que se utiliza cuando se están enviando datos urgentes
que tienen preferencia sobre todos los demás, y que indica el siguiente byte del campo
"Datos" que sigue a los datos urgentes, con lo que el destino puede identificar dónde terminan
éstos. Es decir, cuando el indicador "URG" está activo, este campo indica cual es el último byte
de datos que es urgente. De esta manera el receptor puede saber cuántos datos urgentes
llegan. Este campo es utilizado por algunas aplicaciones como telnet, rlogin y ftp.
Opciónes: campo que si está presente permite añadir una única opción de entre las siguientes:
Relleno: bits de relleno para completar el tamaño del segmento TCP para que sea múltiplo de
32 bits.
Datos: datos de protocolo de capa superior que se envían entre sí las aplicaciones.;
De forma similar, si el programa de aplicación genera bloques de datos muy largos, el software de
protocolo puede dividir cada bloque en partes más pequeñas para su transmisión.
Para aplicaciones en las que los datos se deben entregar aunque no se llene la memoria
intermedia, el servicio de flujo proporciona un mecanismo de empuje o push, que obliga al
software de protocolo a transferir todos los datos generados sin esperar a que se llene la memoria
intermedia.
8
Administrador de redes CLASE 5
Otros datos importantes de la cabecera TCP son el número de puerto origen y el de puerto
destino. Los puertos proporcionan una manera práctica de distinguir entre las distintas
transferencias de datos, ya que un mismo ordenador puede estar involucrado en varias
transferencias simultáneas.
TCP. SEGURIDAD
Uno de los posibles ataques a una máquina remota es el conocido como IP spoofing, consistente
en suplantar a otra máquina en una comunicación entre dos host. Si un atacante consigue meterse
en una comunicación entre dos máquinas y cambiar las referencias de los paquetes transmitidos
por las suyas propias, los datos le llegarán a él, en vez de al destinatario real.
Si bien suplantar la dirección Ip de una de las máquinas es relativamente fácil, el problema con el
protocolo TCP es que los segmentos van referenciados con el número de secuencia TCP
correspondiente, número que es aleatorio y diferente para cada máquina y conexión.
El posible atacante se encuentra entonces con dos problemas: cambiar la dirección IP por la suya
propia y mantener la secuencia de los paquetes en el diálogo con la máquina víctima. Estos
problemas, aunque complicados, tienen solución, ya que conectándose a un puerto y recibiendo
unos cuantos paquetes se puede calcular la secuencia TCP que se está usando en la conexión.
Una vez conseguida la suplantación, la máquina víctima creerá que se está comunicando con un
destinatario autorizado, cuando en realidad está enviando posibles datos sensibles a un
desconocido.
9
Administrador de redes CLASE 5
Filtrar determinados servicios que son vulnerables a este ataque, como servicios de
autenticación o X Windows.
Utilizar sistemas de encriptación de datos.
PUERTOS Y SOCKETS.
La mayoría de los Sistemas Operativos actuales soportan el multiproceso, mediante el cual varios
procesos se pueden estar ejecutando a la vez en una máquina, de los cuales puede haber distintos
de ellos comunicándose por red al mismo tiempo con la misma máquina o con máquinas
diferentes.
En este entorno, decir que un proceso de la máquina receptora es el destino final de un datagrama
concreto enviado por otro proceso de la máquina emisora es una afirmación que presta a
confusión, ya que los procesos son dinámicos, se crean y se destruyen constantemente, por lo que
un proceso en el ordenador emisor en un momento dado no puede saber qué proceso del equipo
receptor es el destinatario de los paquetes que está enviando. Además, para una correcta
comunicación necesitamos saber qué función del equipo receptor es la encargada de recibir los
paquetes, independientemente del proceso que ha lanzado dicha función.
TCP puede adaptarse dinámicamente a las propiedades de internet y manejar fallos de muchas
clases. Para obtener los servicios de este protocolo, el mandador y el receptor deben crear unos
puntos terminales de conexión, denominados sockets. Cada socket contiene la dirección IP del
host y un número de 16 bits que es de carácter local al host, denominado puerto de protocolo. Los
primeros 256 puertos son puertos bien conocidos, y se usan para servicios comunes, como HTTP,
FTP, etc.
Una conexión viene definida por dos puntos extremos (sockets), permitiendo TCP que varias
conexiones compartan un punto extremo final (conexiones múltiples a la vez), al estar cada una de
ellas identificada por una pareja IP-puerto de forma única.
Para obtener un servicio TCP o UDP debe establecerse explícitamente una conexión entre un
socket del host transmisor y un socket del host receptor. Para ello se usan determinadas primitivas
de llamada a los sockets, entre las que destacan las siguientes:
10
Administrador de redes CLASE 5
Para que se pueda crear una conexión entre dos host es necesario que el extremo servidor haga
una apertura pasiva del puerto, quedándose a la escucha en el mismo a la espera de peticiones de
conexión, mientras que el extremo cliente debe realizar una apertura activa en el puerto servidor,
abriendo un puerto propio y poniéndose en conexión con el puerto que está escuchando en el
servidor.
Generalmente los servidores mantienen abiertos una serie de puertos conocidos estándares, en
los que un programa concreto (que se suele denomina demonio) permanece a la espera de
peticiones de conexión.
Los puertos van a ser los destinatarios finales de los datagramas en una comunicación entre host
de una red. Cada puerto de protocolo podemos imaginarlo como una vía de entrada de
información, como un punto de un host que permite la entrada de paquetes a través de él. Si
queréis, podéis tener un concepto mental de puerto como una "puerta" de acceso a los niveles de
aplicación, una cola de entrada en la que el software de protocolo coloca los datagramas
entrantes.
Tanto TCP como UDP usan números de puerto para enviar información a las capas superiores. Los
números de puerto se usan para mantener un seguimiento de las distintas conversaciones que
atraviesan la red al mismo tiempo.
Para poder establecer una comunicación correcta entre dos máquinas, el emisor necesita conocer
tanto la dirección IP como el número de puerto de protocolo del destino dentro de la máquina
receptora. Estos puertos los proporciona los protocolos UDP y TCP (capa de transporte), y
mediante ellos se puede distinguir entre muchos programas que se ejecutan a la vez dentro de
una misma máquina.
EL concepto de puerto en TCP es más complejo que en UDP, ya que TCP utiliza para comunicarse
una conexión, no el puerto de protocolo, como su abstracción fundamental: estas conexiones se
identifican por un par de puntos extremos. Un punto extremo es un par de números host-puerto,
en donde host es la dirección IP de un anfitrión y puerto es un puerto TCP en dicho anfitrión.
Las conexiones vienen definidas por dos puntos extremos, permitiendo TCP que varias conexiones
compartan un mismo punto extremo, siendo los puertos los encargados de distinguir las distintas
conexiones. Las aplicaciones utilizan los puertos para recibir y transmitir mensajes.
11
Administrador de redes CLASE 5
Cada puerto de protocolo viene identificado por un número de 16 bits, lo que nos da 65.536
puertos posibles en cada ordenador, que se identifican por su correspondiente número en base
decimal. TCP combina la asignación estática de números de puerto con la asignación dinámica,
mediante la denominada asignación de puertos bien conocidos para aplicaciones servidoras
(asignación estática) y la asignación del resto de los puertos disponibles a las aplicaciones cliente
conforme los vayan necesitando (asignación dinámica).
Cuando una aplicación cliente quiere comunicarse con una aplicación servidora de otro host busca
un número de puerto libre y lo utiliza para transmitir los datos, mientras que en el otro host la
aplicación servidora permanece a la escucha en su puerto bien conocido para recibir los datos. Por
ejemplo, cualquier conversación destinada a la aplicación FTP utiliza el número de puerto estándar
21.
Para optimizar su funcionamiento los puertos poseen una memoria intermedia, denominada
BUFFER, situadas entre los programas de aplicación y la red. Las aplicaciones transmiten los datos
a los puertos, guardándolos éstos en sus buffers hasta que pueden ser enviados por la red. Cuando
llegan al host destino, los datos son almacenados de nuevo en los buffers hasta que la aplicación
receptora esté preparada para recibirlos.
SEGURIDAD Y PUERTOS
Al ser los puertos los puntos de entrada de paquetes de datos a una máquina, son también puntos
peligrosos por su vulnerabilidad. En general, no es conveniente tener más puertos abiertos que
aquellos que son necesarios para mantener activos los servicios de red que necesitemos usar.
12
Administrador de redes CLASE 5
Por ejemplo, eso es lo que hacen troyanos como Back Oriffice para permitir a terceros la
administración remota de nuestra máquina, con lo que pueden copiar o borrar ficheros nuestros,
coger claves secretas e incluso formatearnos el disco duro.
Es por lo tanto conveniente cerrar los puertos de nuestra máquina que no vayamos a usar y
realizar de vez en cuando un escanéo de los puertos que tenemos abiertos, sobre todo si
sospechamos que se están ejecutando comandos o aplicaciones no deseadas en nuestro equipo.
Para ello disponéis del comando netstat, visto antes, o podéis usar uno de los muchos programas
shareware o freeware escaneadores de puertos disponibles en Internet.
Una de las técnicas básicas de ruptura de seguridad de un servidor u host es el escaneo inicial de
sus puertos, para ver qué servicios están corriendo en él. Si un determinado puerto está abierto el
daemon correspondiente estará escuchando en é, situación que se puede aprovechar para
intentar penetrar a través de ese puerto en el sistema.
Existen diferentes técnicas de escaneo de puertos, desde el TCP connect, usando primitivas
CONNECT, hasta el TCP SYN scanning, que establece solo media conexión con el host atacado.
También es posible realizar escaneos usando el protocolo UDP, e incluso a través del protocolo
FTP. Varían unas de otras en el sistema usado y, sobre todo, en la anonimidad que permite al
atacante, ya que una de sus metas principales es no ser detectado.
Una vez realizado el escaneo y averiguados los puertos que la máquina objeto del ataque tiene
abiertos, lo que se suele hacer es intentar conectar con ella por cada uno de esos puertos,
generalmente mediante el protocolo TELNET, lo que permite en muchos casos averiguar el tipo de
servidor que corre escucha en ese puerto y su versión. Y a partir de aquí, buscar exploits para ese
servidor y versión.
Abierto: La aplicación que está a la escucha en el puerto acepta conexiones que pueden
ser TCP o UDP, y en el primer caso devuelve un paquete SYN-ACK. Encontrar un puerto en
este estado es el objetivo habitual de un atacante.
Cerrado: El puerto recibe paquetes y responde con un paquete RST, pero no hay ninguna
aplicación a la escucha. Detectar un puerto abierto y otro cerrado en una máquina puede
ayudar a determinar el sistema operativo que se está ejecutando.
Filtrado: Los paquetes que se envían no llegan al puerto y por lo tanto no puede decidir si
está abierto o cerrado. Este estado nos indica que tenemos delante algún tipo de
cortafuegos.
13
Administrador de redes CLASE 5
14