Fundamento de Redes de Computadores

              Aula 7

       Camada de Transporte
Notas da Aula
✔
    A avaliação será dia 24 de Abril.
       ✔
           Individual e sem consulta.
●




                       Fundamentos de Redes de Computadores   2/38
Relembrando as Camadas




     Fundamentos de Redes de Computadores   3/38
Serviços da Camada de Transporte
Oferecem comunicação lógica
  entre processos de aplicação                                     aplicação
                                                                   transporte
  rodando em hospedeiros                                           rede
                                                                   enlace
  diferentes                                                       física




                                                                           tra
                                                                              ns
Protocolos de transporte rodam em




                                                                                po
  sistemas finais




                                                                                rte
   Lado remetente: divide as msgs da




                                                                                     ló
  −




                                                                                       gi
    aplicação em segmentos, passa à




                                                                                       co
    camada de rede




                                                                                            fim
  −Lado destinatário: remonta os




                                                                                              a
                                                                                                  fim
    segmentos em msgs, passa à
    camada de aplicação                                                                                 aplicação
                                                                                                        transporte
Mais de um protocolo de transporte                                                                      rede
                                                                                                        enlace

 disponível às aplicações                                                                               física


  −   Internet: TCP e UDP




                            Fundamentos de Redes de Computadores                                                 4/38
Camada de Transporte Versus Rede
Camada de rede:                     Analogia com a família:
 comunicação lógica                 12 crianças mandando
 entre hospedeiros                    carta a 12 crianças
Camada de transporte:                     −
                                           Processos = crianças
 comunicação lógica                       −
                                           Msgs da aplicação =
 entre processos                            cartas nos envelopes
  −
   Conta com e amplia os
                                          −
                                           Hospedeiros = casas
    serviços da camada                    −
                                           Protocolo de transporte
    de rede                                  = Ana e Bill
                                          −
                                           Protocolo da camada
                                            de rede = serviço
                                            postal


                 Fundamentos de Redes de Computadores                5/38
Protocolos da Camada de Transporte da Internet
Remessa confiável e em
                                           aplicação
 ordem (TCP)                               transporte
                                           rede
  −Controle de congestionamento            enlace
                                           física

  −Controle de fluxo                                    rede




                                                         lo
                                                        enlace          rede




                                                           gi
  −Estabelecimento da conexão
                                                                        enlace




                                                             ca
                                                        física
                                                                        física




                                                               le
Remessa não confiável e




                                                                 nd
                                                            rede




                                                                   -e
 desordenada: UDP                                           enlace




                                                                     nd
                                                            física




                                                                                 tra
  −Extensão sem luxo do IP pelo                                               rede




                                                                                    ns
                                                                              enlace




                                                                                       po
    “melhor esforço”                                                          física




                                                                                         rt
                                                                  network
                                                                 rede
                                                                  data link
Serviços não disponíveis:
                                                                 enlace
                                                                  physical
                                                                 física
                                                                                rede          aplicação
                                                                                enlace        transporte
  −Garantias de atraso                                                          física        rede
                                                                                              enlace
  −Garantias de largura de banda                                                              física




                      Fundamentos de Redes de Computadores                                                 6/38
Multiplexação / Demultiplexação

demultiplexação no destinatário:               multiplexação no remetente:
  entregando segmentos                           colhendo dados de múltiplos
  recebidos ao socket correto                    sockets, envelopando dados
                                                 com cabeçalho (usados depois
           = socket       = processo             para demultiplexação)

    aplicação     P3        P1
                            P1
                           aplicação                 P2         P4   aplicação

    transporte             transporte                                transporte

    rede                   rede                                           rede

    enlace                 enlace                                       enlace

    física                 física                                        física

                                  hospedeiro 2                  hospedeiro 3
    hospedeiro 1



                         Fundamentos de Redes de Computadores                     7/38
Como Funciona a Demultiplexação
Hospedeiro recebe                                              32 bits
 datagramas IP
                                                  # porta origem # porta destino
  −Cada datagrama tem
    endereço IP de origem,
    endereço IP de destino                       outros campos de cabeçalho
  −Cada datagrama carrega 1

    segmento da camada de
    transporte                                               dados da
  −Cada segmento tem número                                  aplicação
    de porta de origem, destino                              (mensagem)
Hospedeiro usa endereços IP
 & números de porta para
                                              formato do segmento TCP/UDP
 direcionar segmento ao
 socket apropriado



                      Fundamentos de Redes de Computadores                         8/38
Demultiplexação não Orientada para Conexão

Cria sockets com números Quando hospedeiro recebe
 de porta:                segmento UDP:
                             −verifica número de porta
  −
   DatagramSocket
    mySocket1 = new            de destino no segmento
                             −direciona segmento UDP
    DatagramSocket(12534);
  −DatagramSocket              para socket com esse
    mySocket2 = new            número de porta
    DatagramSocket(12535); Datagramas IP com
Socket UDP identificado                       diferentes endereços IP
 por tupla de dois                            de origem e/ou números
 elementos:                                   de porta de origem
  −
      (endereço IP destino,                   direcionados para o
        número porta destino)                 mesmo socket


                       Fundamentos de Redes de Computadores             9/38
DatagramSocket serverSocket = new DatagramSocket(6428);


    P2                                 P3                                   P1
                                                                            P1




                      SP: 6428                    SP: 6428
                      DP: 9157                    DP: 5775

           SP: 9157                                              SP: 5775
 cliente   DP: 6428                                              DP: 6428   Cliente
                                  servidor
  IP: A                           IP: C                                     IP:B


SP oferece “endereço de retorno”




                          Fundamentos de Redes de Computadores                        10/38
Demultiplexação orientada para conexão
Socket TCP identificado               Hospedeiro servidor pode
 por tupla de 4                        admitir muitos sockets
 elementos:                            TCP simultâneos:
  −
    Endereço IP de origem                  −   Cada socket identificado
  −
    Número de porta de                          por usa própria tupla de 4
     origem                           Servidores Web têm
  −
    Endereço IP de destino             diferentes sockets para
  −
    Número de porta de                 cada cliente conectando
     destino                               −   HTTP não persistente terá
                                                diferentes sockets para
Hospedeiro destinatário                         cada requisição
 usa todos os quatro
 valores para direcionar
 segmento ao socket
 apropriado
                   Fundamentos de Redes de Computadores                      11/38
P1                        P4      P5     P6                     P2   P1
                                                                         P3

                                                    SP: 5775
                                                    DP: 80
                                                     S-IP: B
                                                    D-IP:C

          SP: 9157                                          SP: 9157
cliente   DP: 80                                            DP: 80      cliente
                            servidor
 IP: A     S-IP: A          IP: C                            S-IP: B    IP:B
           D-IP:C                                           D-IP:C




                     Fundamentos de Redes de Computadores                         12/38
Demultiplexação orientada para conexão: servidor Web
                       threaded




     P1                            P4                                P2   P1
                                                                           P3

                                                        SP: 5775
                                                        DP: 80
                                                         S-IP: B
                                                        D-IP:C

            SP: 9157                                          SP: 9157
  cliente   DP: 80                                            DP: 80      cliente
                                servidor
   IP: A     S-IP: A            IP: C                          S-IP: B    IP:B
             D-IP:C                                           D-IP:C




                       Fundamentos de Redes de Computadores                         13/38
Transporte não Orientado para Conexão: UDP
UDP: User Datagram Protocol                  Por que existe um UDP?
  [RFC 768]                                       −Sem estabelecimento de
Protocolo de transporte da Internet
                                                    conexão (que pode gerar
  “sem luxo”, básico
                                                    atraso)
Serviço de “melhor esforço”,
                                                  −Simples: sem estado de
  segmentos UDP podem ser:
  −perdidos                                         conexão no remetente,
  −entregues à aplicação fora da                    destinatário
    ordem                                         −Cabeçalho de segmento

Sem conexão:                                        pequeno
  −sem handshaking entre remetente e              −Sem controle de
    destinatário UDP
  −Cada segmento UDP tratado                        congestionamento: UDP
    independente dos outros                         pode transmitir o mais
                                                    rápido possível




                          Fundamentos de Redes de Computadores                14/38
UDP continuando
Normalmente usado para
 streaming de aplicações                                         32 bits
 de multimídia
                                       tamanho, # porta origem        # porta dest.
  −Tolerante a perdas               em bytes, do   tamanho             soma verif.
  −Sensível à taxa                segmento UDP,
                                        incluindo
Outros usos do UDP                    cabeçalho
  −DNS
  −SNMP
                                                               dados da
Transferência confiável por                                    aplicação
                                                               (mensagem)
  UDP: aumenta
  confiabilidade na camada
  de aplicação                                          formato de segmento UDP
  −   recuperação de erro
        específica da aplicação!

                        Fundamentos de Redes de Computadores                          15/38
Soma de Verificação UDP
Objetivo: detectar “erros” (ex., bits invertidos) no
segmento transmitido

Remetente:                                 Destinatário:

Trata conteúdo de segmento como            Calcula soma de verificação do
  sequência de inteiros de 16 bits           segmento recebido
Soma de verificação (checksum):            Verifica se soma de verificação
  adição (soma por complemento de            calculada igual ao valor do campo
  1) do conteúdo do segmento                 de soma de verificação:
Remetente coloca valor da soma de          NÃO – erro detectado
  verificação no campo de soma de
                                           SIM – nenhum erro detectado. Mas
  verificação UDP
                                             pode haver erros mesmo assim?
                                             Vamos ver mais pra frente

                                           Lembram do digito verificador de
                                             documentos?
                        Fundamentos de Redes de Computadores                     16/38
Exemplo de Soma de Verificação da Internet

nota
  −
   Ao somar números, um carryout do bit mais
    significativo precisa ser somado ao resultado

exemplo: somar dois inteiros de 16 bits
            1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
            1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

 contorna   1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1

      soma 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0
   soma de 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
 verificação



                       Fundamentos de Redes de Computadores   17/38
Princípios de transferência confiável de dados
●
  Importante nas camadas de aplicação,
   transporte e enlace
●
  Lista dos 10 mais importantes tópicos de redes!
●
  Características do canal confiável determinarão
   complexidade do protocolo de transferência
   confiável (rdt – Reliable Data Transfer)




                   Fundamentos de Redes de Computadores   18/38
Transferência confiável de dados: introdução

rdt_send(): chamado de cima, (p. e.,                  deliver_data(): chamado pela
pela apl.). Dados passados para remeter à             rdt para remeter dados para cima
camada superior do destinatário



lado                                                                         lado
remetente                                                                    destinatário




udt_send(): chamado pela rdt,                 rdt_rcv(): chamado quando pacote
para transferir pacote por canal              chega no lado destinatário do canal
não confiável ao destinatário




                               Fundamentos de Redes de Computadores                         19/38
vamos:
Desenvolver de forma incremental os lados remetente e destinatário do protocolo
de transferência confiável de dados (rdt)
Considerar apenas a transf. de dados unidirecional
Mas informações de controle fluirão nas duas direções!
●


Usar máquinas de estado finito (FSM) para especificar remetente, destinatário




                               evento causando transição de estado
                              ações tomadas sobre transição de estado
    estado: quando neste
        “estado”, próximo   estado                                      estado
     estado determinado        1            evento
                                                                           2
     exclusivamente pelo                     ações
          próximo evento




                               Fundamentos de Redes de Computadores               20/38
Rdt1.0: Transferência confiável por canal
                      confiável
Canal subjacente perfeitamente confiável
Sem erros de bit
Sem perda de pacotes
FSMs separadas para remetente e destinatário:
  −
   remetente envia dados para canal subjacente
  −
   destinatário lê dados do canal subjacente

    Espera     rdt_send(dados)                   Espera          rdt_rcv(pacote)
   chamada                                      chamada
                                                                  extract (pacote,
    de cima    packet =                         de baixo
                                                                  dados)
               make_pkt(dados)
                                                                  deliver_data(dados)
               udt_send(pacote)
              remetente                                 destinatário



                          Fundamentos de Redes de Computadores                          21/38
Rdt2.0: Canal com erros de bit
Canal subjacente pode inverter bits no pacote
  −   Soma de verificação para detectar erros de bit
A questão: como recuperar-se dos erros:
  −Reconhecimentos (ACKs): destinatário diz explicitamente ao
    remetente que o pacote foi recebido OK
  −Reconhecimentos negativas (NAKs): destinatário diz

    explicitamente ao remetente que o pacote teve erros
  −Remetente retransmite pacote ao receber NAK


Novos mecanismos no rdt2.0 (além do rdt1.0):
  −Detecção de erro
  −Feedback do destinatário: msgs de controle (ACK,NAK)

    destinatário->remetente




                        Fundamentos de Redes de Computadores    22/38
Rdt2.0: Especificação da FSM (Máquina de Estado
                         Finito)
   rdt_send(dados)
   snkpkt = make_pkt(dados,soma_verif)
   udt_send(pctenv)                                               destinatário
                         rdt_rcv(pctrec) &&
 Espera         Espera     isNAK(pctrec)
                                                                  rdt_rcv(pctrec) &&
 chamada        ACK ou
  de cima
                            udt_send(pctenv)                       corrupt(pctrec)
                 NAK
                                                                  udt_send(NAK)

    rdt_rcv(pctrec) && isACK(pctrec)
                                                                    Espera
        Λ                                                          chamada
                                                                   de baixo
remetente
                                                             rdt_rcv(pctrec) &&
                                                               notcorrupt(pctrec)
                                                             extract(pctrec,dados)
                                                             deliver_data(dados)
                                                             udt_send(ACK)




                           Fundamentos de Redes de Computadores                        23/38
Rdt2.0: Operação sem erros

          rdt_send(dados)
3         snkpkt = make_pkt(dados,soma_verif)
          udt_send(pctenv)                                               destinatário
                                rdt_rcv(pctrec) &&
        Espera        Espera      isNAK(pctrec)
                                                                         rdt_rcv(pctrec) &&
        chamada        ACK ou
         de cima
                                   udt_send(pctenv)                       corrupt(pctrec)
    1                   NAK                                              udt_send(NAK)

           rdt_rcv(pctrec) && isACK(pctrec)          4
                                                                           Espera
               Λ                                                          chamada
    remetente                                                       2     de baixo
                                         6
                                                                    rdt_rcv(pctrec) &&
                                                              5       notcorrupt(pctrec)
                                                                    extract(pctrec,dados)
                                                                    deliver_data(dados)
                                                                    udt_send(ACK)




                                  Fundamentos de Redes de Computadores                        24/38
rdt2.0: Cenário de erro

          rdt_send(dados)
3         snkpkt = make_pkt(dados,soma_verif)
          udt_send(pctenv)                                                destinatário
                                rdt_rcv(pctrec) &&
                                  isNAK(pctrec)               4
        Espera        Espera                                              rdt_rcv(pctrec) &&
        chamada        ACK ou
         de cima
                                   udt_send(pctenv)                        corrupt(pctrec)
    1                   NAK                                               udt_send(NAK)
                                                                  5
           rdt_rcv(pctrec) && isACK(pctrec)
                                                                            Espera
               Λ                                                           chamada
                                                         6
    remetente                                                         2    de baixo

                                                                      rdt_rcv(pctrec) &&
                                                 7
                                                                        notcorrupt(pctrec)
                                                                      extract(pctrec,dados)
                                                                      deliver_data(dados)
                                                                      udt_send(ACK)




                                  Fundamentos de Redes de Computadores                         25/38
Rdt2.0 tem uma falha fatal!
O que acontece se                    Tratando de duplicatas:
 ACK/NAK for                              −remetente retransmite
                                             pacote atual se ACK/NAK
 corrompido?                                 corrompido
  −
   remetente não sabe o                   −remetente acrescenta

     que aconteceu no                        número de sequência a
     destinatário!                           cada pacote
                                          −destinatário descarta (não
  −
   não pode simplesmente
                                             sobe) pacote duplicado
     retransmitir: possível
     duplicação
                                     remetente envia um pacote,
                                     depois espera resposta do
                                     destinatário


                  Fundamentos de Redes de Computadores                  26/38
Rdt2.1: Remetente trata de ACK/NAKs
                 corrompidos
                           rdt_send(dados)
                           pctenv = make_pkt(0, dados, checksum)
                           udt_send(pctenv)         rdt_rcv(pctrec) &&
                                           Espera   ( corrupt(pctrec) ||
                          Espera
                        chamada 0          ACK ou   isNAK(pctrec) )
                         de cima            NAK 0    udt_send(pctenv)
rdt_rcv(pctrec)
                                                           rdt_rcv(pctrec)
&& notcorrupt(pctrec)
                                                           && notcorrupt(pctrec)
&& isACK(pctrec)
                                                           && isACK(pctrec)
         Λ
                                                                Λ
                        Espera                     Espera
                        ACK ou                   chamada 1
 rdt_rcv(pctrec) &&     NAK 1                     de cima
 ( corrupt(pctrec) ||
                               rdt_send(dados)
 isNAK(pctrec) )
  udt_send(pctenv)            pctenv = make_pkt(1, dados,
                              checksum)
                              udt_send(pctenv)




                        Fundamentos de Redes de Computadores                       27/38
rdt_rcv(pctrec) && notcorrupt(pctrec)
                                     && has_seq0(pctrec)
                                    extract(pctrec,dados)
                                    deliver_data(dados)
                                    pctenv = make_pkt(ACK, chksum)
                                    udt_send(pctenv)
rdt_rcv(pctrec) &&                                                          rdt_rcv(pctrec) &&
(corrupt(pctrec)                                                            (corrupt(pctrec)
 pctenv = make_pkt(NAK, chksum)                                              pctenv = make_pkt(NAK, chksum)
 udt_send(pctenv)                                                           udt_send(pctenv)
                                   Espera               Espera
rdt_rcv(pctrec) &&                 0 de                 1 de                rdt_rcv(pctrec) &&
  not corrupt(pctrec) &&           cima                 baixo                 not corrupt(pctrec) &&
  has_seq1(pctrec)                                                            has_seq0(pctrec)
pctenv = make_pkt(ACK, chksum)                                              pctenv = make_pkt(ACK, chksum)
udt_send(pctenv)                                                            udt_send(pctenv)
                                  rdt_rcv(pctrec) && notcorrupt(pctrec)
                                   && has_seq1(pctrec)
                                  extract(pctrec,dados)
                                  deliver_data(dados)
                                  pctenv = make_pkt(ACK, chksum)
                                  udt_send(pctenv)




                                    Fundamentos de Redes de Computadores                                      28/38
Rdt2.1: Discussão
Remetente:                           Destinatário:
  −
    # seq acrescentado ao     −
                               deve verificar se pacote
     pkt                        recebido está
  −
    dois #s seq. (0,1)          duplicado
     bastarão. Por quê?       −
                               estado indica se 0 ou 1
  −
    deve verificar se           é # seq. esperado do
     ACK/NAK recebido foi       pacote
     corrompido
  −
    o dobro de estados     nota: destinatário não
  −
    estado de “lembrar” se   sabe se seu último
     pacote “atual” tem #
     seq. 0 ou 1             ACK/NAK foi recebido
                                         OK no remetente

                  Fundamentos de Redes de Computadores     29/38
Rdt2.2: Um protocolo sem NAK
Mesma funcionalidade de rdt2.1, usando apenas
 ACKs
Em vez de NAK, destinatário envia ACK para
 último pacote recebido OK
  −
   Destinatário precisa incluir explicitamente # seq. do
    pacote sendo reconhecido com ACK
ACK duplicado no remetente resulta na mesma
 ação de NAK: retransmitir pacote atual




                   Fundamentos de Redes de Computadores    30/38
Rdt2.2: Fragmentos do remetente, destinatário

                             rdt_send(dados)
                             pctenv = make_pkt(0, dados, checksum)
                             udt_send(pctenv)              rdt_rcv(pctrec) &&
                           Espera                        Espera         ( corrupt(pctrec) ||
                         chamada 0                        ACK             isACK(pctrec,1) )
                          de cima                    0                   udt_send(pctenv)
                                   fragmento FSM
                                   do remetente                    rdt_rcv(pctrec)
                                                                   && notcorrupt(pctrec)
rdt_rcv(pctrec) &&                                                 && isACK(pctrec,0)
  (corrupt(pctrec) ||                                                      Λ
                        Espera   fragmento FSM
                        0 de
has_seq1(pctrec))       baixo    do destinatário
udt_send(pctenv)
                            rdt_rcv(pctrec) && notcorrupt(pctrec)
                             && has_seq1(pctrec)
                            extract(pctrec,dados)
                            deliver_data(dados)
                            pctenv = make_pkt(ACK1, chksum)
                            udt_send(pctenv)

                                 Fundamentos de Redes de Computadores                          31/38
Rdt3.0: Canais com erros e perda
nova suposição: canal               Técnica: remetente espera
                                     quantidade “razoável” de tempo
  subjacente também                  por ACK
  pode perder pacotes               Retransmite se não chegar ACK
                                     nesse tempo
  (dados ou ACKs)                   Se pct (ou ACK) simplesmente
  −
   soma de verificação, #            atrasado (não perdido):
    seq., ACKs,                         −Retransmissão será duplicada, mas
                                          os #s de seq. já cuidam disso
    retransmissões serão                −Destinatário deve especificar # seq.


    úteis, mas não                        do pacote sendo reconhecido com
                                          ACK
    suficientes                     Requer contador regressivo




                 Fundamentos de Redes de Computadores                           32/38
Remetente rdt3.0
                                 rdt_send(dados)
                                 pctenv = make_pkt(0, dados, checksum)     rdt_rcv(pctrec) &&
                                 udt_send(pctenv)                          ( corrupt(pctrec) ||
                                 start_timer                               isACK(pctrec,1) )
    rdt_rcv(pctrec)
                                                                                     Λ
         Λ            Espera                                   Espera          timeout
                      chamada 0                                ACK0            udt_send(pctenv)
                      de cima
                                                                               start_timer
   rdt_rcv(pctrec)
   && notcorrupt(pctrec)                                                 rdt_rcv(pctrec)
   && isACK(pctrec,1)                                                    && notcorrupt(pctrec)
   stop_timer                                                            && isACK(pctrec,0)
                                                                         stop_timer

                              Espera                           Espera
timeout                                                        chamada 1
                              ACK1
udt_send(pctenv)                                               de cima
start_timer                                                                      rdt_rcv(pctrec)
                                       rdt_send(dados)                                Λ
       rdt_rcv(pctrec) &&
                                       pctenv = make_pkt(1, dados, checksum)
       ( corrupt(pctrec) ||            udt_send(pctenv)
       isACK(pctrec,0) )               start_timer
                Λ




                                 Fundamentos de Redes de Computadores                              33/38
RDT 3.0 em ação




  Fundamentos de Redes de Computadores   34/38
RDT 3.0 em ação




  Fundamentos de Redes de Computadores   35/38
Desempenho do rdt3.0
rdt3.0 funciona, mas com desempenho ruim pois fica
   esperando um ack.
ex.: enlace 1 Gbps, 15 ms atraso propriedade, pacote 8000
   bits:
                    L 8000bits
           d trans = =   9
                               = 8 microssegundos
                    R 10 bps
          U remet: utilização – fração do tempo remet. ocupado
           enviando
                                   L/ R        0,008
                    U       =               =        = 0,00027
                      remet                   30,008
                               RTT +L / R              m icrosec
                                                     onds
           Pct. 1 KB cada 30 ms -> 33 kB/s vazão em enlace de 1
           Gbps
          protocolo de rede limita uso de recursos físicos!



                             Fundamentos de Redes de Computadores   36/38
RDT 3.0: Operação Pare e Espere




                    L/ R                0,008
  U           =                    =               = 0,00027
      remet                            30,008
                  RTT +L / R                            microsec
                                                        onds



                     Fundamentos de Redes de Computadores          37/38
Slides baseados no material do livro Fundamento
          de Redes da Pearson Editora.




               Fundamentos de Redes de Computadores   38/38

Aula 7 camada de transporte

  • 1.
    Fundamento de Redesde Computadores Aula 7 Camada de Transporte
  • 2.
    Notas da Aula ✔ A avaliação será dia 24 de Abril. ✔ Individual e sem consulta. ● Fundamentos de Redes de Computadores 2/38
  • 3.
    Relembrando as Camadas Fundamentos de Redes de Computadores 3/38
  • 4.
    Serviços da Camadade Transporte Oferecem comunicação lógica entre processos de aplicação aplicação transporte rodando em hospedeiros rede enlace diferentes física tra ns Protocolos de transporte rodam em po sistemas finais rte Lado remetente: divide as msgs da ló − gi aplicação em segmentos, passa à co camada de rede fim −Lado destinatário: remonta os a fim segmentos em msgs, passa à camada de aplicação aplicação transporte Mais de um protocolo de transporte rede enlace disponível às aplicações física − Internet: TCP e UDP Fundamentos de Redes de Computadores 4/38
  • 5.
    Camada de TransporteVersus Rede Camada de rede: Analogia com a família: comunicação lógica 12 crianças mandando entre hospedeiros carta a 12 crianças Camada de transporte: − Processos = crianças comunicação lógica − Msgs da aplicação = entre processos cartas nos envelopes − Conta com e amplia os − Hospedeiros = casas serviços da camada − Protocolo de transporte de rede = Ana e Bill − Protocolo da camada de rede = serviço postal Fundamentos de Redes de Computadores 5/38
  • 6.
    Protocolos da Camadade Transporte da Internet Remessa confiável e em aplicação ordem (TCP) transporte rede −Controle de congestionamento enlace física −Controle de fluxo rede lo enlace rede gi −Estabelecimento da conexão enlace ca física física le Remessa não confiável e nd rede -e desordenada: UDP enlace nd física tra −Extensão sem luxo do IP pelo rede ns enlace po “melhor esforço” física rt network rede data link Serviços não disponíveis: enlace physical física rede aplicação enlace transporte −Garantias de atraso física rede enlace −Garantias de largura de banda física Fundamentos de Redes de Computadores 6/38
  • 7.
    Multiplexação / Demultiplexação demultiplexaçãono destinatário: multiplexação no remetente: entregando segmentos colhendo dados de múltiplos recebidos ao socket correto sockets, envelopando dados com cabeçalho (usados depois = socket = processo para demultiplexação) aplicação P3 P1 P1 aplicação P2 P4 aplicação transporte transporte transporte rede rede rede enlace enlace enlace física física física hospedeiro 2 hospedeiro 3 hospedeiro 1 Fundamentos de Redes de Computadores 7/38
  • 8.
    Como Funciona aDemultiplexação Hospedeiro recebe 32 bits datagramas IP # porta origem # porta destino −Cada datagrama tem endereço IP de origem, endereço IP de destino outros campos de cabeçalho −Cada datagrama carrega 1 segmento da camada de transporte dados da −Cada segmento tem número aplicação de porta de origem, destino (mensagem) Hospedeiro usa endereços IP & números de porta para formato do segmento TCP/UDP direcionar segmento ao socket apropriado Fundamentos de Redes de Computadores 8/38
  • 9.
    Demultiplexação não Orientadapara Conexão Cria sockets com números Quando hospedeiro recebe de porta: segmento UDP: −verifica número de porta − DatagramSocket mySocket1 = new de destino no segmento −direciona segmento UDP DatagramSocket(12534); −DatagramSocket para socket com esse mySocket2 = new número de porta DatagramSocket(12535); Datagramas IP com Socket UDP identificado diferentes endereços IP por tupla de dois de origem e/ou números elementos: de porta de origem − (endereço IP destino, direcionados para o número porta destino) mesmo socket Fundamentos de Redes de Computadores 9/38
  • 10.
    DatagramSocket serverSocket =new DatagramSocket(6428); P2 P3 P1 P1 SP: 6428 SP: 6428 DP: 9157 DP: 5775 SP: 9157 SP: 5775 cliente DP: 6428 DP: 6428 Cliente servidor IP: A IP: C IP:B SP oferece “endereço de retorno” Fundamentos de Redes de Computadores 10/38
  • 11.
    Demultiplexação orientada paraconexão Socket TCP identificado Hospedeiro servidor pode por tupla de 4 admitir muitos sockets elementos: TCP simultâneos: − Endereço IP de origem − Cada socket identificado − Número de porta de por usa própria tupla de 4 origem Servidores Web têm − Endereço IP de destino diferentes sockets para − Número de porta de cada cliente conectando destino − HTTP não persistente terá diferentes sockets para Hospedeiro destinatário cada requisição usa todos os quatro valores para direcionar segmento ao socket apropriado Fundamentos de Redes de Computadores 11/38
  • 12.
    P1 P4 P5 P6 P2 P1 P3 SP: 5775 DP: 80 S-IP: B D-IP:C SP: 9157 SP: 9157 cliente DP: 80 DP: 80 cliente servidor IP: A S-IP: A IP: C S-IP: B IP:B D-IP:C D-IP:C Fundamentos de Redes de Computadores 12/38
  • 13.
    Demultiplexação orientada paraconexão: servidor Web threaded P1 P4 P2 P1 P3 SP: 5775 DP: 80 S-IP: B D-IP:C SP: 9157 SP: 9157 cliente DP: 80 DP: 80 cliente servidor IP: A S-IP: A IP: C S-IP: B IP:B D-IP:C D-IP:C Fundamentos de Redes de Computadores 13/38
  • 14.
    Transporte não Orientadopara Conexão: UDP UDP: User Datagram Protocol Por que existe um UDP? [RFC 768] −Sem estabelecimento de Protocolo de transporte da Internet conexão (que pode gerar “sem luxo”, básico atraso) Serviço de “melhor esforço”, −Simples: sem estado de segmentos UDP podem ser: −perdidos conexão no remetente, −entregues à aplicação fora da destinatário ordem −Cabeçalho de segmento Sem conexão: pequeno −sem handshaking entre remetente e −Sem controle de destinatário UDP −Cada segmento UDP tratado congestionamento: UDP independente dos outros pode transmitir o mais rápido possível Fundamentos de Redes de Computadores 14/38
  • 15.
    UDP continuando Normalmente usadopara streaming de aplicações 32 bits de multimídia tamanho, # porta origem # porta dest. −Tolerante a perdas em bytes, do tamanho soma verif. −Sensível à taxa segmento UDP, incluindo Outros usos do UDP cabeçalho −DNS −SNMP dados da Transferência confiável por aplicação (mensagem) UDP: aumenta confiabilidade na camada de aplicação formato de segmento UDP − recuperação de erro específica da aplicação! Fundamentos de Redes de Computadores 15/38
  • 16.
    Soma de VerificaçãoUDP Objetivo: detectar “erros” (ex., bits invertidos) no segmento transmitido Remetente: Destinatário: Trata conteúdo de segmento como Calcula soma de verificação do sequência de inteiros de 16 bits segmento recebido Soma de verificação (checksum): Verifica se soma de verificação adição (soma por complemento de calculada igual ao valor do campo 1) do conteúdo do segmento de soma de verificação: Remetente coloca valor da soma de NÃO – erro detectado verificação no campo de soma de SIM – nenhum erro detectado. Mas verificação UDP pode haver erros mesmo assim? Vamos ver mais pra frente Lembram do digito verificador de documentos? Fundamentos de Redes de Computadores 16/38
  • 17.
    Exemplo de Somade Verificação da Internet nota − Ao somar números, um carryout do bit mais significativo precisa ser somado ao resultado exemplo: somar dois inteiros de 16 bits 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 contorna 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 soma 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 soma de 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1 verificação Fundamentos de Redes de Computadores 17/38
  • 18.
    Princípios de transferênciaconfiável de dados ● Importante nas camadas de aplicação, transporte e enlace ● Lista dos 10 mais importantes tópicos de redes! ● Características do canal confiável determinarão complexidade do protocolo de transferência confiável (rdt – Reliable Data Transfer) Fundamentos de Redes de Computadores 18/38
  • 19.
    Transferência confiável dedados: introdução rdt_send(): chamado de cima, (p. e., deliver_data(): chamado pela pela apl.). Dados passados para remeter à rdt para remeter dados para cima camada superior do destinatário lado lado remetente destinatário udt_send(): chamado pela rdt, rdt_rcv(): chamado quando pacote para transferir pacote por canal chega no lado destinatário do canal não confiável ao destinatário Fundamentos de Redes de Computadores 19/38
  • 20.
    vamos: Desenvolver de formaincremental os lados remetente e destinatário do protocolo de transferência confiável de dados (rdt) Considerar apenas a transf. de dados unidirecional Mas informações de controle fluirão nas duas direções! ● Usar máquinas de estado finito (FSM) para especificar remetente, destinatário evento causando transição de estado ações tomadas sobre transição de estado estado: quando neste “estado”, próximo estado estado estado determinado 1 evento 2 exclusivamente pelo ações próximo evento Fundamentos de Redes de Computadores 20/38
  • 21.
    Rdt1.0: Transferência confiávelpor canal confiável Canal subjacente perfeitamente confiável Sem erros de bit Sem perda de pacotes FSMs separadas para remetente e destinatário: − remetente envia dados para canal subjacente − destinatário lê dados do canal subjacente Espera rdt_send(dados) Espera rdt_rcv(pacote) chamada chamada extract (pacote, de cima packet = de baixo dados) make_pkt(dados) deliver_data(dados) udt_send(pacote) remetente destinatário Fundamentos de Redes de Computadores 21/38
  • 22.
    Rdt2.0: Canal comerros de bit Canal subjacente pode inverter bits no pacote − Soma de verificação para detectar erros de bit A questão: como recuperar-se dos erros: −Reconhecimentos (ACKs): destinatário diz explicitamente ao remetente que o pacote foi recebido OK −Reconhecimentos negativas (NAKs): destinatário diz explicitamente ao remetente que o pacote teve erros −Remetente retransmite pacote ao receber NAK Novos mecanismos no rdt2.0 (além do rdt1.0): −Detecção de erro −Feedback do destinatário: msgs de controle (ACK,NAK) destinatário->remetente Fundamentos de Redes de Computadores 22/38
  • 23.
    Rdt2.0: Especificação daFSM (Máquina de Estado Finito) rdt_send(dados) snkpkt = make_pkt(dados,soma_verif) udt_send(pctenv) destinatário rdt_rcv(pctrec) && Espera Espera isNAK(pctrec) rdt_rcv(pctrec) && chamada ACK ou de cima udt_send(pctenv) corrupt(pctrec) NAK udt_send(NAK) rdt_rcv(pctrec) && isACK(pctrec) Espera Λ chamada de baixo remetente rdt_rcv(pctrec) && notcorrupt(pctrec) extract(pctrec,dados) deliver_data(dados) udt_send(ACK) Fundamentos de Redes de Computadores 23/38
  • 24.
    Rdt2.0: Operação semerros rdt_send(dados) 3 snkpkt = make_pkt(dados,soma_verif) udt_send(pctenv) destinatário rdt_rcv(pctrec) && Espera Espera isNAK(pctrec) rdt_rcv(pctrec) && chamada ACK ou de cima udt_send(pctenv) corrupt(pctrec) 1 NAK udt_send(NAK) rdt_rcv(pctrec) && isACK(pctrec) 4 Espera Λ chamada remetente 2 de baixo 6 rdt_rcv(pctrec) && 5 notcorrupt(pctrec) extract(pctrec,dados) deliver_data(dados) udt_send(ACK) Fundamentos de Redes de Computadores 24/38
  • 25.
    rdt2.0: Cenário deerro rdt_send(dados) 3 snkpkt = make_pkt(dados,soma_verif) udt_send(pctenv) destinatário rdt_rcv(pctrec) && isNAK(pctrec) 4 Espera Espera rdt_rcv(pctrec) && chamada ACK ou de cima udt_send(pctenv) corrupt(pctrec) 1 NAK udt_send(NAK) 5 rdt_rcv(pctrec) && isACK(pctrec) Espera Λ chamada 6 remetente 2 de baixo rdt_rcv(pctrec) && 7 notcorrupt(pctrec) extract(pctrec,dados) deliver_data(dados) udt_send(ACK) Fundamentos de Redes de Computadores 25/38
  • 26.
    Rdt2.0 tem umafalha fatal! O que acontece se Tratando de duplicatas: ACK/NAK for −remetente retransmite pacote atual se ACK/NAK corrompido? corrompido − remetente não sabe o −remetente acrescenta que aconteceu no número de sequência a destinatário! cada pacote −destinatário descarta (não − não pode simplesmente sobe) pacote duplicado retransmitir: possível duplicação remetente envia um pacote, depois espera resposta do destinatário Fundamentos de Redes de Computadores 26/38
  • 27.
    Rdt2.1: Remetente tratade ACK/NAKs corrompidos rdt_send(dados) pctenv = make_pkt(0, dados, checksum) udt_send(pctenv) rdt_rcv(pctrec) && Espera ( corrupt(pctrec) || Espera chamada 0 ACK ou isNAK(pctrec) ) de cima NAK 0 udt_send(pctenv) rdt_rcv(pctrec) rdt_rcv(pctrec) && notcorrupt(pctrec) && notcorrupt(pctrec) && isACK(pctrec) && isACK(pctrec) Λ Λ Espera Espera ACK ou chamada 1 rdt_rcv(pctrec) && NAK 1 de cima ( corrupt(pctrec) || rdt_send(dados) isNAK(pctrec) ) udt_send(pctenv) pctenv = make_pkt(1, dados, checksum) udt_send(pctenv) Fundamentos de Redes de Computadores 27/38
  • 28.
    rdt_rcv(pctrec) && notcorrupt(pctrec) && has_seq0(pctrec) extract(pctrec,dados) deliver_data(dados) pctenv = make_pkt(ACK, chksum) udt_send(pctenv) rdt_rcv(pctrec) && rdt_rcv(pctrec) && (corrupt(pctrec) (corrupt(pctrec) pctenv = make_pkt(NAK, chksum) pctenv = make_pkt(NAK, chksum) udt_send(pctenv) udt_send(pctenv) Espera Espera rdt_rcv(pctrec) && 0 de 1 de rdt_rcv(pctrec) && not corrupt(pctrec) && cima baixo not corrupt(pctrec) && has_seq1(pctrec) has_seq0(pctrec) pctenv = make_pkt(ACK, chksum) pctenv = make_pkt(ACK, chksum) udt_send(pctenv) udt_send(pctenv) rdt_rcv(pctrec) && notcorrupt(pctrec) && has_seq1(pctrec) extract(pctrec,dados) deliver_data(dados) pctenv = make_pkt(ACK, chksum) udt_send(pctenv) Fundamentos de Redes de Computadores 28/38
  • 29.
    Rdt2.1: Discussão Remetente: Destinatário: − # seq acrescentado ao − deve verificar se pacote pkt recebido está − dois #s seq. (0,1) duplicado bastarão. Por quê? − estado indica se 0 ou 1 − deve verificar se é # seq. esperado do ACK/NAK recebido foi pacote corrompido − o dobro de estados nota: destinatário não − estado de “lembrar” se sabe se seu último pacote “atual” tem # seq. 0 ou 1 ACK/NAK foi recebido OK no remetente Fundamentos de Redes de Computadores 29/38
  • 30.
    Rdt2.2: Um protocolosem NAK Mesma funcionalidade de rdt2.1, usando apenas ACKs Em vez de NAK, destinatário envia ACK para último pacote recebido OK − Destinatário precisa incluir explicitamente # seq. do pacote sendo reconhecido com ACK ACK duplicado no remetente resulta na mesma ação de NAK: retransmitir pacote atual Fundamentos de Redes de Computadores 30/38
  • 31.
    Rdt2.2: Fragmentos doremetente, destinatário rdt_send(dados) pctenv = make_pkt(0, dados, checksum) udt_send(pctenv) rdt_rcv(pctrec) && Espera Espera ( corrupt(pctrec) || chamada 0 ACK isACK(pctrec,1) ) de cima 0 udt_send(pctenv) fragmento FSM do remetente rdt_rcv(pctrec) && notcorrupt(pctrec) rdt_rcv(pctrec) && && isACK(pctrec,0) (corrupt(pctrec) || Λ Espera fragmento FSM 0 de has_seq1(pctrec)) baixo do destinatário udt_send(pctenv) rdt_rcv(pctrec) && notcorrupt(pctrec) && has_seq1(pctrec) extract(pctrec,dados) deliver_data(dados) pctenv = make_pkt(ACK1, chksum) udt_send(pctenv) Fundamentos de Redes de Computadores 31/38
  • 32.
    Rdt3.0: Canais comerros e perda nova suposição: canal Técnica: remetente espera quantidade “razoável” de tempo subjacente também por ACK pode perder pacotes Retransmite se não chegar ACK nesse tempo (dados ou ACKs) Se pct (ou ACK) simplesmente − soma de verificação, # atrasado (não perdido): seq., ACKs, −Retransmissão será duplicada, mas os #s de seq. já cuidam disso retransmissões serão −Destinatário deve especificar # seq. úteis, mas não do pacote sendo reconhecido com ACK suficientes Requer contador regressivo Fundamentos de Redes de Computadores 32/38
  • 33.
    Remetente rdt3.0 rdt_send(dados) pctenv = make_pkt(0, dados, checksum) rdt_rcv(pctrec) && udt_send(pctenv) ( corrupt(pctrec) || start_timer isACK(pctrec,1) ) rdt_rcv(pctrec) Λ Λ Espera Espera timeout chamada 0 ACK0 udt_send(pctenv) de cima start_timer rdt_rcv(pctrec) && notcorrupt(pctrec) rdt_rcv(pctrec) && isACK(pctrec,1) && notcorrupt(pctrec) stop_timer && isACK(pctrec,0) stop_timer Espera Espera timeout chamada 1 ACK1 udt_send(pctenv) de cima start_timer rdt_rcv(pctrec) rdt_send(dados) Λ rdt_rcv(pctrec) && pctenv = make_pkt(1, dados, checksum) ( corrupt(pctrec) || udt_send(pctenv) isACK(pctrec,0) ) start_timer Λ Fundamentos de Redes de Computadores 33/38
  • 34.
    RDT 3.0 emação Fundamentos de Redes de Computadores 34/38
  • 35.
    RDT 3.0 emação Fundamentos de Redes de Computadores 35/38
  • 36.
    Desempenho do rdt3.0 rdt3.0funciona, mas com desempenho ruim pois fica esperando um ack. ex.: enlace 1 Gbps, 15 ms atraso propriedade, pacote 8000 bits: L 8000bits d trans = = 9 = 8 microssegundos R 10 bps  U remet: utilização – fração do tempo remet. ocupado enviando L/ R 0,008 U = = = 0,00027 remet 30,008 RTT +L / R m icrosec  onds Pct. 1 KB cada 30 ms -> 33 kB/s vazão em enlace de 1 Gbps  protocolo de rede limita uso de recursos físicos! Fundamentos de Redes de Computadores 36/38
  • 37.
    RDT 3.0: OperaçãoPare e Espere L/ R 0,008 U = = = 0,00027 remet 30,008 RTT +L / R microsec onds Fundamentos de Redes de Computadores 37/38
  • 38.
    Slides baseados nomaterial do livro Fundamento de Redes da Pearson Editora. Fundamentos de Redes de Computadores 38/38