Está en la página 1de 75

R

e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
1
Versin 28/02/11
Capa de transporte
TCP/IP
:: Redes ::
aplicacin
red
enlace
fsica
transporte

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
2
Introduccin
Protocolo de Datagramas de Usuario (UDP)
Protocolo de Control de Transporte (TCP)
Socets !SD
Ser"idores # Clientes para el ser"icio UPP$%
Contenidos

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
&
Introduccin
La capa de transporte es el
cora'n de toda la jerarqua de
protocolos.
!s la que realmente ofrece
servicios de valor a los usuarios
" aplicaciones.
capas
superiores
transporte
red
enlace
fsica

Pro"eedor
del servicio
de transporte
Usuario
del servicio
de transporte

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
(
Introduccin
La capa de transporte se encar#a de proveer:

$omunicaciones entre procesos.

%ecanismos de control de flu)o.

%ecanismos de control de errores.

!sta&lecimiento de cone'iones
La capa de transporte en (nternet ofrece dos tipos de servicios
a la capa de aplicaci)n:

*o orientados a cone'i)n +con ,D-.

/rientados a cone'i)n +con 0$-.



R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
*
Direccionamiento de procesos ++ puertos
La IP identifica una interfa1 de red de un ,ost.
,n puerto identifica un proceso en la m2quina.
!l puerto es un n3mero de 45 &its:

6 7 4.689: :;ien conocidos<

4.68= 7 =>.4?4: @e#istrados

=>4?8 7 5?-?9?: Din2micos


P1
red
enlace
fsica
P2 P& P(
La capa de red se encar#a de la comunicaci)n ,ost a
,ostA mientras que los protocolos de transporte reali1an
comunicaci)n proceso a proceso (multiple-acin)
entidades de transporte
+procesos.
transporte
La asi#naci)n oficial de puertos est2 disponi&le en:
http://www.iana.org/assignments/port-numbers
La asi#naci)n oficial de puertos est2 disponi&le en:
http://www.iana.org/assignments/port-numbers
Nota

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
.
Ser"icio /0 orientado a cone-in en la capa de transporte
,na aplicaci)n puede enviar paquetes de datosA
incorporando una direcci)n destino en cada paquete.
La aplicaci)n receptora los reci&ir2 como entidades
separadasA de modo que la informaci)n de&e manejarse
mensaje por mensaje.
!ste servicio resulta adecuado para aplicaciones que
de&en manejar muchos mensajes pequeBos " de tamaBo
acotado.

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
1
UDP (User Datagram Protocol)
!s un protocolo que ofrece un servicio no orientado a cone-in
*o #aranti1a la entre#a de mensajes
*o #aranti1a el orden ni evita la duplicidad de mensajes.
!l protocolo reali1a una multiple-acin del tr2fico (- para
que pueda ser manejado por varias aplicaciones
concurrentes. 0am&iCn hace un control de errores &2sico.
!l direccionamiento de procesosA en un mismo hostA se
reali1a por medio de un identificador de 45 &its llamado
puerto UDP.
RFC
768
RFC
768

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
2
cuerpo del mensaje
UDP ++ Ca3ecera
checDsum +opcional.
lon#itud del mensaje ,D-
+completo.
puerto ,D- ori#en
+opcional.
puerto ,D- destino
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
1
0 1 2 3 4 5 6 7 8 9
2
0 1
3 0
Ei se indica el puerto fuente es para que el receptor pueda
responder a la aplicaci)n emisoraA si lo necesita.
!l cDsum (- s)lo afecta a la ca&ecera (-. Ei se quiere
confia&ilidad so&re los datos de&e usarse el cDsum ,D-.

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
4
Ser"icio orientado a cone-in en la capa de transporte
Ee ofrece a la aplicaci)n el interfa1 de una cone-in
esta3lecida e-tremo a e-tremo.
Las aplicaciones disponen de uno a varios circuitos
"irtuales en los que la informaci)n transmitida se maneja
como un
flu)o continuo de datos
flu)o continuo de datos.
Lo suelen utili1ar aplicaciones que necesitan intercam&io
de datos de tamaBos indeterminadosA sin tener que
preocuparse de su&dividirlos en mensajes.

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
15
TCP (Transmission Control Protocol)
!s un protocolo que ofrece un servicio orientado a cone-in.
Faranti1a la inte#ridad del flujo de datos.
Ee encar#aA de forma transparenteA de control de flujo "
con#esti)nA pCrdidaA repetici)n " orden de paquetesA etc.
Ee encar#a de la multiple-acin del tr2fico (- para que pueda
ser manejado por varios aplicaciones concurrentes
!l direccionamiento de procesos se reali1a por medio de un
identificador de 45 &its llamado puerto TCP.
La unidad de datos se denomina: segmento
RFC
793
1122
RFC
793
1122

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
11
TCP
Las cone'iones 0$- son full duplex " punto a punto.
0$- no soporta multicast ni difusi)n.
$ada dato de la car#a de un se#mento 0$- tiene su propio nG de
secuencia de 98 &its.
,tili1a un sistema de control de flujo de ventana desli1ante

Los mecanismos de confirmaci)n de recepci)n " del control de


la ventana son independientes.
La tasa de salida se controla mediante la ventana con#esti)nA la
ventana de recepci)n " el um&ral.

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
12
TCP ++ Ca3ecera
puerto 0$- ori#en puerto 0$- destino
cuerpo del mensaje
n3mero de secuencia
n3mero de acuse de reci&o
offset reservado
,
@
F
H
$
I
-
E
J
@
E
0
E
K
*
L
(
*
ventana
checDsum puntero ur#ente
opciones relleno
n6mero de secuencia+ !l n3mero de secuencia del primer &"te del se#mento. Ei
EK* est2 activoA indica el n3mero de secuencia inicial +n.. K el primer &"te ser2 nM4
acuse de reci3o+ Ei H$I est2 activoA indica el n3mero de secuencia del
si#uiente &"te que espera reci&ir.
0 1 2 3 4 5 6 7 8 9
0
0 1 2 3 4 5 6 7 8 9
1
0 1 2 3 4 5 6 7 8 9
2
0 1
3

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
1&
TCP ++ Ca3ecera
offset+ tamaBo de la ca&ecera 0$- +en pala&ras de = &"tes.. (ndica donde comien1an la
car#a del se#mento.
U%7+ activa el puntero ur#ente
8C9+ activa el acuse de reci&o
PS:+ indica que los datos entre#arse inmediatamente.
%ST+ sirve para recha1ar un intento de cone'i)n o resetear una cone'i)n activa.
S;/+ Ee usa para el esta&lecimiento de cone'iones. Nunto al &it H$I sirve para el inicio
de conexin de 3 vas.
<I/+ se utili1a para finali1ar cone'iones. -uede ser unidireccional o &idireccional.
"entana+ Ee usan en los se#mentos H$IA indica cuantos &"tes est2 dispuesto a aceptar el
receptor.
puntero urgente+ Ei ,@F est2 activoA es el puntero al primer &"te ur#ente

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
1(
TCP ++ 0pciones
1= <in de opciones
2= /op
&= Tama>o m?-imo de segmento= (ndicado por el receptor durante la
cone'i)n. Ee conoce como %EE (Maximum Segment Size)
(= $scala de "entana= (ndica que se va a usar una ventana de 98 &its
en lu#ar de 45. Ee ne#ocia en la cone'i)n
*= S8C9 permitido= @econocimiento selectivo activado
.= S8C9= @econocimiento de se#mentos concretos
1= @arca de tiempo=

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
1*
TCP ++ Ser"icio orientado a flu)o
!n una cone'i)n 0$- los datos no se a#rupan en
unidades independientes como en ,D-.
!n 0$- el proceso emisor produce el flujo de &"tes " el
receptor lo consume.

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
1.
proceso
receptor
TCP ++ !uffers de en"o # recepcin
Dado que el emisor no emite datos a la misma velocidad que
el receptor los consume es necesario utili1ar :&uffers<.
proceso
emisor
vaco
por enviar
enviadoA no confirmado
reci&idoA no procesado
Los datos no se envan &"te a
&"te sino en #rupos llamados
segmentosA que pueden ser
de tamaBo ar&itrario
Los datos no se envan &"te a
&"te sino en #rupos llamados
segmentosA que pueden ser
de tamaBo ar&itrario
Nota
&uffer de envo
&uffer de recepci)n

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
11
TCP ++ /umeracin de 3#tes
Los n3meros de secuencia de 0$- identifican cada &"te de la
cone'i)n. 0$- no numera los se#mentos.

sequence num&er

acDnowled#ement num&er
$ada e'tremo utili1a una numeraci)n independiente.
!l primer n3mero de secuencia es aleatorioA no tiene porquC ser 6.
!stos n3meros de secuencia se utili1an en los mecanismos de
control de flujo " errores.

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
12
TCP ++ /umeracin de 3#tes
/6meros de secuencia+
!l valor de este campo de la ca&ecera 0$- corresponde al
primer 3#te de la car#a del se#mento.
/6meros de acuse de reci3o (reconocimiento)+
!l valor del campo 0$- indica cual es el n3mero de secuencia
del siguiente 3#te que este e'tremo espera reci&ir.

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
14
TCP ++ Control de flu)o
0$- utili1a un protocolo de ventana desli1ante.
Ventana de recepci)n:

Eu tamaBo indica cu2ntos &"tes ca&en todava en el &uffer de recepci)n.


-uede cam&iar durante la cone'i)n.
Ventana de envo:

(ndica AuB 3#tes del &uffer de envo se pueden enviar en cada momento sin
tener que esperar una confirmaci)n.
&uffer de envo
8O 88 84 86 85 8? 8= 89
proceso
emisor
"entana de en"o
La ventana de envo no
de&e ser ma"or que la
de recepci)n
La ventana de envo no
de&e ser ma"or que la
de recepci)n
Nota

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
25
TCP ++ Deslizamiento de la "entana
-artiendo del estado anteriorA se reci&e un se#mento con los
si#uientes datos:

acuse de reci&o: 88

tamaBo de ventana: 5
!l &uffer de envo queda:
&uffer de envo
8O 88 85 8? 8= 89
proceso
emisor
"entana de en"o
8> 8P

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
21
TCP ++ 8umento de la "entana
-artiendo del estado anteriorA el emisor enva 9 &"tes Q89-8?R "
reci&e un se#mento con los si#uientes datos:

acuse de reci&o: 8=

tamaBo de ventana: P
!l &uffer de envo queda:
&uffer de envo
8O 8= 85 8?
proceso
emisor
"entana de en"o
8> 8P 94 96

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
22
TCP ++ %educcin de la "entana
-artiendo del estado anteriorA el emisor enva 8 &"tes Q85-8OR "
reci&e un se#mento con los si#uientes datos:

acuse de reci&o: 8P

tamaBo de ventana: ?
!l &uffer de envo queda:
&uffer de envo
96 8> 8P
proceso
emisor
"entana de en"o
94 98 9? 9= 99

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
2&
TCP ++ Cierre de la "entana
Ee produce cuando el receptor no est2 dispuesto a aceptar nada
de tr2fico. Ee reci&e un se#mento con los si#uientes datos:

acuse de reci&o: 8P

tamaBo de ventana: 6
!l &uffer de envo queda:
&uffer de envo
96 8> 8P
proceso
emisor
"entana de
en"o cerrada
8> 94 99 98 9? 9=

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
2(
TCP ++ Sndrome de la ventana tonta
/curre cuando cada acuse de reci3o anuncia una pequeBa cantidad
de espacio disponi&le " por tanto cada nuevo segmento es
peAue>oA desperdiciando recursos en la red " en los hosts.
-revenci)n:

$uando el receptor cierra la ventanaA de&e esperar a tener una


cantidad considera&le de espacio antes de volver a a&rirla.

!l emisor de&e CesperarD a tener una cantidad adecuada de


datos +clumpin#. antes de enviar un nuevo se#mento.

RFC
896
RFC
896

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
2*
TCP ++ Sndrome de la ventana tonta
8lgoritmo de /agle
Si se generan nuevos datos pero no se han reconocido los
anteriores, los nuevos se almacenan en el buffer de salida hasta que
alcancen el MSS !uando llegue un acuse de recibo se puede enviar
el contenido del buffer
if hay nuevos datos para enviar:
if el tamao de ventana y los datos disponibles >= MSS:
enviar un segmento completo de tamao de MSS ahora
else:
if hay datos sin confirmar en espera:
encolar los datos en el buffer hasta recibir un !"
else:
enviar los datos ahora

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
2.
TCP ++ Control de errores
0$- #aranti1a la entre#a de todo el flujo de datos:

manteniendo el orden de los datos

sin errores

sin partes ausentes o duplicadas


!l control de errores inclu"e detecci)n de se#mentos:

corruptos

fuera de orden

perdidos

duplicados
0am&iCn inclu"e los mecanismos de correcci)n una ve1 detectados
estos errores.

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
21
TCP ++ Control de errores
!l receptor de un se#mento comprue&a el c,ecsum:

Ei es correctoA enva al emisor un acuse de reci3o.

Ei es incorrectoA descarta el se#mento.


!l emisor inicia un tempori'ador al enviar cada se#mento

Ei no lle#a un acuse de reci&o antes de que el tempori1ador


e-pireA se reen"a el se#mento correspondiente

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
22
ac
+ 1
.5
1
TCP ++ Control de errores
segmento corrupto o perdido
emisor receptor
seq: 4864A 866;
4
seq: 4=64A 866;
8
seq: 4564A 866;
9
se#mento
corrupto
o perdido
t
i
m
e
r
t
i
m
e
r
t
i
m
e
r
timeout
seq: 4564A 866;
9
retransmisi)n
ac
+ 1
25
1
t
i
m
e
r

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
24
TCP ++ Control de errores
acuse de reci3o corrupto o perdido
emisor receptor
seq: 4864A 866;
4
seq: 4=64A 866;
8
t
i
m
e
r
t
i
m
e
r
t
i
m
e
r
ac
+ 1
25
1
ac
+ 1
.5
1
seq: 4564A 866;
9

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
&5
ac
+ 1
25
1
TCP ++ Control de errores
segmento duplicado
emisor receptor
seq: 4864A 866;
4
seq: 4=64A 866;
8
seq: 4564A 866;
9
t
i
m
e
r
t
i
m
e
r
t
i
m
e
r
timeout
seq: 4564A 866;
9
retransmisi)n
ac
+ 1
25
1
descartar
acuse perdido o lle#a
despuCs del timeout
t
i
m
e
r
ac
+ 1
.5
1

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
&1
TCP ++ Control de errores
segmento fuera de orden
emisor receptor
ac
+ 1
(5
1
ac
+ 1
25
1
seq: 4864A 866;
4
seq: 4=64A 866;
8
seq: 4564A 866;
9
t
i
m
e
r
t
i
m
e
r
t
i
m
e
r

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
&2
TCP ++ Tempori'adores
0$- utili1a = tempori1adores:
@etransmisi)n
-ersistencia
:Ieep alive<
Lin de cone'i)n

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
&&
TCP ++ Tempori'ador de retransmisin
!s el tempori1ador utili1ado para retransmitir se#mentos cuando no lle#a el
acuse de reci&o correspondiente.
!ste tempori1ador es diferente en cada cone'i)n " cam&ia durante una
misma cone'i)n. Ee recalcula cada ve1 que se reci&e un acuse de reci&o:
8 ' @00
!l @00 se puede calcular con:

la opci)n :marca de tiempo<

enviando un se#mento " midiendo el tiempo hasta el acuse


@00 S ' @00 previo M +4 - . ' @00 actual
Los acuses de reci&o de segmentos retransmitidos no se tienen en cuenta
en este c2lculo +Hl#oritmo de Iarn..

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
&(
TCP ++ Tempori'ador de Persistencia
$uando el emisor reci&e un mensaje de cierre de la "entana
queda en espera de un nuevo acuse indicando la apertura.
Ei ese acuse se pierdeA los dos e'tremos de la cone'i)n quedan
&loqueados.
-ara evitar estoA el emisor inicia un tempori1ador " cuando e'pira
enva un segmento especial de prue3a para que el receptor le
informe del estado de su ventana.
!l valor de este tempori1ador empie1a siendo i#ual al de
retransmisi)n pero se duplica cada ve1A hasta un m2'imo de 56s.

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
&*
TCP ++ Tempori'ador C9eep 8li"eD
!ste tempori1ador se utili1a para evitar que una cone'i)n quede
a&ierta indefinidamente.
!l servidor inicia el tempori1ador con un valor de 8 horas. $ada
ve1 que reci&e un se#mento del clienteA reinicia el tempori1ador
Ei el tempori1ador e'piraA el servidor enva una prue&a al cliente.
Ei despuCs de 46 prue&as enviadas cada O? sA el cliente no
contestaA el servidor cierra la cone'i)n.

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
&.
TCP ++ Tempori'ador de fin de cone-in
$uando se cierra una cone'i)nA Csta queda en un estado de
:lim&o< durante un periodo de tiempo dado por este tempori1ador.
Eu valor es normalmente el do&le del tiempo de vida de un
se#mento.
$uando el tempori1ador e'pira se finali1a realmente la cone'i)n "
se recicla el puerto asi#nado.

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
&1
TCP ++ Control de congestin
Ei la red descarta paquetes porque est2 con#estionada " los
emisores retransmiten esos paquetesA la con#esti)n se a#ravar2
a3n m2s.
0$- asume que la perdida de paquetes est2 causada siempre por
la con#esti)n.
De modo que el tamaBo de la ventana de emisi)n est2 dado por:

!l tamaBo de ventana permitido por el receptor.

!l tamaBo de la "entana de congestin.


ventana de envo = mnimo (ventana del receptor, ventana de congestin)

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
&2
TCP ++ Pre"encin de la congestin
8rranAue lento:

!n el arranqueA el tamaBo de la ventana de con#esti)n es %EE

-or cada segmento reconocido se incrementa el tamaBo de la ventana de


con#esti)n en %EE &"tes

!sto ocurre hasta que el tamaBo de la ventana de con#esti)n alcan1a la mitad del
tamaBo m2'imo de la ventana.
8umento aditi"o+

,na ve1 alcan1ado el um&ral anteriorA la ventana de con#esti)n aumenta en %EE


por cada acuse reci3idoA aunque el acuse corresponda a varios se#mentos.

!ste crecimiento contin3a hasta que el tamaBo de la ventana de con#esti)n


alcance el um3ralA cu"o valor es i#ual a la ventana de recepci)n.
0odo lo anterior slo es aplica&le si los acuses de reci&o lle#an
antes de que e'piren los tempori1adores correspondientes
0odo lo anterior slo es aplica&le si los acuses de reci&o lle#an
antes de que e'piren los tempori1adores correspondientes
Nota

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
&4
TCP ++ Pre"encin de la congestin
Disminucin multiplicati"a:

Ee aplica cuando e'pira un tempori1ador de retransmisi)nA aunque ello ocurra


durante el proceso de arranAue lento o el aumento aditi"o.

$onsiste en situar el um3ral a la mitad de la ventana de con#esti)n anterior "


comen1ar de nuevo con un arranAue lento.
um&ral
um&ral
timeout
t
a
m
a
B
o

d
e

v
e
n
t
a
n
a

d
e

c
o
n
#
e
s
t
i
)
n
se#mentos

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
(5
TCP ++ esta3lecimiento de cone-in
$ada e'tremo de&e o&tener permiso del otro e'tremo antes de comen1ar la
transmisi)n de datos. ,n e'tremo tiene un rol activo +cliente. " el otro pasivo
+servidor..
0riple :apret)n de manos<:
cliente servidor
seq
: =P
66
A acD: 4
8
64
seq: 4866A acD: -
EK*
EK
*
M H
$
I
seq: 4864A acD: =P64
H$I
4. !l cliente indica su (E* ("nitial
Sequence #umber) " otros
par2metros de cone'i)n como
el %EE
8. !l servidor confirmaA indica su
(E* " otros datos de cone'i)n
9. !l cliente confirma " puede
enviar datos en ese se#mento

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
(1
TCP ++ descone-in
$ualquiera de los e'tremos puede indicar al otro que "a no desea enviar
m2s datos en esa cone'i)n.
$uadruple :apret)n de manos<:
A B
seq
: O6
66
A acD: 8
?
64
seq: 8?66A acD: -
L(*
H$
I
seq: 8?64A acD: O668
H$I
4. H indica a ; que "a no le va a
enviar m2s datosA pero se#uir2
reci&iendo.
8. ; confirma que la
comunicaci)n H->; queda
cerrada. ; puede se#uir
enviando.
9. $uando ; termine indica a H
que "a no le va a enviar m2s
datos.
=. H confirma la petici)n de ;
seq
: O6
64
A acD: 8
?
64
L(*
M H
$
I

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
(2
+---------+ ---------\ active OPEN
| CLOSED | \ -----------
+---------+<---------\ \ create C!
| " \ \ #$% S&N
'a##ive OPEN | | CLOSE \ \
------------ | | ---------- \ \
create C! | | %e(ete C! \ \
) | \ \
+---------+ CLOSE | \
| L*SEN | ---------- | |
+---------+ %e(ete C! | |
rcv S&N | | SEND | |
----------- | | ------- | )
+---------+ #$% S&N+,C- . \ #$% S&N +---------+
| |<----------------- ------------------/| |
| S&N | rcv S&N | S&N |
| 0C)D |<-----------------------------------------------| SEN |
| | #$% ,C- | |
| |------------------ -------------------| |
+---------+ rcv ,C- 12 S&N \ . rcv S&N+,C- +---------+
| -------------- | | -----------
| 3 | | #$% ,C-
| ) )
| CLOSE +---------+
| ------- | ES,! |
| #$% 4*N +---------+
| CLOSE | | rcv 4*N
) ------- | | -------
+---------+ #$% 4*N . \ #$% ,C- +---------+
| 4*N |<----------------- ------------------/| CLOSE |
| 5,*-1 |------------------ | 5,* |
+---------+ rcv 4*N \ +---------+
| rcv ,C- 12 4*N ------- | CLOSE |
| -------------- #$% ,C- | ------- |
) 3 ) #$% 4*N )
+---------+ +---------+ +---------+
|4*N5,*-2| | CLOS*N6 | | L,S-,C-|
+---------+ +---------+ +---------+
| rcv ,C- 12 4*N | rcv ,C- 12 4*N |
| rcv 4*N -------------- | i7e18t92:SL -------------- |
| ------- 3 ) ------------ 3 )
\ #$% ,C- +---------+%e(ete C! +---------+
------------------------/|*:E 5,*|------------------/| CLOSED |
+---------+ +---------+
TCP ++ Cone-in/Descone-in TCP ++ Cone-in/Descone-in

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
(&
Socets TCP / UDP
Las aplicaciones que quieran manejar tr2fico de&en utili1ar una direcci)n
(- +para direccionar un host. " un puerto +para direccionar un proceso.
La tupla +(-A puerto. se denomina socet.
,na cone'i)n se identifica con un par de socDets: (socet1E socet2)
Los se#mentos 0$- " ,D- se encapsulan so&re data#ramas (-.
La ca&ecera (- indica la (-A la ca&ecera 0$- o ,D- indica el puerto.
ca&ecera
de trama
2rea de datos de la trama
terminador
de la trama
ca&ecera (-
2rea de datos (-
ca&ecera datos
Ee#mento 0$- o ,D-

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
((
,n socDet es un e'tremo en una cone'i)n de red.
Los socDets son el H-( que permite utili1ar los servicios de
la capa de transporte.
La interfa1 de socDets ori#inal era parte de ,ni' ;EDA por
lo que se les suele llamar socDets ;ED.
!n los sistemas ,ni' se implementan como llamadas al
sistemaA cu"o tratamiento es mu" similar al de los ficheros
convencionales.
Programacin con Socets !SD

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
(*
Socets ++ Tipos
$apas inferiores
$apas inferiores
(-
(-
0$-
0$-
,D-
,D-
Hplicaci)n
Hplicaci)n
Etream
socDets
Data#ram
socDets
:raw<
socDets
H parte de los socDets
S#$%M " &'$M es
ha&itual disponer de
otros tipos de socDets
como $( o )*+,
Los socDets $( suelen
requerir privile#ios
especiales.

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
(.
Socets ++ 0rdenamiento de 3#tes
Los computadores pueden optar por dos tipos de
ordenamiento: &i#-endian +%otorola. o little endian +(ntel.
0am&iCn es una caracterstica de los protocolos de red.
Los protocolos de la pila 0$-/(- usan &i#-endian.
Ee necesitan funciones para convertir el ordenamiento del
computador al de la red.

htons-. - host to networD short +45 &its.

htonl-. - host to networD lon# +98 &its.

ntohs-. - networD to host short

ntohl-. - networt to host lon#



R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
(1
Socets ++ Transformacin de direcciones
0am&iCn se dispone de funciones para transformar
direcciones (- en su representaci)n HE$(( utili1ando
n3meros decimales con puntos

inet/aton-. - Direcci)n en HE$(( a formato &inario

inet/ntoa-. - de formato &inario a direcci)n en HE$((



R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
(2
Socets
!L H-( de socDets ;ED al i#ual que todas las llamadas al
sistema ,ni' est2n implementadas como funciones $.
-or simplicidadA pero sin perdida de #eneralidadA nosotros
veremos la li&rera de socDets de -"thonA que no es m2s
que un $rapper de las llamadas al sistema $

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
(4
Clase Socet
!n -"thon los socDets son o&jetosA cu"o constructor es:
soc0et-familia1 tipo1 2proto3.

familia: 4/+*%#1 4/+*%#51 4/)*+,1 4/6!"%#1etc

tipo: S7!"/S#$%M1 S7!"/&'$M1 S7!"/$(

proto: !n caso de que el tipo dado permita varios protocolos.


!n el caso de (-v= se utili1a 4/+*%# con S7!"/&'$M para
,D- " S7!"/S#$%M para 0$-.
S7!"/$( permite construir paquetes directamente so&re el
nivel de enlace o tramas so&re el nivel fsico.

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
*5
Clase Socet
bind-address. - Vincula el socDet a una direcci)n.

address: !l formato depende de la familia de socDet. !n el caso de


HLT(*!0 es una tupla +hostA puerto..
connect-address.
Ei se utili1a E0@!H% conecta el socDet local al socDet remoto que est2
en la direcci)n indicada. Ei se utili1a DF@H% indica cual es el destino "
ori#en por defecto de los data#ramas.
listen-bac0log.
bac0log (ndica cuantos clientes como m2'imo quedar2n a la espera.
Las dem2s cone'iones ser2n recha1adas. E)lo tiene sentido en S#$%M

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
*1
Clase Socet
accept-. - Hcepta una nueva cone'i)n. E)lo E0@!H%.
Devuelve una tupla -conn1 address.:

conn: !s un socDet reciCn creado para materiali1ar la cone'i)n con


el cliente remoto.

address: La direcci)n del otro e'tremo de la cone'i)n +el cliente.


send-data1 2flags3. - !nva data al socDet remoto. Ei es un
socDet &'$M enva a la direcci)n indicada en el connect-.. Devuelve la
cantidad de &"tes reci&idos.
recv-si8e1 2flags3. - si8e es la cantidad de &"tes que se
desean leer. Devuelve los datos reci&idos.

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
*2
Clase Socet
sendto-data1 2flags31 address. - !nva data al socDet
indicado en address. E)lo se puede utili1ar con socDets &'$M.
recvfrom-si8e1 2flags3. - si8e es la cantidad de &"tes que se
desean leer. Devuelve una tupla -data1 address.:

data: Eon los datos reci&idos

address: !s la direcci)n del socDet que ha enviado el data#rama


E)lo tiene sentido para socDets &'$M.
shutdown-how. 9 -ermite cerrar una cone'i)n +S#$%M. de forma
unidireccional o &idireccional
close-. 9 $ierra la cone'i)n +si la ha". " li&era los recursos del
socDet

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
*&
Socets como fic,eros
!l H-( de socDets en $ tiene funciones read-. " write-.
completamente compati&les con las que se utili1an so&re ficheros.
!n -"thonA la clase socDet no dispone de esos mCtodosA ni se le pueden
aplicar directamente otros funciones como flush-..
Ein em&ar#oA dispone de dos mCtodos para o&tener el manejador de
fichero asociado al socDet.

fileno-. retorna el descriptor entero de fichero asociado al socDet.

ma0efile-. retorna un o&jeto de clase fichero asociado al socDet.


!l paquete socDet tam&iCn dispone de la funci)n fromfd-. que permite
o&tener un o&jeto socDet a partir de un manejador de fichero

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
*(
$sAuema cliente/ser"idor UDP
soc0et-.
bind-.
Servidor )&6
recvfrom-.
sendto-.
soc0et-.
recvfrom-.
sendto-.
procesamiento
close-.
!lientes )&6

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
**
Cliente UDP
:;/usr/bin/python
<)sage: =s >server> >port><
from sys import argv1 e?it
from soc0et import @
if len-argv. ;= A:
print //doc// = argv2B3
e?it-C.
soc0 = soc0et-4/+*%#1 S7!"/&'$M.
while C:
data = raw/input-.
if not data: brea0 # acaba con ''
soc0.sendto-data1 -argv2C31 int-argv2D3...
msg1 server = soc0.recvfrom-CBDE.
print <Fa respuesta es G=sG< = msg
soc0.close-.
Listado Completo

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
*.
Ser"idor UDP 3?sico (sncrono)
:;/usr/bin/python
<)sage: =s >port><
from sys import argv1 e?it
from soc0et import @
import time
H7I = C
def handle-soc01 msg1 client1 n.:
print G*ew reJuestG1 n1 client
time.sleep-H7I. # some job
soc0.sendto-msg.upper-.1client.
if len-argv. ;= D:
print //doc// = argv2B3
e?it-C.
soc0 = soc0et-4/+*%#1 S7!"/&'$M.
soc0.bind--GG1 int-argv2C3...
n = B
while C:
msg1 client = soc0.recvfrom-CBDE.
n K= C
handle-soc01 msg1 client1 n.
Listado Completo

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
*1
Ser"idor UDP ++ un proceso por peticin (I)
:;/usr/bin/python
<)sage: =s >port><
from sys import argv1 e?it
import soc0et
import os1 time
M,/!L+F&$%* = EB
H7I = C
def handle-soc01 msg1 client1 n.:
print G*ew reJuestG1 n1 client
time.sleep-H7I. # some job
soc0.sendto-msg.upper-.1client.
def collect/children-children.:
while children:
if len-children. > M,/!L+F&$%*:
opts = os.(*7L*'
else:
opts = B
pid1 status = os.waitpid-B1 opts.
if not pid: brea0
children.remove-pid.
if len-argv. ;= D:
print //doc// = argv2B3
e?it-C.
soc0= soc0et.soc0et-soc0et.4/+*%#1
soc0et.S7!"/&'$M.
soc0.bind--GG1 int-argv2C3...
n = B
children = 23
while C:
msg1 client = soc0.recvfrom-CBDE.
n K= C
collect/children-children.
pid = os.for0-.
if pid:
children.append-pid.
else:
handle-soc01 msg1 client1 n.
e?it-.
Listado Completo

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
*2
Ser"idor UDP ++ un ,ilo por peticin
:;/usr/bin/python
<)sage: =s >port><
from sys import argv1 e?it
from soc0et import @
import thread1 threading1 time
H7I = C
def handle-soc01 msg1 client1 n.:
print G*ew reJuestG1 n1 client
time.sleep-H7I.# some job
loc0.acJuire-.
try:
soc0.sendto-msg.upper-.1 client.
e?cept error1 e:
print e1 client
loc0.release-.
if len-argv. ;= D:
print //doc// = argv2B3
e?it-C.
soc0 = soc0et-4/+*%#1 S7!"/&'$M.
soc0.bind--GG1 int-argv2C3...
loc0 = threading.Foc0-.
n = B
while C:
msg1 client = soc0.recvfrom-CBDE.
n K= C
thread.start/new/thread-handle1
-soc01 msg1 client1 n..
Listado Completo

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
*4
Ser"idor UDP ++ SocetSer"er=UDPSer"er
:;/usr/bin/python
<)sage: =s >port><
from sys import argv1 e?it
from Soc0etServer import @
import time
H7I = C
class )pperLandler-&atagram$eJuestLandler.:
def handle-self.:
print G*ew reJuest:G1 self.client/address
msg = self.rfile.read-..upper-.
time.sleep-H7I.
self.wfile.write-msg.
if len-argv. ;= D:
print //doc// = argv2B3
else:
)&6Server--GG1 int-argv2C3..1 )pperLandler..serve/forever-.
Listado Completo

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
.5
Ser"idor UDP ++ SocetSer"er=<oringUDPSer"er
(Un proceso por peticin)
:;/usr/bin/python
<)sage: =s >port><
from sys import argv1 e?it
from Soc0etServer import @
import time
H7I = C
class )pperLandler-&atagram$eJuestLandler.:
def handle-self.:
print G*ew reJuest:G1 self.client/address
msg = self.rfile.read-..upper-.
time.sleep-H7I.
self.wfile.write-msg.
if len-argv. ;= D:
print //doc// = argv2B3
else:
4or0ing)&6Server--GG1 int-argv2C3..1 )pperLandler..serve/forever-.
Listado Completo

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
.1
$sAuema cliente/ser"idor TCP
soc0et-.
Servidor #!6 6adre
!liente #!6
bind-.
listen-.
accept-.
Servidor #!6 LiMo
recv-.
send-.
trabaMo
close-.
soc0et-.
connect-.
send-.
recv-.
close-.
$reaci)n de un
procesoA hilo o
#esti)n asncrona

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
.2
Cliente TCP
:;/usr/bin/python
<)sage: =s >server> >port><
from sys import argv1 e?it
from soc0et import @
if len-argv. ;= A:
print //doc// = argv2B3
e?it-C.
Listado Completo
soc0 = soc0et-4/+*%#1 S7!"/S#$%M.
soc0.connect--argv2C31int-argv2D3...
while C:
data = raw/input-.
if not data: brea0 # acaba con ''
sent = soc0.sendall-data.
msg = GG
while len-msg. > sent:
msg K= soc0.recv-AD.
print <Fa respuesta es G=sG< = msg
soc0.close-.

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
.&
Ser"idor TCP 3?sico
:;/usr/bin/python
<)sage: =s >port><
from sys import argv1 e?it
from soc0et import @
import time
H7I = C
def handle-soc01 client.:
print G!lient connected:G1 client
while C:
data = soc0.recv-AD.
if not data: brea0
time.sleep-H7I. # some job
soc0.sendall-data.upper-..
soc0.close-.
Listado Completo
if len-argv. ;= D:
print //doc// = argv2B3
e?it-C.
soc0 = soc0et-4/+*%#1 S7!"/S#$%M.
soc0.setsoc0opt-S7F/S7!"%#1 S7/$%)S%&&$1 C.
soc0.bind--GG1 int-argv2C3...
soc0.listen-N.
while C:
child/soc01 client = soc0.accept-.
handle-child/soc01 client.

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
.(
Ser"idor TCP ++ un proceso por cone-in (I)
:;/usr/bin/python
<)sage: =s >port><
from sys import argv1 e?it
import soc0et
import os1 time
M,/!L+F&$%* = EB
H7I = C
def handle-soc01 client1 n.:
print G!lient connectedG1 n1 client
while C:
data = soc0.recv-AD.
if not data: brea0
time.sleep-H7I. # some job
soc0.sendall-data.upper-..
soc0.close-.
def collect/children-children.:
while children:
if len-children. > M,/!L+F&$%*:
opts = os.(*7L*'
else:
opts = B
pid1 status = os.waitpid-B1 opts.
if not pid: brea0
children.remove-pid.
Listado Completo

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
.*
Ser"idor TCP ++ un proceso por cone-in (II)
if len-argv. ;= D:
print //doc// = argv2B3
e?it-C.
soc0 = soc0et.soc0et-soc0et.4/+*%#1
soc0et.S7!"/S#$%M.
soc0.bind--GG1 int-argv2C3...
soc0.listen-N.
n = B
children = 23
while C:
child/soc01 client = soc0.accept-.
n K= C
collect/children-children.
pid = os.for0-.
if pid:
children.append-pid.
else:
handle-child/soc01 client1 n.
e?it-.

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
..
Ser"idor TCP ++ un ,ilo por cone-in
#!/usr/bin/python
<)sage: =s >port><
from sys import argv1 e?it
from soc0et import @
import thread1 time
H7I = C
def handle-soc01 client1 n.:
print G!lient connectedG1 n1 client
while C:
data = soc0.recv-AD.
if not data: brea0
time.sleep-H7I. # some job
soc0.sendall-data.upper-..
soc0.close-.
if len-argv. ;= D:
print //doc// = argv2B3
e?it-C.
soc0= soc0et-4/+*%#1 S7!"/S#$%M.
soc0.bind--GG1 int-argv2C3...
soc0.listen-N.
n = B
while C:
child/soc01 client = soc0.accept-.
n K= C
thread.start/new/thread-handle1
-child/soc01 client1 n..
Listado Completo

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
.1
Ser"idor TCP asncrono ++ select-.
:;/usr/bin/python
<)sage: =s >port><
from sys import argv1 e?it
from soc0et import @
import select1 time
H7I = C
def !hildLandler-s.:
data = s.recv-AD.
if not data:
s.close-.
soc0s.remove-s.
return
time.sleep-H7I. # some job
s.sendall-data.upper-..
def 6arentLandler-s.:
child/soc01 client = s.accept-.
soc0s.append-child/soc0.
print G!lient connected:G1 client
ss = soc0et-4/+*%#1 S7!"/S#$%M.
ss.bind--GG1 int-argv2C3...
ss.listen-N.
soc0s = 2ss3
while C:
rd = select.select-soc0s1 231 23.2B3
for i in rd:
if i == ss:
6arentLandler-i.
else:
!hildLandler-i.
Listado Completo

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
.2
Ser"idor TCP ++ SocetSer"er=TCPSer"er
:;/usr/bin/python
<)sage: =s >port><
from sys import argv1 e?it
from Soc0etServer import @
import time
H7I = C
class )pperLandler-Stream$eJuestLandler.:
def handle-self.:
print G!lient connected:G1 self.client/address
while C:
data = soc0.recv-AD.
if not data: brea0
time.sleep-H7I. # some job
soc0.sendall-data.upper-..
self.reJuest.close-.
if len-argv. ;= D:
print //doc// = argv2B3
else:
server = #!6Server--GG1int-argv2C3..1 )pperLandler.
server.serve/forever-.
Listado Completo

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
.4
Ser"idor TCP ++ SocetSer"er=<oringTCPSer"er
(un proceso por cone-in)
:;/usr/bin/python
<)sage: =s >port><
from sys import argv1 e?it
from Soc0etServer import @
import time
H7I = C
class )pperLandler-Stream$eJuestLandler.:
def handle-self.:
print G!lient connected:G1 self.client/address
while C:
data = soc0.recv-AD.
if not data: brea0
time.sleep-H7I. # some job
soc0.sendall-data.upper-..
self.reJuest.close-.
if len-argv. ;= D:
print //doc// = argv2B3
else:
server = 4or0ing#!6Server--GG1int-argv2C3..1 )pperLandler.
server.serve/forever-.
Listado Completo

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
15
Ser"idor TCP ++ SocetSer"er=T,readingTCPSer"er
(un ,ilo por cone-in)
:;/usr/bin/python
<)sage: =s >port><
from sys import argv1 e?it
from Soc0etServer import @
import time
H7I = C
class )pperLandler-Stream$eJuestLandler.:
def handle-self.:
print G!lient connected:G1 self.client/address
while C:
data = soc0.recv-AD.
if not data: brea0
time.sleep-H7I. # some job
soc0.sendall-data.upper-..
self.reJuest.close-.
if len-argv. ;= D:
print //doc// = argv2B3
else:
server = #hreading#!6Server--GG1int-argv2C3..1 )pperLandler.
server.serve/forever-.
Listado Completo

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
11
Ser"idor TCP ++ PaAuete 8s#ncore
class !hildLandler-asyncore.dispatcher.:
def //init//-self1 soc0.:
asyncore.dispatcher.//init//-self1 soc0.
self.buffer = GG
def handle/read-self.:
self.buffer K= self.recv-AD.
time.sleep-H7I. # some job
def writable-self.:
return -len-self.buffer. > B.
def handle/write-self.:
sent = self.send-self.buffer.upper-..
self.buffer = self.buffer2sent:3
def handle/close-self.:
self.close-.
:;/usr/bin/python
<)sage: =s >port><
from sys import argv1 e?it
from soc0et import @
import asyncore1 time
H7I = C
Listado Completo

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
12
Ser"idor TCP ++ PaAuete 8s#ncore (II)
class 6arentLandler-asyncore.dispatcher.:
def //init//-self.:
asyncore.dispatcher.//init//-self.
self.create/soc0et-4/+*%#1 S7!"/S#$%M.
self.set/reuse/addr-.
self.bind--GG1 int-argv2C3...
self.listen-N.
def handle/accept-self.:
child/soc01 client = self.accept-.
print G!lient connectedG1 client
!hildLandler-child/soc0.
6arentLandler-.
asyncore.loop-.

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
1&
,n servidor de procesos +o superservidor. es un pro#rama
especial que escucha en muchos puertos a la ve1 +0$- "
,D-. para servicios de uso espor2dico.
$uando ha" una petici)n o cone'i)n a al#uno de esos
puertosA el superservidor instancia un pro#rama concreto
para manejar ese servicio.
!n F*,/Linu' se llama inetd " se confi#ura por medio
del fichero /etc/inetd.conf
Ser"idor de procesos

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
1(
Ser"idor de procesos
,tili1ando -"thon est2ndarA escri&e un servidor de procesos
que implemente internamente servidores de echoA
daytimeA time " discard tanto 0$- como ,D-. K que
pueda utili1ar servidores e'ternos est2ndar de ftpA tftp "
telnet.
Ejercicio

R
e
d
e
s

:

:

T
r
a
n
s
p
o
r
t
e
David Villa <David.Villa@uclm.es> :: http://www.inf-cr.uclm.es/www/dvilla/
1*
%eferencias
Ee recomienda repasar " profundi1ar el contenido de este tema utili1ando +al
menos. la si#uiente &i&lio#rafa &2sica:
H.E. @edes de computadores. -earson !ducaci)nA $uarta edici)nA 8669.

$aptulos 5. Hpartados 4 - ?.46


$(E$/ E"stems. (nc. Fua del primer aBo. $$*H 4 " 8. $isco -ressA 8669.

$aptulos > " 4>


%aterial e-learnin# $(E$/ $$*H !'ploration

%)dulo =
0odos los listados de este tema est2n disponi&les para descar#a en la direcci)n:
https://arco.esi.uclm.es/svn/public/misc/python/networ0ing/upper/
Nota

También podría gustarte