Acceso Remoto Usando el TCP
Vicente González Ruiz
December 14, 2014
Contents
El TCP proporciona, junto al direccionamiento de procesos, control de flujo y
control de congestin. El direccionamiento de procesos es distinto al que se utiliza en
UDP. Cuando un segmento (nombre que recibe un paquete de datos en el contexto
del TCP) llega hasta un host, el SO utiliza:
(dir IP origen, puerto origen, dir IP destino, puerto destino)
para encontrar el proceso al que va dirigido dicho segmento.
El control del flujo permite que el receptor controle el volumen de datos que le
llega en cada momento. Esto se consigue simplemente indicando al emisor qu
cantidad de datos desea recibir en cada segmento.
El control de la congestin evita que la red se congestione por un exceso de trfico.
Cuando el emisor detecta la congestin, l reduce la tasa de transferencia de
datos con la esperanza de que los routers puedan sacar adelante el trabajo
atrasado (transmitir todos los datagramas IP que tienen almacenados en sus
colas).
1 El emisor
En esta seccin se muestra un ejemplo sencillo con un emisor de datos que emplea el
TCP. Los datos son ledos de la entrada estndar, enviados a la red, y escritos sobre la
salida estndar (para continuar el pipeline). El emisor acepta los siguientes
parmetros:
- El tamao del payload del segmento. El IP limita el tamao de un
datagrama IP a 64 Kbytes. Por tanto, el TCP tiene tambin este lmite.
Tamaos tpicos son 512 o 1024 bytes porque son suficientemente grandes
como para mantener pequeo el overhead producido por las cabeceras y
suficientemente pequeos como para evitar la fragmentacin producida por
el IPv4 cuando los datagramas atravienan redes con MTUs (Maximun
Transfer Unit) ms pequeos. Ntese adems que el proceso del control del flujo
puede hacer que el tamao de los segmentos sea diferente. Por tanto, este
parmetro no define necesariamente el tamao del payload de los segmentos.
- El host destino de los segmentos. Se puede usar el DNS.
- El puerto (proceso) destino de los segmentos. Tiene que ser un valor
comprendido entre 1 y 65535, aunque tpicamente ser superior al 1024 (los
primeros 1024 puertos se dedican a los servicios (procesos) “conocidos”).
- El Time-To-Live (TTL). Indica el nmero mximo de saltos (pasos por
router) que realizar el segmento. Este valor se utiliza para evitar que los
segmentos lleguen demasiado lejos, y en general, para evitar segmentos
eternos que estando mal enrrutados podran consumir ancho de banda en
Internet de forma innecesaria.
El programa send.c puede descargarse de
http://www.ace.ual.es/\~vruiz/redes_industriales/tcp_send.c y su cdigo
fuente es:
2 El receptor
El correspondiente receptor escucha en un puerto, a la espera de que lleguen los
datos. Cuando esto ocurre, los escribe sobre la salida estndar. El nico parmetro del
recpetor es:
- El puerto de escucha. Es el puerto usado por el receptor para establecer
las conexiones y recibir los datos.
En http://www.ace.ual.es/\~vruiz/redes_industriales/tcp_receive.c est
el cdigo del receptor:
Taller 1:
usuario@receiver:~$ ls tcp_receive.c
tcp_receive.c
usuario@receiver:~$ make tcp_receive
cc tcp_receive.c -o tcp_receive
usuario@receiver:~$ ./tcp_receive -H
Usage: tcp_receive [OPTION...]
-p listening_port
Receives data from the listening_port and copies the data to the stdout
usuario@receiver:~$ ./tcp_receive > file
./receive: listening port = "6666"
# Ahora el receptor est esperando a que le lleguen datos ...
usuario@sender:~$ ls tcp_send.c
tcp_send.c
usuario@sender:~$ make tcp_send
cc tcp_send.c -o tcp_send
usuario@sender:~$ ./tcp_send -H
Usage: tcp_send [OPTION...]
-s payload_size
-h receiver_host
-p receiver_port
-t TTL
Copies the stdin to the stdout and a TCP socket
usuario@sender:~$ ./tcp_send < tcp_send.c > /dev/null
Ejercicio 1: Verifique si se pueden solicitar transmisiones de
payloads cuya longitud sea superior a 64K bytes. ¿Es esto posible?
¿Qu tamaos tienen finalmente los segmentos que atraviesan la red?