"High-level data link control" (HDLC)

André Moreira (andre@dei.isep.ipp.pt)
Professor Adjunto do Departamento de Engenharia Informática do ISEP

O HDLC é uma especificação do nível 2 do MR-OSI com grande utilização e que inclui diversas variantes, utiliza a transmissão síncrona de tramas, orientada por bit.

Existem três tipos de nós:

  • Primários: controlam a ligação e emitem comandos sob a forma de tramas
  • Secundários: estão sob o controlo do nó primário, emitindo as respostas aos comandos solicitados. Quando existe mais do que um nó secundário, o nó primário mantém uma ligação lógica independente para cada um.
  • Combinados: controla a ligação, mas também emite respostas.

Se numa linha multiponto ou ponto a ponto existe um nó primário e um ou mais secundários, a ligação é não balanceada. Se numa ligação ponto a ponto existem dois nós combinados a ligação é balanceada.

Numa ligação balanceada qualquer dos nós combinados pode iniciar uma transmissão, este modo de transmissão é designado por ABM (“Asynchronous balanced mode”).

Numa ligação não balanceada o modo normal de funcionamento é NRM (“Normal Response Mode”), os nós secundários só podem transmitir quando solicitados pelo nó primário.

Existe ainda um terceiro modo, raramente usado, que permite que numa ligação não balanceada os nós secundários tomem a iniciativa de transmitir, trata-se do ARM (“Asynchronous response mode”).

Tramas HDLC

Existe um único formato de trama que é usado tanto para transmissão de dados como informação de controlo:

Todas as tramas são delimitadas por “flags” de sincronização de trama. Estas “flags” são constituídas por 8 bits com o padrão 01111110. Uma única “flag” pode ser usada para assinalar o fim de uma trama e inicio da seguinte.

Para evitar que os dados no interior da trama sejam confundidos com a “flag” que assinala o fim da trama utiliza-se o seguinte procedimento conhecido como “bit stuffing”:

  • Antes de emitir a trama é verificado se os dados contêm sequências de mais do que 5 uns e a cada uma delas é adicionado (inserido a seguir) um bit zero.
  • No receptor, sempre que é detectada uma sequência de 5 uns, verifica-se o bit seguinte, se é zero trata-se de dados pelo que este bit é eliminado, se é um então trata-se da “flag” de sincronização de trama.

O endereço é usado para identificar o nó secundário a que se destina o comando ou o nó secundário que emitiu a resposta, numa configuração ponto-a-ponto não é necessário, mas existe sempre.

Normalmente um endereço de 7 bits (127 nós secundários) é suficiente, mas é possível usar endereços com qualquer número de bits múltiplo de 7. Para cada octeto, se o oitavo bit é um, significa que não existem mais octetos de endereço, se é zero o endereço continua. O octeto 11111111 é reservado para “broadcast” permitindo ao nó primário enviar uma trama para todos os secundários.

O campo de controlo começa com dois bits que identificam o tipo de trama. Existem três tipos de trama e a parte restante deste campo é diferente para cada um deles. Os três tipos de trama são:

  • “Information Frames” (I-Frames) destinam-se a transportar dados e podem ainda ser usados para ARQ e controlo de fluxo (“piggybacking”).
  • “Supervisory Frames” (S-Frames), quando não é usado o “piggybacking” são necessárias tramas deste tipo para controlo de erros e fluxo.
  • “Unnumbered Frames” (U-Frames), tal como o seu nome indica, e ao contrário das anteriores, estas tramas não possuem número de sequência. Os “U-frames” são usados para funções de controlo diversas, tais como: alteração do modo de funcionamento dos nós;

O esquema seguinte apresenta a constituição do campo de controlo para os vários tipos de "trama":

O bits assinalado com P/F (“Poll/Final”) tem diversas funções conforme o tipo de trama, e de acordo com o modo de funcionamento da ligação. Por exemplo numa trama I em modo normal de resposta (NRM), o nó primário coloca este bit a 1 para permitir ao nó secundário responder e o nó secundário coloca-o a 1 para indicar que se trata da ultima trama da resposta.

As tramas I e S podem ter o campo de controlo expandido para 16 bits, isto permite aumentar os números de sequência de 3 para 7 bits. A comutação entre control de 8 ou 16 bits é realizada com funções U.

O campo de dados só existe nas tramas I e, em alguns casos, nas tramas U. Contém os dados a transmitir ao nó destinatário, embora no “standard” não exista comprimento máximo definido, cada implementação particular impõe limitações.

O FCS de 16 bits corresponde ao CRT-CCITT, no entanto, quando tal se justifica, certas implementações podem usar o CRC-32, dando origem a um FCS de 32 bits.

Operação do HDLC

As transferencias de dados baseiam-se nas tramas-I, cada trama contém um número de sequência de emissão, e um número de sequência de recepção. O número de sequência de recepção funciona como confirmação de recepção de tramas anteriormente enviadas em sentido inverso (“piggybackind”). Trata-se do número de sequência da trama que é esperada a seguir, o tamanho máximo da janela pode variar entre 7 e 127.

Embora as tramas I possam por si controlar o fluxo e os erros, nem sempre isso é adequado (pode não existir uma trama I pronta a enviar, para transportar o ACK), neste caso usam-se tramas S.

As tramas S permitem a implementação de ARQ em modo “stop & wait”, “go-back-n” ou “selective-repeat”, para este efeito estão definidos os seguintes comandos:

Código no Campo de Control (Função S) Comando-Função Descrição
00 RR “Receiver Ready”, é um ACK que indica que o receptor se encontra pronto a receber mais tramas (“stop & wait”).
10 RNR “Receiver Not Ready”, é um ACK que indica que o receptor não se encontra pronto a receber mais tramas (“stop & wait”).
01 REJ “Reject”, é um NAK do modo “go-back-n”
11 SREJ “Selective Reject”, é um NAK do modo “selective-repeat”

O número de trama ao qual se aplica o comando é indicado no campo “Nº de Sequência de Recepção” da trama S.

As funções proporcionadas pelas tramas U são bastante mais extensas e diversificadas:

Comando(C)
Resposta (R)
Descrição
SNRM (C) “Set Normal Response Mode”, é enviado pelo nó primário ao secundário indicando que deve entrar em modo de ligação normal, com campo de controlo de 8 bits.
SNRME (C) “Set Normal Response Mode Extended”, idêntico ao anterior, mas com campo de controlo de 16 bits.
SARM (C) “Set Asyncronous Response Mode”, idêntico ao SNRM, para o modo assíncrono.
SARME (C) “Set Asyncronous Response Mode Extended”, idêntico ao SNRME, para o modo assíncrono.
SABM (C) “Set Asyncronous Balanced Mode”, idêntico ao SNRM, para o modo assíncrono balanceado.
SABME (C) “Set Asyncronous Balanced Mode Extended”, idêntico ao SNRME, para o modo assíncrono balanceado.
SIM (C) “Set Initialization Mode”, é enviado pelo nó primário ao secundário para que este inicie um procedimento de inicialização, durante a inicialização são enviados dados ao nó secundário usando tramas-U com campo de dados (UI).
DISC (C) “Disconnect”, informa o destinatário que a estação emissora deixará de estar activa.
UA (R) “Unnumbered Acknowledgment”, indica a aceitação do comando enviado.
DM (R) “Disconnected Mode”, resposta enviada sempre que outro nó envia um comando a indicar que o nó não está em ligação. Esta resposta é igualmente usada para indicar a não aceitação de um comando.
RD (R) “Request Disconnect”, esta resposta é usada para pedir a quebra da ligação estabelecida.
RIM (R) “Request Initialization Mode”, esta resposta é usada quando o nó não está pronto e vai ser reinicializado.
UI (C/R) “Unnumbered Information”, usados para troca de informação entre nós (status, etc).
UP (C) “Unnumbered Poll”, usado para pedir informações a nós, a resposta será um UI.
RSET (C) “Reset”, este comando é usado para a recuperação de erros graves (FRMR), indica que o nó reinicializou o seu número de sequência de envio, o destinatário deve também reinicializar o seu número de sequência de resposta.
XID (C/R) “Exchange Identification”, usado para a troca de informação sobre endereços e características entre dois nós.
TEST (C/R) “Test”, permite efectuar um teste da ligação com outro nó, que deve responder o mais brevemente possível.
FRMR (R) “Frame Reject”, indica que a trama recebida tem um erro que não pode ser recuperado por ARQ.

Os comandos SNRM, SARM e SABM são usados para estabelecer a ligação lógica, o nó que as recebe responde com UA ou DM conforme aceita ou não a ligação.

O comando DISC é usado para quebrar a ligação lógica, o nó que o recebe responde com UA.

O protocolo HDLC é repleto de funcionalidade e serviu de base a diversas implementação, em algumas delas são implementações parciais, noutras a maior diferença está na sua designação e outras aindas o HDLC apenas serviu de inspiração:

  • ADCCP (Advanced data communication control procedure) - desenvolvido pelo ANSI, e largamente adoptado nos organismos estatais dos EUA, não tem qualquer diferença significativa relativamente ao que aqui foi descrito.
  • LAP-B (“Link access procedure - balanced”) - adoptado pelo CCITT na norma X.25.
  • SDLC (“Synchronous data link control”) - usado pela IBM, inclui algumas capacidades adicionais.
  • LLC (“Logical link control”) - usado na arquitectura IEEE 802 das redes locais.