INTRODUÇÃO ÀS REDES DE COMPUTADORES CAMADA DE TRANSPORTE Teresa Vazão 2
INTRODUÇÃO Fiabilidade na net.. 1973 Vincent Cerf and Robert Kahn: Inventores do protocolo TCP Vincent Cerf é o Chief Internet- Evangelist, na Google! Rpbert Khan, Bell- Labs, MIT e DARPA 3
SUMARIO Camada de transporte Função da camada de transporte Protocolo UDP Protocolo TCP 4
CAMADA DE TRANSPORTE Transporte Funções da camada de transporte Protocolo UDP Protocolo TCP Transmission Control Protocol Interacção bidireccional entre Sistemas Terminais Protocolo de transporte complexo 5
Protocolo TCP Gestão das ligações Estabelecimento da ligação Idenaficação dos Sistemas Terminais envolvidos na comunicação Negociação de parâmetros Reserva de recursos Transferencia de dados Fiavel Controlo de fluxo Controlo de congestão Terminação da ligação Libertação de recursos 6
Gestão das ligações processo geral de estabelecimento 1. Pedido de ligação: ST A Connec0on request Cliente envia um pedido de ligação para o servidor 1 ConnecLon- request 2. Ligação concedida Connec0on granted Servidor atribui a ligação ao cliente 3. Ligação confirmada 3 ConnecLon granted 2 Connec0on confirmed ConnecLon confirned Cliente confirma a ligação atribuída pelo servidor 4 7
Gestão das ligações Lpos de segmentos 1. Pedido de ligação: Connec0on request Segmento SYN =1 (S=1, A=0) Não tem campo de dados 2. Ligação concedida Connec0on granted Segmento SYNACK =1, (S=1, A=1) Não tem campo de dados 3. Ligação confirmada Connec0on confirmed Segmento SYN =0, (S=0, A=1) Pode ter campo de dados 1 3 ST A Connecaon- request SYN=1, ACK=0 Connecaon granted SYN=1, ACK=1 Connecaon confirned SYN=0, ACK=1 2 4 8
Gestão das ligações números de sequência 1. Pedido de ligação: Connec0on request: SYN=1 Segmento SYN =1 (S=1, A=0) Nº de seq. original: client_isn 2. Ligação concedida Connec0on granted: SYNACK=1 AN = client_isn+1 SN. original: server_isn 3. Ligação confirmada Connec0on confirmed: SYN=0 AN = server_isn+1 Reserva buffers e variáveis 1 3 ST A Connecaon- request SYN=1, ACK=0 SN: client_isn Connecaon granted SYN=1, ACK=1 AN=client_isn+1 SN=server_isn Connecaon confirned SYN=0, ACK=1 AN=server_isn+1 2 4 9
Gestão das ligações processo geral de terminação 1. Pedido de terminação (cliente) Cliente envia um pedido de fim de ligação: FIN=1 Cancela recursos 2. Terminação confirmada Servidor confirma o fim da ligação: FIN=1, ACK=1 3. Pedido de terminação (servdior) Servidor envia um pedido de fim de ligação: FIN=1 Cancela recursos 4. Terminação confirmada (cliente) Clientes confirma o fim da ligação: FIN=1, ACK=1 Espera um tempo até terminar Tempo de espera Fecho 1 4 ST A FIN ACK FIN ACK 2 3 Fecho 10
Protocolo TCP Gestão dos temporizadores O processo de retransmissão está muito sujeito ao valor do temporizador Valor correcto depende: Estado da rede Distância entre o emissor e o receptor Caminho usado na comunicação Ajustar dinamicamente em função do estado da rede 11
Mecanismo de fiabilidade: gestão do temporizador RTO: Retransmission Time Out Tempo que o receptor espera antes de retransmiar um segmento Curto Retransmissão desnecessária Longo Reacção lenta à perda de segmentos T1 = ameout 1 3 ST A 8 Bytes (dados), SN=92 20 Bytes (dados), SN=100 AN=100 8 Bytes (dados), SN=92 AN=120 2 ST B T2 RTO = RTT + Δ 4 5 AN=120 12
Mecanismo de fiabilidade: gestão do temporizador RTT: Round- Trip- Time Tempo desde o envio dum segmento até à recepção do ACK respecavo Varia significaavamente ao longo do tempo Média ponderada das úlamas medidas T1 = ameout 1 3 ST A 8 Bytes (dados), SN=92 20 Bytes (dados), SN=100 AN=100 8 Bytes (dados), SN=92 AN=120 2 ST B T2 avgrtt(k+1)=α RTT(k+1) + (1- α) avgrtt(k) 4 5 AN=120 13
Mecanismo de fiabilidade: gestão do temporizador RTT: Round- Trip- Time - exemplo α=0.5 avgrtt(1) = 0.5xRTT(1) RTT: gaia.cs.umass.edu to fantasia.eurecom.fr 350 avgrtt (2) = 0.5xRTT(2) + 0.5xavgRTT(1) = 0.5xRTT(2) + 0.5 2 xrtt(1) avgrtt (3) = 0.5xRTT(3) + 0.5xavgRTT(2) = 0.5xRTT(3) + 0.5 2 xrtt(2) + 0.5 3 xrtt(1) RTT (milliseconds) 300 250 200 avgrtt (4) = 0.5xRTT(4) + 0.5xavgRTT(3) = 0.5xRTT(4) + 0.5 2 xrtt(3) + 0.5 3 xrtt(2)+0,5 4 xrtt(1) 150 100 1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106 time (seconnds) avgrtt (5) = 0.5xRTT(5) + 0.5xavgRTT(4) = 0.5xRTT(5) + 0.5 2 xrtt(4) + 0.5 3 xrtt(3)+0,5 4 xrtt(2) +0,5 5 xrtt(1) SampleRTT Estimated RTT 14
Mecanismo de fiabilidade: gestão do temporizador Cálculo do RTO tem em consideração a variancia do RTT devrtt(k+1)=(1- β) devrtt(k)+β RTT(k+1)- avgrtt(k) Finalmente: RTO(k+1)=avgRTT(k+1)+4 devrtt(k+1) Valores recomendados: α=0.125, β=0.25 15
Protocolo TCP Programação com sockets Propriedades gerais Interface de sockets para acesso ao sistema operaavo Sockets do domínio Internet: AF_INET Sockets do apo stream: SOCK_STREAM Primiavas simples: accept, listen, sendto, recvfrom 16
CAMADA DE TRANSPORTE protocolo UDP Programação com sockets: funcionalidades Efectua Endereçamento Detecção de erros Recuperação de erros Sequenciação Controlo de fluxo Controlo de congestão 17
CAMADA DE TRANSPORTE protocolo UDP Programação com sockets: exemplo Cliente (PC) tdp- client.py Servidor (VM- Ubuntu) tdp- server.py IP: 192.168.56.1 Porto: x IP: 192.168.56.101 Porto: 5005 Sonda: captura na interface192.168.56.1 Filtro: ip.addr==192.168.56.101 && udp.port==7007 Sonda: captura na interface192.168.56.101 Filtro: ip.addr==192.168.56.1 && udp.port==7007 18
CAMADA DE TRANSPORTE protocolo UDP Programação com sockets: exemplo # tcp- client.py 1. import socket 2. ClientMsg = Hello World! 3. BUFFER_SIZE=1024 4. ClientSock=socket.socket(socket.AF_INET, socket.sock_stream) 5. ClientSock.connect (( 192.168.56.101, 7007)) 6. ClientSock.send(ClientMsg) 7. print Message to server:, ClientMsg 8. ServerMessage= ClientSock.recv (BUFFER_SIZE) 9. print Message from server:, ServerMsg 10. ClientSock.close () 19
CAMADA DE TRANSPORTE protocolo UDP Programação com sockets: exemplo # tcp- server.py 1. import socket 2. ServerMsg = Nice to meet you :)! 3. BUFFER_SIZE=20 # usual e 1024, mas queremos respostas rapidas! 4. ServerSock=socket.socket(socket.AF_INET, socket.sock_dgram) 5. ServerSock.bind ((,7007)) 6. ServerSock.listen () 7. NewClientSock, addr = ServerSock.accept() 8. Print Connecaon address:, addr 9. while 1: 10. ClientMessage = NewClientSock.recv (BUFFER_SIZE) 11. if not ClientMessage: break; 12. print Message from client:, ClientMessage 13. NewClientSock.send (ServerMessage) 14. NewClientSock.close () 20
30 anos de Internet: ARPANET transitou para a arquitectura TCP/IP em 1 de Janeiro de 1983 21
SUMARIO Bibliografia James Kurose, Keith Ross, Computer Network: a Top- Down Approach Featuring the Internet (edição 2) Cap. 2: The web and HTTP: secção 2.2 - completa File Transfer: FTP: secção 2.3 - completa Electronic mail e Internet: secção 2.4 completa DNS secção 2.5 Socket Programming with TCP: secção 2.6.1 Socket Programming with UDP: secção 2.7 IETF RFCs The Trivial File Transfer Protocol: RFC 1350 e RFC 2347 e RFC 2348 (extensões) 22