Protocolo TCP: Control de flujo, ventanas de recepción y velocidad de transmisión

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 9,79 KB

El protocolo TCP utiliza un control de flujo basado en ventana deslizante

Las ventanas de recepción son de tamaño variable, pudiendo cerrarse completamente. ¿Qué utilidad puede tener esto? ¿Por qué no se definen de tamaño fijo, facilitando el manejo de las mismas?

En TCP, el tamaño de las ventanas de recepción es variable. Cuando se establece la conexión se negocian los tamaños iniciales de las mismas, pudiendo variar a lo largo de la conexión. Esto nos permite realizar un control de flujo extremo a extremo que el TCP gestiona en función de los recursos disponibles (memoria).

En una LAN con RTT estimado de 1ms, indica la velocidad máxima de transmisión que debe alcanzar esta red (BW efectivo) para que se logre una utilización del 100% de su ancho de banda con una única conexión TCP

RTT=1ms

64 KB-----1ms

Máximo 64KB por RTT

X KB-------1000ms

X = 64*10^3=64KB*10^3 segundos = 512 MB/s

A partir de entonces, se producen los siguientes eventos (Ti < Ti+1):

T1 – Se recibe un nuevo ACK válido

Si se recibe un ack válido la ventana de congestión aumenta exponencialmente y valdría 8. Lo demos es cte.

T2 – Se recibe un nuevo ACK válido

La ventana de congestión pasaría a 9 y como la ventana de transmisión es la menor entre la ventana de recepción y la ventana de congestión sería 9.

T3 – Se recibe un segmento con indicación de ventana de recepción de 20 MSS

La ventana de congestión serían 10, La ventana de recepción serían 20 y como la ventana de transmisión es la menor de las 2 sería 10.

T4 – Se produce un timeout

Al producirse un timeout la ventana de congestión se reiniciaría a 1 y se aplicaría otra vez el slow start, el threshold se reduce a la mitad que son 5. La ventana de recepción sigue siendo 20.

¿Por qué al hacer la llamada bind en un servidor siempre debemos especificar la dirección del socket local? ¿Por qué no es necesario especificar la dirección local cuando el bind se hace a través de un connect en un cliente?

Porque asocias una dirección de socket local y una de puerto BC. No es necesario connect porque este asigna a nuestro socket la dirección IP de nuestra máquina y un número de puerto libre.

¿Qué efecto tiene una llamada a la función connect sobre un socket UDP?

Establece una asociación entre cliente y servidor. Tras el connect se pueden enviar los datos sin identificar el destino, solo se aceptan datagramas en la dirección correcta.

¿Para qué sirve la llamada al sistema BIND?

Asigna la dirección local a un socket recién creado, también asigna una dirección que identifique al socket.

¿Para qué sirve la llamada al sistema LISTEN?

Pasa al socket a modo pasivo, dispuesto a encajar posiciones de connect.

-->Antes de ACCERT->después de BIND

-->solo para sock de tipo sock_stream(TCP)

La llamada al sistema ACCEPT la utilizan los servidores para esperar a que un cliente establezca conexión con ellos. ¿Cómo funciona internamente?

Cuando se invoca la llamada “accept”, bloquea el programa hasta que llegue una petición de conexión sobre el socket. Si se tienen que hacer peticiones encoladas (“listen”) intenta establecer una conexión con la primera. ¿El socket que se le pasa como argumento y el que devuelve en la llamada, tienen la misma dirección de socket?

No. El socket que se pasa como argumento no tiene definida una asociación, mientras que el nuevo socket que devuelve “accept” sí.

Si lo anterior es cierto, imagine un servidor cuyo master socket ha establecido 4 conexiones. ¿Cómo se arregla el interfaz de los sockets para entregar un segmento destinado a esa dirección de puerto común, es decir, a qué socket se la envía?

Se arreglaría usando un servidor concurrente, es decir, creará un nuevo proceso por cada conexión que se establezca, mientras que utiliza el socket maestro para recibir nuevas peticiones de conexión.

¿Se puede usar READ y WRITE sobre un socket de tipo SOCK_DGRAM? Justificar.

No. Read y Write se utilizan para TCP, para UDP utilizaremos sendto y recvfrom. UDP->SOCK_DGRAM ; TCP->SOCK_STREAM.

¿Qué diferencia fundamental existe entre las llamadas close y shutdown? ¿Cuándo se utiliza shutdown en lugar de close?

La llamada “close” elimina el socket, mientras que la llamada “shutdown” no elimina el socket, sino que cierra streams. La llamada “close” se usa cuando se quiere eliminar el socket y todos los recursos asociados, mientras que la llamada “shutdown” realiza un cierre de conexión más detallado, que puede ser en un sentido o en ambos, y además no elimina el socket.

En un servidor, ¿es siempre obligatorio el usar la llamada BIND en su inicialización? ¿Y en un cliente? Justificar brevemente las respuestas.

En un servidor es totalmente necesario la llamada “bind” para indicar qué puerto va a usar. En el cliente no es necesario porque el servidor es quien indica qué puerto usa.

Cita tres circunstancias en las cuales sea preferible un servidor sin conexión a un servidor con conexión.

Cuando se requieren difusiones

Cuando la sobrecarga computacional sea excesiva

Cuando no se requiera alta fiabilidad

¿Cómo puede B diferenciar las dos conexiones, si ambas son gestionadas a través de un mismo puerto (el 37)?

Porque cada conexión TCP tiene 4 parámetros principales que le definen en dirección IP origen-destino.

¿Cuál es el número máximo de sockets abiertos que puede tener un servidor concurrente TCP si admite un máximo de 10 clientes simultáneos? ¿Y un servidor concurrente UDP? Justifica las respuestas.

11 sockets en el primer caso: 1 socket maestro y 10 sockets esclavos que se comunican con los clientes. Un servidor concurrente UDP sólo tiene un socket abierto.

¿Cuál es la finalidad de incluir la llamada del sistema select en un servidor multiservicio? ¿Es necesario también su uso en un servidor multiprotocolo? Justifica la respuesta.

La llamada “select” analiza la actividad de los descriptors (sockets) que le indiquemos (la misma que en multiprotocolo).

Sí. Necesitamos la llamada “select” para poder seleccionar el socket que queramos y poder analizarlo.

¿En qué consiste la definición del estándar NVT?

Debido a que la comunicación entre dos terminales remotos puede causar errores ya que sus sistemas operativos aceptan combinación de caracteres diferentes, NVT ofrece una solución. El cliente TELNET traduce sus datos u órdenes a un formato NVT, que los entrega a la red. Una vez llegan al servidor, este los decodifica a su propio formato.

Existiría algún problema si utilizamos un cliente de telnet para acceder a cualquier servicio? (SMTP, POP3, etc.). Ej.: $telnet obelix 25.

Si esto ocurre el cliente debe detectarla y añadir un punto más, pero el servidor al recibirlo sabe quitar el punto añadido para no modificar el mensaje.

Supongamos que queremos enviar un correo electrónico, usando el mecanismo de entrega directa, a [email protected]. Para ello dispongo de un cliente TELNET. Describa los pasos que debe hacer para enviar un correo a dicho usuario. Nota: No tenemos cuenta en ningún servidor de correo accesible.

El primer paso es conocer la dirección IP de la máquina MTA más cercana. Esto se puede hacer mediante una petición DNS.

El paso siguiente es conectarse utilizando TELNET como cliente SMTP:

Nslookup smtp

telnet smtp.servidor.es

HELLO local.domain.com

MAIL FROM:<>(destinatario)

RCPT TO:[email protected]

DATA

*

QUIT

¿Cómo sabe un cliente SMTP que ha terminado la respuesta del servidor?

Cuando el servidor habla al cliente STMP con un mensaje que tiene el siguiente formato: (3 números, espacio en blanco, información). Si el servidor responde con un mensaje multilínea, le indicará al cliente que no ha acabado su mensaje de la siguiente manera: (3 números, guión, información). La última línea de este mensaje multilínea sigue el formato indicado anteriormente (3 números, espacio en blanco, información)

¿Por qué se emplean dos protocolos para el correo (SMTP y POP3) en vez de uno solo?

SMTP se utiliza para la tarea de enviar el correo, mientras que POP3 se utiliza para leer el correo y descargarlo en nuestro ordenador.

3 fases:

àAutorización

àTransferencia

àActualización

Comando telnet localhost39

a) ¿Para qué se ha usado el comando?

Para acceder al servidor de TIME cuyo puerto BC=37.

b) ¿Qué significado tienen los caracteres “È*ý”?

Es la información del servicio time.

c) ¿Qué comando hubieras invocado en lugar de este?

Servicio PAYTIME que devuelve una cadena de caracteres.

¿Por qué en muchas aplicaciones se usa el conjunto de caracteres US-ASCII-7 para formar los mensajes que intercambian un cliente y su servidor?

Porque es el lenguaje que entiende NVT y permite la transferencia entre terminales pese a que cada uno tenga otro conjunto de caracteres. Es un lenguaje común que facilita la comunicación entre terminales.

El servidor POP3 realiza su servicio en tres fases. ¿Cuáles son? ¿Qué comandos intervienen en cada una de ellas?

àAutorización: identifica al usuario. Comandos que intervienen: USER, PASS

àTransferencia: manipulación del contenido del buzón del usuario. Comandos que intervienen: LIST, RETR, DELE, TOP

àActualización: las modificaciones se realizan cuando el usuario finaliza el servicio. Comandos que intervienen: RSET, QUIT

Entradas relacionadas: