Beruflich Dokumente
Kultur Dokumente
c
c
c
Aunque se puede argumentar que no existe una capa del modelo TCP/IP que presente
mayores problemas que otra, también es justo argumentar que la capa de transporte es
una de las más complejas, por el número tareas que se llevan a cabo.
Existen algunos servicios que son fiables casi al 100%, asegurando una entrega secuencial
de los mensajes:
Ê u.25
Ê pedes que implementen LAPF (implementación de capa de enlace)
Ê Lan IEE 802.3 con LLC orientado a la conexión
Estos escenarios son ciertos siempre y cuando exista una conexión entre clientes finales a
la misma red, y no una simple interconexión de red.
!
El control de flujo es una de las tareas más complejas dentro de la capa de transporte,
existen dos razones para ello:
El proceso de apertura ideal, inicia estando tanto el emisor como el receptor en un estado
CLOSED. Luego el emisor cambia a un estado SYN SENT (donde se envía una solicitud de
sincronización y se cambia a estado de apertura activa), entonces el receptor al recibir el
segmento SYN cambia a LISTEN (apertura pasiva) luego contesta con su propio segmento
SYN y cambia a modo ESTAB, done el emisor original, al recibir el SYN cambia a ESTAB.
También puede suceder que ambos pares deseen intercambiar información y envíen
prácticamente un segmento SYN al mismo tiempo, con lo que se cambiaría
inmediatamente a estado ESTAB en ambos pares.
El proceso de cierre sucede de forma similar. Puede iniciar el cierre cualquiera de los pares
o ambos a la vez, y la conexión es cerrada por mutuo acuerdo. Existe dos tipos de cierres:
un cierre repentino hace que se pierdan los datos en tránsito, mientras que un cierre
ordenado hace que se espere hasta que todos los datos hayan sido recibidos.
De todas formas el proceso de cierre inicia cuando uno de los pares recibe de un usuario
de transporte una primitiva de cierre (close), entonces se envía un segmento FIN al otro
par para solicitar el cierre, y se pasa a estado FIN WAIT. En este estado aun seguirá
recibiendo información y pasándola a la capa correspondiente. Este estado finaliza cuando
se recibe un segmento FIN, con lo que se libera al usuario y se cierra la conexión.
[
*c
& +
Nótese que el problema puede no ser únicamente que se pierdan ocasionalmente algunos
segmentos, sino que los mismos pueden llegar sin atender a ninguna secuencia debido a
retardos de tráfico en la red, por lo que es necesario un elaborado mecanismo que haga
frente a estas deficiencias derivadas del modelo de red. Para complicar aún más la
situación, las soluciones planteadas para las redes fiables, no son aplicables, ya que
conducen a nuevos problemas que solo agravan más las cosas.
En definitiva se deben tratar siete cosas: la entrega ordenada, estrategia de retransmisión,
dirección de duplicados, control de flujo, establecimiento de la conexión, cierre de la
conexión y recuperación de fallos.
Es posible que los segmentos, incluso en el caso de que llegasen todos, lleguen en forma
desordenada. La solución a este problema consiste en numerar los segmentos
secuencialmente. En algunos protocolos que abarcan tanto la capa de red como la de
enlace (HDLC o u.25) cada unidad de datos, es decir, cada trama o paquete, se numeran
secuencialmente. Este mismo esquema se utiliza en algunos protocolos de transporte. Sin
embargo TCP usa un esquema que se diferencia en que cada octeto que se transmite se
numera implícitamente. Por ejemplo, el primer segmento puede tener el número de
secuencia igual a 1, y si ese segmento contiene 200 octetos de datos, entonces el segundo
segmento tendría el número de secuencia 201, y no 2.
((!(%
La retransmisión de un segmento puede ser causado por dos razones. La primera es que el
segmento puede dañarse en el camino, llegando eventualmente a su destino. Si en el
segmento se incluye una suma de comprobación, la entidad de transporte que recibe los
datos puede detectar el error y descartar el segmento. La segunda razón, es que la
entidad emisora no sabe que la transmisión del segmento no se ha realizado con éxito, y
para tratar esta contingencia se usa un esquema de confirmaciones de recepción, donde
la entidad receptora debe confirmar cada segmento recibido satisfactoriamente
devolviendo un segmento con un número de confirmación. Para mayor eficiencia, no se
necesita una confirmación por cada segmento, sino que se puede usar una confirmación
acumulada. Por ejemplo, el receptor puede recibir lo segmentos numerados como 1, 201
y 401 pero solo envía AN=601 de regreso. El emisor interpreta AN=601 entendiendo que
los segmentos anteriores se recibieron correctamente.
%"# (
Para el primer escenario, note que se dice recibir "un" duplicado, ya que desde el punto
de vista del emisor, el segmento retransmitido es el duplicado, sin embargo, el segmento
duplicado puede llegar antes que el original debido a algún retardo, en cuyo caso el
receptor vería el segmento original como el duplicado. Como sea, se necesitan dos
tácticas para tratar el caso:
Ê El receptor debe asumir que su confirmación se perdió y por tanto, confirmar el
duplicado. Entonces el emisor no debe confundirse si recibe varias confirmaciones
positivas para el mismo segmento.
Ê El espacio de números de secuencia debe ser lo suficientemente grande para no
agotarse antes del tiempo máximo de vida para un segmento.
Ahora, vea el caso en que un SYN i duplicado sobrevive hasta después del cierre de la
conexión. Si un SYN i obsoleto llega a B luego de que la conexión haya terminado, B
supone que se trata de una petición nueva y responde con un SYN=j, lo que significa que B
acepta la solicitud de conexión y que comenzará a transmitir con SN=j. Mientras tanto A
decide abrir una nueva conexión con B y envía SYN=k. B descarta el último con duplicado,
provocando que ambos extremos hayan transmitido y recibido un segmento SYN, lo que
les conduce a pensar que existe una conexión válida. Sin embargo, cuando A inicia la
transferencia de datos con un segmento numerado con k, B rechaza el segmento por no
corresponder con la secuencia que espera.
c $%
"#%"#(
Cuando el sistema sobre el cual una entidad de transporte está operando falla y
posteriormente se recupera, la información de estado de todas las conexiones activas se
pierde. Las conexiones afectadas pasan a estar "semiabiertas" ya que el lado que no se vio
afectado por la interrupción no se habrá dado cuenta aun del problema.
El extremo activo de la conexión semiabierta puede cerrar la conexión usando un
temporizador de persistencia, el cual mide el tiempo que la máquina de transporte
continuará esperando una confirmación (o la respuesta apropiada) de un segmento
transmitido, luego de que el segmento haya sido retransmitido el máximo número de
veces. Cuando el temporizador expira, la entidad de transporte asume que ha fallado la
otra entidad o la red intermedia, cierra la conexión e indica al usuario TS que se produjo
un cierre anormal.
, c
1.Ê Flujo de datos forzado: Por lo general TCP decide cuando se han acumulado
suficientes datos para enviar un segmento. Los clientes TCP pueden modificar este
comportamiento agregando una etiqueta para entrega forzada.
2.Ê Señalización de datos urgentes: A través de esto se informa al destinatario que los
datos son significativos o ͞urgentes͟. El destinatario decide entonces qué hacer
con esos datos.
cc
,
c c
Siempre se utiliza un saludo en tres vías. Se activa el indicador SYN para solicitar una
conexión. El receptor responde con SYN y ACK.
Una conexión está definida por un Socket origen ʹ destino por tanto solo puede haber una
única conexión TCP entre un único par de puertos.
((
A pesar de que los datos son transmitidos en segmentos, dicha transmisión es vista como
un flujo de octetos. Cada segmento contiene el número de secuencia del primer octeto
del campo de datos. El control de flujo es regulado a través de la asignación de créditos,
donde el crédito representa un número de octetos y no de segmentos.
TCP normalmente decide cuando construir un segmento para ser transmitido y cuando
entregar los datos recibidos al usuario. Un indicador PSH obliga a que los datos
acumulados sean enviados o entregados según sea el caso, sirviendo como una función de
fin de bloque.
El usuario puede indicar que un bloque es urgente, y para ello TCP aplica al fin del bloque
un puntero urgente y lo envía con el flujo ordinario de datos.
c $%
Normalmente ocurre un cierre ordenado. Cada usuario TCP emite una primitiva Close,
mientras que la entidad TCP establece el bit FIN en el último segmento que envía.
Si el usuario emite una primitiva ABOpT se produce un cierre repentino. En este caso, la
entidad deja de intentar de recibir o transmitir datos y limpia los buffers de entrada y
salida para finalmente enviar un segmento pST al otro extremo.
,[ c
c c
El control de flujo basado en créditos de TCP se diseñó para evitar la saturación del buffer
de la entidad receptora. Actualmente este mecanismo es utilizado por Internet para
controlar la congestión entre origen y destino. Esta congestión tiene dos efectos:
Por tanto, TCP puede utilizarse para detectar el inicio de la congestión y reaccionar a
través de alguna técnica de reducción en el flujo de datos. Como sea, estas técnicas se
pueden agrupar en dos categorías:
.
Además de TCP, existe otro protocolo muy popular para la capa de transporte y que
además pertenece a la pila TCP/IP, el Protocolo de Datagrama de Usuario (UDP, User
Datagram Protocol), especificado en el pFC 768.
UDP se sitúa sobre IP, y como es no orientado a la conexión, tiene pocas tareas que
realizar. Esencialmente, incorpora a IP la capacidad de un direccionamiento de puerto.
Esto se aprecia mejor al examinar la cabecera UDP. Dicha cabecera incluye un puerto
origen y un puerto destino. El campo de longitud contiene la longitud de todo el segmento
UDP, incluyendo la cabecera y los datos. La suma de comprobación es el mismo algoritmo
usado en TCP e IP. Para UDP, la suma de comprobación se aplica al segmento UDP entero
más una seudo - cabecera incorporada a la cabecera UDP en el momento del cálculo. Si se
detecta un error, el segmento se descarta sin tomar ninguna medida adicional.