Capítulo 3: La Capa de Transporte Flashcards

1
Q

¿Qué provee la capa de transporte?
¿En dónde se implementan los protocolos de capa de transporte? ¿Cuál es su trabajo?

A

La capa de transporte provee comunicación lógica entre aplicaciones.

Comunicación lógica se refiere a que desde la perspectiva de la aplicación, es como si los hosts estuviesen directamente conectados, pero físicamente no es así porque en el medio hay routers y enlaces.

Los protocolos de capa de transporte se implementan en los hosts, no en los routers. Su trabajo es convertir los mensajes a enviar en paquetes que se conocen como segmentos. Los segmentos se le pasan a la capa de red, que los transforma en datagramas y luego se envía a destino.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

¿Cuál es la relación entre la capa de transporte y la capa de red?

A

La capa de transporte provee comunicación lógica entre aplicaciones (procesos), y la capa de red provee comunicación lógica entre hosts.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

¿Qué hace el protocolo de transporte?
¿Qué servicios ofrece? ¿Están limitados?

A

El protocolo de transporte mueve la información hasta el borde de la capa de red y viceversa, pero no tiene nada que ver en cómo esa información viaja dentro de la red.

Puede ofrecer los siguientes servicios:
- [TRA] Transferencia de datos confiable (RDT): garantiza la llegada y la integridad de los datos.
- [CA] Caudal (throughput): garantizar una tasa mínima a la que el proceso de origen puede entregarle datos al proceso receptor.
- [SIN] Sincronización: permite garantizar un umbral de demora en la transmisión de los datos (que ningún bit tarde más de x ms en llegar a destino).
- [SE] Seguridad: permite encriptar la información, chequear que la información no haya sido alterada en el camino, autenticar los extremos, etc.

Algunos de los servicios que ofrece un protocolo de transporte están limitados por los servicios de la capa de red. Si la capa de red no puede garantizar los tiempos de demora o el bandwidth, tampoco lo puede hacer la capa de transporte.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

¿Cuál es el protocolo de red de Internet?

A

El protocolo de red de Internet es IP. El modelo de servicio de IP es best-effort delivery service. Esto quiere decir que hace todo lo posible para entregar los segmentos, pero no garantiza nada. Por eso se dice que IP es un servicio no confiable.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

¿Cuál es la principal responsabilidad de los protocolos UDP y TCP?¿Ambos las garantizan? ¿Hay algún servicio adicional que se provea?

A

La principal responsabilidad de los protocolos UDP y TCP es la de extender el servicio de entrega entre dos hosts a un servicio de entrega entre dos procesos corriendo en dichos hosts.

Esta extensión se llama transport-layer mutiplexing and demultiplexing.

Además, proveen de un chequeo de errores en los headers de los segmentos.

UDP sólo garantiza esas dos cosas (por eso es unreliable).

TCP provee más servicios, tal como la transferencia confiable de datos y el control de congestión.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

¿A dónde entrega los datos la capa de transporte? ¿Qué es multiplexing y qué es demultiplexing?
¿Qué información se necesita para demultiplexar?

A

La capa de transporte le entrega los datos directamente al socket, no al proceso.

Cada socket tiene un id (el puerto), y para saber a qué socket debe entregarle, cada segmento tiene un set de campos donde se especifica este id.

Esta acción de entregar datos de la capa de transporte al socket se llama demultiplexing.

La acción de juntar pedazos de diferentes sockets, encapsularlos con un header para crear segmentos y pasárselos a la capa de red se llama multiplexing.

Extremo receptor:
[capa de transporte] -> demultiplexing -> [socket]

Extremo de origen:
[socket] -> multiplexing -> [capa de red]

Para demultiplexar, en el header deben estar seteados los campos de número de puerto para el origen y el destino, para que la capa de transporte pueda fijarse en el puerto de destino a qué socket mandar el paquete.
El puerto de origen sirve por si se quiere responder algo.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

¿Cómo se identifica un socket TCP?

A

Un socket TCP se identifica por cuatro campos:

  1. dirección IP de origen
  2. puerto de origen
  3. dirección IP de destino
  4. puerto de destino

A diferencia de UDP, si llegan dos segmentos con distinto source IP o source port, van a ser dirigidos a distintos sockets.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

De un ejemplo de uso de UDP.

A

Un ejemplo de una app que usa UDP es DNS.
DNS envía una query y si no obtiene respuesta puede intentar enviarla de nuevo, o enviarla a otro servidor, o informar que no se obtuvo respuesta.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

UDP ofrece servicios mínimos y no le agrega nada al protocolo IP. Entonces, ¿por qué razones un developer elegiría usar UDP antes que TCP?

A

Hay 4 razones por las cuales un developer elegiría usar UDP antes que TCP.

  1. Más control sobre qué datos se envían y cuándo: UDP no tiene control de congestión, apenas recibe información la empaqueta y la manda. TCP dejará información esperando si están muy cargados los enlaces. Además, TCP garantiza que todos los paquetes lleguen y que además lleguen ordenados, y se tomará el tiempo que necesite para recibir las confirmaciones de envío; y para aplicaciones en tiempo real, es poco eficiente.
  2. No establece ninguna conexión: Establecer conexión introduce delays.
  3. No mantiene estados de conexión: Permite que se puedan mantener más clientes activos en una aplicación que corre con UDP.
  4. Headers con bajo overhead: TCP tiene 20 bytes de header overhead, mientras que UDP tiene 8.

Las aplicaciones que no requieren de servicio confiable y requieren de baja latencia como DNS, juegos multijugadores, etc. usan UDP.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

¿Es posible hacer una aplicación que se comunica con UDP y transporta datos de manera confiable?

A

Es posible hacer una aplicación que se comunica con UDP y transporta datos de forma confiable. Sólo se debe construir esa seguridad desde la misma aplicación, implementando un RDT (reliable data transfer, tal y como se hizo en el TP de la materia).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

¿Cómo se detectan errores en un segmento recibido?

A

Para la detección de errores en un segmento recibido, se usa el checksum.

El checksum se usa para saber si bits dentro del segmento fueron alterados durante el transporte.

Al hacer el envío, se hace el complemento a 1 de la suma de las 16-bits words del segmento y se guarda en el campo de checksum.

Al recibir el paquete, se suman todos los campos de nuevo pero incluyendo el checksum. Si no hubo errores, el resultado van a ser todos 1s. Si hay algún 0 es que hubo un error en el transporte.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

¿Qué son y en qué se basan los ARQ Protocols?
¿Qué capacidades requieren?

A
  • Los ARQ (Automatic Repeat reQuest) protocols son los protocolos de transferencia de datos fiables basados en las retransmisiones.
  • Se basan en retransmitir mensajes cuando estos no fueron recibidos correctamente.
  • Por cada mensaje, el receptor da el OK o pide que se le repita.

Esto requiere de 3 capacidades:
1. Detección de Errores
2. Feedback del Receptor
3. Retransmisión

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

¿Qué es el protocolo rdt1.0?

A

El protocolo rdt1.0 es el protocolo de transferencia de datos fiable sobre un canal totalmente fiable. Es el caso trivial, donde el lado emisor espera una llamada de arriba y el lado receptor espera una llamada de abajo.

Como se tiene algo totalmente fiable, no existe la necesidad de realimentación, confirmación o control de congestión.

El protocolo rdt1.0 no es un protocolo ARQ.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

¿Qué es el protocolo rdt2.0?
Explique su funcionamiento y la posible falla del protocolo. ¿Cómo se puede solucionar la falla?

A

El protocolo rdt2.0 es el protocolo de transferencia de datos fiables sobre un canal con errores de bit.

Los errores se producen en los componentes físicos de una red cuando el paquete se transmite, se propaga o accede a un buffer.

El protocolo rdt2.0 es un protocolo ARQ, requiere de:
- detección de errores
- retroalimentación del receptor (con ACK o NAK)
- retransmisión

Funcionamiento:
1. El lado emisor, envía datos y espera un ACK o NAK.
2. Si recibe un NAK, vuelve a enviar los datos.
3. ACK, queda a la espera de una llamada de la capa superior para volver a enviar datos.

No se envía ningún otro mensaje hasta no recibir el OK del último enviado. Es por esto que al protocolo rdt2.0 se lo conoce como stop-and-wait.

Una falla del modelo es que no considera que el paquete ACK o NAK puede estar corrompido. En ese caso, podría reenviarse información pero podría llevar a tener paquetes duplicados, porque no se sabe si lo que se recibe es una retransmisión o información nueva.

Esta falla puede solucionarse agregando un número de secuencia a la data del paquete, para poder compararlo con el anterior. (RDT 2.1)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

¿Cómo se implementa RDT 2.2?

A

En RDT 2.2 se hace una modificación sobre RDT 2.1 donde en vez de mandar señales NAK, se manda una señal ACK por el último paquete bien recibido.

Un sender que recibe dos ACKs por el mismo paquete va a saber que el receptor no recibió bien el paquete que le sigue al que fue recibido doble. Entonces, ahora el receptor tiene que incluir el número de secuencia del paquete reconocido por ACK y el emisor tiene que chequearlo.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

¿Qué fenómeno tiene en cuenta el protocolo RDT 3.0 y cómo funciona?

A

RDT 3.0 considera la posibilidad de que se pierdan paquetes en la comunicación, y agrega un mecanismo tal que después de cierta cantidad de tiempo sin recibir una respuesta, se retransmite el mensaje.
Esto se implementa usando un timer, que inicia cuando el host de origen envía el paquete y se detiene cuando recibe la respuesta. Si se supera el tiempo de timeout, se retransmite el paquete.

El protocolo RDT 3.0 no tiene buena performance usando Stop-and-Wait. La solución es permitir enviar muchos paquetes en una ráfaga, sin tener que esperar a que se responda un ACK por cada uno antes de enviar el siguiente.

En consecuencia, se debe incrementar el rango de números de secuencia, el emisor y el receptor seguramente deban almacenar más de un paquete en el buffer, y se deberán manejar los casos de pérdida, corrupción o demora de paquetes.

17
Q

Para RDT3.0: ¿Qué dos approaches se tienen? Explique cada una.

A

Hay dos approaches para el manejo de errores con pipelines.

Go-Back-N (o sliding-window protocol): el emisor envía una ráfaga de paquetes, pero solo puede tener una cantidad máxima de paquetes sin ACK. Esa cantidad se la conoce como window size. Cuando se recibe el ACK del primer paquete de la ventana, se “desliza” y se envía el paquete siguiente al último de la ventana. Se tiene un solo timer para el último paquete transmitido que aún no recibió ACK. Si se recibe un ACK pero todavía hay paquetes que no se reconocieron, se reinicia el timer.

Si ya se reconocieron todos los paquetes, se detiene el timer.

Si salta el timeout, se reenvían todos los paquetes de la ventana actual.

Del lado receptor, si recibe bien y en orden un paquete envía un ACK con su número de secuencia.
Si no recibe bien algún paquete o si llega desordenado, lo descarta y envía un ACK por el último paquete recibido. El problema acá es que se puede descartar un paquete bueno solo por estar desordenado, y que en la retransmisión se pierda o llegue corrupto. También puede haber problemas de performance cuando se tiene una ventana muy grande y se deben retransmitir muchos paquetes solo por uno con error.

Selective repeat: evita retransmitir paquetes innecesarios, retransmitiendo solo aquellos que se sospecha que se recibieron con errores. La ventana comienza en el primer paquete enviado cuyo ACK aún no se recibió, y cuando avanza se desliza hasta el primer paquete sin ACK, enviando los paquetes nuevos. La diferencia está en que el receptor responde ACK a un paquete que llegó en desorden, y lo guarda en un buffer para después ordenarlos. Ahora cada paquete tiene un timer, que inicia cuando el paquete se envía y se detiene cuando se recibe su ACK. Si hay timeout, se retransmite solamente ese paquete.

18
Q

¿Por qué se dice que el protocolo TCP sea orientado a la conexión? ¿Qué significa que TCP provee un servicio full-duplex?

A

Se dice que TCP es orientado a la conexión porque antes de que un proceso pueda comenzar a enviar datos a otro debe establecerse la comunicación entre ambos (handshake). Esta primera comunicación sirve para inicializar variables de estado asociadas a la conexión.

Que TCP provea un Servicio full-duplex significa que si hay una conexión TCP entre un proceso A en un host y un proceso B en otro host, los datos de la capa de aplicación pueden viajar de A a B al mismo tiempo que viajan datos de B a A.

19
Q

Explicar qué ocurre en TCP desde que se establece la conexión hasta que se transmite toda la información de un host al otro, ¿qué camino sigue la información para pasar desde el cliente hasta el recepto?.
¿Cómo se detectan pérdidas de paquetes? ¿Qué se hace ante esos casos?

A

En TCP, la conexión se establece primero con un three-way handshake:
1. El cliente envía un segmento con el flag SYN encendido
2. El servidor responde con otro segmento con los flags SYN y ACK encendidos
3. El cliente vuelve a enviar otro segmento con el flag ACK, que puede o no contener un payload.

  1. Establecida la conexión, el cliente envía información a través del socket. Pasado el socket, los datos quedan en manos de TCP del lado del cliente.
  2. TCP dirige los datos al buffer de envío. Cada tanto, TCP va a tomar chunks de datos del buffer y se los va a pasar a la capa de red. La cantidad máxima de datos que puede tomar y enviar está limitada por el tamaño máximo del segmento (MSS-maximum segment size). TCP empareja cada chunk de data con un header, formando segmentos.
  3. TCP envía una ráfaga de paquetes y se queda esperando los ACK para deslizar la ventana de congestión. Si se pierde algún paquete de la ráfaga, el servidor responderá a los siguientes paquetes con el número de ACK del último paquete que recibió correctamente. Esto puede llevar a tener ACKs repetidos, que es lo que usa TCP para detectar pérdida de paquetes. Ante ese evento, se retransmite el paquete que se detectó como perdido (el siguiente en número de secuencia al del ACK repetido), y se recibirá un ACK con el número del último.
  4. Cuando se transmitieron todos los segmentos, se cierra la conexión enviando un segmento con el flag FIN en 1 desde el proceso cliente. El servidor envía un segmento de ACK, y envía otro segmento con el flag FIN en 1. El cliente responde con un ACK y se termina la conexión desalocando buffers y variables.
20
Q

¿Cómo controla TCP la congestión en la red?

A

El enfoque de TCP para controlar la congestión consiste básicamente en reducir o aumentar la tasa de envío según qué tan congestionada está la conexión.

TCP lleva registro de una variable llamada congestion window (cwnd), que limita el ritmo al que se puede enviar información desde el sender.

  • La conexión inicia con una ventana de congestión chica, y comienza en modo Slow Start, que con cada ACK duplica el tamaño de la ventana hasta que la misma alcanza el SSThreshold. Ahí se pasa a congestion avoidance, donde se aumenta el tamaño de la ventana en forma lineal.
  • Si hay tres ACKs repetidos, se asume que se perdió un paquete. En ese caso, se reduce el tamaño de la ventana a la mitad, se retransmite el segmento perdido y se continúa en modo Congestion Avoidance, creciendo la ventana de forma lineal.
  • Ante un timeout, el tamaño de la ventana cae a 1MSS (maximum segment size, para retransmitir el paquete perdido) y el SSThreshold a 2MSS.
21
Q

¿Cómo se calcula el timeout en TCP?

A

Para calcular el timetouit en TCP se usa un cálculo estadístico que toma en cuenta las variaciones del RTT a lo largo del tiempo, desde que inició la conexión TCP.

Se calcula el timeout inicial como T_i = α × RTT_i + (1−α) × T_{i−1}, donde α es un factor de ponderación, habitualmente α = 1/8.

Después se calcula el desvío del timeout inicial DT_i usando otro factor de ponderación β, habitualmente β = 1/4.

Finalmente, el RTO (retransmission timeout) para el i-ésimo paquete se calcula como RTO_i = T_i + 4 * DT_i