High-Level Data Link Control: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m ha spostato HDLC a High-Level Data Link Control: preferibile non usare l'acronimo per il titolo della voce |
|||
(69 versioni intermedie di 48 utenti non mostrate) | |||
Riga 1:
'''High-Level Data Link Control''' ('''HDLC''', controllo collegamento dati ad alto livello) è un protocollo di rete del livello [[data link]].
Si tratta di un protocollo a riempimento di ''[[bit]]'' e usa la tecnica del [[bit stuffing]] (inserimento di zeri aggiuntivi) per evitare che le sequenze di terminazione compaiano all'interno dei frame.
Gli standard ISO originali erano:
* ISO 0009 — Struttura dei frame
* ISO 4335 <!-- — Elements of Procedure -->
* ISO 6159 <!-- — Unbalanced Classes of Procedure -->
* ISO 6256 <!-- — Balanced Classes of Procedure -->
Lo standard attuale è ISO 13239, che rimpiazza tutti questi.
HDLC può utilizzare o meno la modalità connessa. Può essere usato per connessioni multipunto, ma attualmente è usato quasi esclusivamente per collegare due dispositivi, usando la ABM ([[Asynchronous Balanced Mode]]). Le altre modalità disponibili sono NRM (Normal Response Mode) e ARM (Asynchronous Response Mode).
== Storia ==
HDLC è basato sul protocollo [[SDLC]] dell'[[IBM]], che è un protocollo di livello 2 proprietario.
Fu inglobato nella pila di protocolli [[X.25]] come [[LAPB]], nel protocollo [[V.42]] come [[LAPM]], nella pila [[Frame Relay]] come [[LAPF]] e nella pila [[ISDN]] come [[Link Access Procedures, D channel|LAPD]].
Adesso è la base per il meccanismo di framing usato con il protocollo [[Point-to-Point Protocol]] nelle linee sincrone, essendo usato da molti server per connettersi a una [[Wide Area Network|WAN]] (in genere [[Internet]]).
Una versione un po' diversa è usata anche come canale di controllo per le linee telefoniche [[E-carrier]] (E1) e [[SONET]].
Alcuni produttori, come Cisco, hanno implementato protocolli come [[Cisco HDLC]] che usavano le tecniche per il framing HDLC a basso livello ma non usavano l'intestazione standard HDLC.
== Framing ==
I frame dati HDLC possono essere trasmessi attraverso collegamenti sincroni o asincroni. Questi collegamenti non possono determinare l'inizio o la fine di un frame, quindi questo deve essere fatto. In questo caso viene usato un delimitatore (o ''flag''), che è una sequenza di bit che non potrà mai apparire nel resto del frame. Questa sequenza è '01111110', cioè in [[esadecimale]] '7E'. Ogni frame inizia e finisce con essa.
Quando non sta venendo trasmesso nessun frame, viene trasmesso continuamente un delimitatore. Usando lo standard [[NRZI]] per codificare gli stati logici in livelli di tensione (bit 0 = cambiamento, bit 1 = mantenuto il valore precedente), si genera una sequenza continua di bit:
0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0
_____________ _____________ _____________ _____________
_/ \_/ \_/ \_/ \
Questo viene usato dai modem per sincronizzarsi attraverso circuiti [[Phase-locked loop]].
Nella pratica, nei dati da spedire può comparire facilmente la sequenza usata come delimitatore e bisogna quindi trasmetterla in modo da non spedirla come delimitatore.
Nei collegamenti sincroni, il problema è risolto con il [[bit stuffing]]. Il trasmettitore fa in modo che ogni sequenza di cinque bit a 1 vicini sia seguita da uno 0. È un semplice circuito digitale ad inserire lo 0.
Il ricevente, conoscendo questo sistema, toglierà automaticamente i bit 0 aggiunti. In questo modo, se viene ricevuto il flag, avrà 6 bit 1 consecutivi. Il ricevente vedrà 6 bit a 1 e capirà che è un flag — altrimenti il sesto bit sarebbe stato a 0.
Questo (sempre considerando la codifica NRZI) garantisce una transizione almeno ogni 6 periodi di trasmissione, in modo da mantenere il sincronismo con il trasmittente.
I collegamenti asincroni che usano la [[porta seriale]] o una [[UART]] mandano i bit a gruppi di 8. Non possiedono circuiti per inserire altri bit. Usano invece il [[byte stuffing]] (o "octet stuffing"). L'ottetto che delimita i frame è 01111110 (in esadecimale 7E). Un ottetto "control escape" è formato dalla sequenza '01111101' (in esadecimale 7D). Un ottetto di questo tipo viene mandato prima di ogni byte uguale a sé stesso o al flag. Il byte successivo avrà il bit 5 invertito (contando da destra a sinistra e partendo da 0). Ad esempio, la sequenza dati '01111110' (in esadecimale 7E) verrebbe trasmessa come "01111101 01011110" (in esadecimale "7D 5E").
== Struttura ==
Il contenuto di un frame HDLC, compreso il flag, è:
{| class="wikitable"
|-
!Flag
!Indirizzo
!Controllo
!Dati
!FCS
!Flag
|-
|8 bit
|8 bit
|8 o 16 bit
|Lunghezza variabile, 0 o più bit a multipli di 8
|16 o 32 bit
|8 bit
|}
Bisogna stare attenti al fatto che il flag di fine di un frame può essere anche l'inizio del successivo.
I dati arrivano a gruppi di 8 bit. I sistemi telefonici o telegrafici organizzavano il mezzo di trasmissione per spedire 8 bit alla volta, e HDLC adatta semplicemente questo all'invio di dati binari.
L'FCS ([[Frame Check Sequence]]) è una versione più sofisticata dei bit di parità. Questo campo contiene i risultati di un calcolo binario sui bit che compongono i tre campi precedenti. Questo viene fatto per rilevare errori di trasmissione (bit persi, errati o in più) in modo da poter scartare il frame in ricezione se viene rilevato un errore. È a causa di questo metodo di controllo degli errori che possono esserci limiti massimi nelle dimensioni del campo dati. Più lunga diventa la zona dati, più difficile sarà garantire il rilevamento di errori di trasmissione. L'FCS è a 16 ([[CRC-CCITT]]) o 32 ([[CRC-32]]) bit.
Quando fu creato HDLC, venivano prodotti mezzi trasmissivi per le linee telefoniche, che avevano bisogno di un tasso di errore minore di <math>10^{-5}</math> (errori/bit). Invece, i dati spediti dai PC, necessitano di maggior precisione, minore di <math>10^{-12}</math>. Attraverso l'FCS si possono controllare i dati. Se sono corretti, viene spedito un pacchetto di conferma (ACKnowledge) a chi aveva trasmesso in modo da permettergli di spedire il prossimo frame. Altrimenti il ricevente manda una conferma negativa (Negative ACKnowledge) o, più semplicemente, scarta il frame.
Se manda il NACK ed esso arriva a chi aveva trasmesso, può essere spedito un altro frame; altrimenti, dopo un certo tempo scadrà un timer del trasmettitore (che aveva fatto partire appena dopo aver spedito il frame) e il frame verrà ritrasmesso.
Le reti ottiche moderne hanno affidabilità molto migliore di <math>10^{-5}</math> (errori/bit), e ciò rende HDLC ancora più affidabile.
== Tipi di stazioni (Computer) e modi di trasmissione dati ==
I tipi di stazioni sono 3:
* Terminale primario: è responsabile delle operazioni di controllo sul collegamento. Manda i frame di controllo (comandi).
* Terminale secondario: lavora sotto il controllo di quello primario. Spedisce solo pacchetti di risposta. Il primario è collegato ai secondari attraverso collegamenti logici multipli.
* Terminale combinato: ha le caratteristiche di entrambi i terminali sopra. Spedisce sia comandi sia risposte.
Questa classificazione contraddistingue tre modalità di funzionamento:
* ABM (Asynchronous Balanced Mode): in cui interagiscono terminali combinati.
* NRM (Normal Response Mode): in cui un terminale primario inizia a trasmettere e il secondario risponde se interpellato.
* ARM (Asynchronous Response Mode): fondamentalmente come l'NRM, con la differenza che un terminale secondario può trasmettere anche senza l'autorizzazione di un terminale primario.
== Operazioni HDLC e tipi di frame ==
=== Frame 'I' (dati) ===
I frame 'I' sono usati per trasportare i dati dal livello di rete. In aggiunta possono anche comprendere informazioni per il controllo di flusso e degli errori insieme ai dati ([[Piggyback]]ing). Per queste funzioni vengono usati i sottocampi del campo di controllo.
* Campo di controllo dei frame 'I'
{| class="wikitable"
|-
!0
!Manda il numero di sequenza N(S)
!Poll/Final
!Ricevi numero di sequenza N(R)
|-
|1 bit
|3 o 7 bit
|1 bit
|3 o 7 bit
|}
Il primo campo definisce il tipo. '0' indica un frame 'I'.
N(S) indica il numero di sequenza del frame spedito. 3 bit possono indicare valori da 0 a 7, ma nel formato esteso (in cui il campo di controllo è di 2 byte) è usato un intervallo più grande.
Il campo Poll/Final è un solo bit con due utilizzi. È chiamato Poll se viene usato dalla stazione primaria per chiedere una risposta alle stazioni secondarie, invece Final quando viene usato da una stazione secondaria per indicare una risposta al termine della trasmissione. Ha significato
solo se impostato a 1.
* In NRM il terminale primario imposta il bit Poll. Il secondario imposta il bit Final nell'ultimo frame I di una risposta.
* In ARM e ABM, il bit Poll/Final è usato per forzare una risposta.
== Frame 'S' (controllo) ==
I frame di supervisione sono usati per controllo degli errori e di flusso, quando il [[piggyback]]ing è impossibile o inappropriato, ad esempio quando il campo primario deve mandare solo comandi, risposte o conferme (non dati). I frame 'S' '''non''' hanno campi dati.
* Campo di controllo dei frame S
Può essere a 8 o 16 bit
{| class="wikitable"
|-
!10
!Send sequence no N(S)
!Poll/Final
!Receive sequence no N(R)
|-
|2 bit
|2 bit
|1 bit
|3 bit
|}
{| class="wikitable"
|-
!10
!Code
!0000
!Poll/Final
!Receive sequence no N(R)
|-
|2 bits
|2 bits
|4 bits
|1 bits
|7 bits
|}
I primi 2 bit ('10') indicano che è un frame S
<!--
=== U-Frames ===
U-Frames are used for link management. The are used to exchange session management and control information between connected devices.
U-frame contain an information field used for system management information and not user data.
*'''U-Frame control field'''
{| class="wikitable"
|-
!11
!Code
!Poll/Final
!Code
|-
|2 bits
|2 bits
|1 bits
|3 bits
|}
The first 2 bits (11) mean it is U-frame . The 5 code bits (2 before P/F bit and 3 bit after P/F bit) can create 32 different types of U-frame
*Mode settings (SNRM, SNRME, SARM, SARME, SABM, SABME, UA, DM, RIM, SIM, RD, DISC)
*Information Transfer(UP, UI)
*Recovery (FRMR, RSET)
**Invalid Control Field
**Data Field Too Long
**Data field not allowed with received Frame Type
**Invalid Receive Count
*Miscalleneaous (XID, TEST)
== Link Configurations ==
Link configurations can be categorized as being either:
*''Unbalanced'', which consists of one primary terminal, and one or more secondary terminals.
*''Balanced'', which consists of two peer terminals.
[[Immagine:HDLC Policies.jpg|thumb|500px|HDLC Data Transfer Modes illustrated]]
The three link configurations are:
*''Normal Response Mode'' (NRM) is an unbalanced configuration in which only the primary terminal may initiate data transfer. The secondary terminal transmits data only in response to commands from the primary terminal. The primary terminal polls the secondary terminal(s) to determine whether they have data to transmit, and then selects one to transmit.
*''Asynchronous Response Mode'' (ARM) is an unbalanced configuration in which secondary terminals may transmit without permission from the primary terminal. However, the primary terminal still retains responsibility for line initialization, error recovery, and logical disconnect.
*''Asynchronous Balanced Mode'' (ABM) is a balanced configuration in which either station may initiate the transmission.
== HDLC Command and response repertoire ==
*Commands (I, RR, RNR, (SNRM or SARM or SABM) DISC
*Responses (I, RR, RNR, UA, DM, FRMR)
=== Basic Operations ===
*Initialization can be requested by either side. When the six-mode set-command is issued. This command:
**Signals the other side that initialization is requested
**Specifies the mode, NRM, ABM, ARM
**Specifies whether 3 or 7 bit sequence numbers are in use.
The HDLC module on the other end transmitts (UA) frame when the request is accepted. And if the request is rejected it sends (DM) disconnect mode frame.
=== Functional Extensions (Options) ===
*For [[Switched Circuits]]
**Commands: ADD - XID
**Responses: ADD - XID, RD
*For 2-way Simultaneous commands & responses are ADD - REJ
*For Single Frame Retransmission commands & responses: ADD - SREJ
*For Information Commands & Responses: ADD - Ul
*For Initialization
**Commands: ADD - SIM
**Responses: ADD - RIM
*For Group Polling
**Commands: ADD - UP
*Extended Addressing
*Delete Response I Frames
*Delete Command I Frames
*Extended Numbering
*For Mode Reset (ABM only) Commands are: ADD - RSET
*Data Link Test Commands & Responses are: ADD - TEST
*Request Disconnect. Responses are ADD - RD
*32-bit FCS
== HDLC Command/Response Repertoire ==
{| class="wikitable"
|-
!Type Of Frame
!Name
!Command/
Response
!Description
!Info
!C-Field Format
8...7...6...5...4...3...2...1.....
|-
|Information(I)
|
|C/R
|User exchange data
|
|.-N(R)-... P/F.....-N(S)-..0
|-
|Supervisory (S)
|Receive Ready (RR)
|C/R
|Positive Acknowledgement
|Ready to receive I-Frame
|.-N(R)-... P/F...0...0...0...1
|-
|
|Receive Not Ready (RNR)
|C/R
|Positive Acknowledgement
|Not Ready to receive
|.-N(R)-... P/F...0...1...0...1
|-
|
|Reject (REJ)
|C/R
|Negative Acknowledgement
|go back N
|.-N(R)-... P/F...1...0...0...1
|-
|
|Selective Reject (SREJ)
|C/R
|Negative Acknowledgement
|selective reject
|.-N(R)-... P/F...1...1...0...1
|}
=== Unnumbered Frames ===
Unnumbered frames are identified by the low two bits being 1. With the P/F flag, that leaves 5 bits as a frame type. Even though less than 32 values are in use, some types have different meanings depending on the direction they are sent: as a request or as a response. The relationship between the '''DISC''' (disconnect) command and the '''RD''' (request disconnect) response seems clear enough, but the reason for making '''SARM''' command numerically equal to the '''DM''' response is obscure.
{| class="wikitable"
|-
!Name
!Command/
Response
!Description
!Info
!C-Field Format
8...7...6...5...4...3...2...1.....
|-
|Set normal response '''SNRM'''
|C
|Set mode
|= 3 bit sequence number
|..1...0...0..P....0...0...1...1
|-
|Set normal response extended mode '''SNRME'''
|C
|Set mode; extended
|= 7 bit sequence number
|..1...1...0..P....1...1...1...1
|-
|Set asynchronous response '''SARM'''
|C
|Set mode
|= 3 bit sequence number
|..0...0...0..P....1...1...1...1
|-
|Set asynchronous response extended mode '''SARME'''
|C
|Set mode; extended
|= 7 bit sequence number
|..0...1...0..P....1...1...1...1
|-
|Set asynchronous balanced/extended mode '''SABM'''
|C
|Set mode
|= 3 bit sequence number
|..0...0...1..P....1...1...1...1
|-
|Set asynchronous balanced extended mode '''SABME'''
|C
|Set mode; extended
|= 7 bit sequence number
|..0...1...1..P....1...1...1...1
|-
|Set initialization mode '''SIM'''
|C
|Initialize link control function
|in the addressed station
|..0...0...0..P....0...1...1...1
|-
|Disconnect '''DISC'''
|C
|Terminate logical link connection
|Future commands return '''RD'''
|..0...1...0..P....0...0...1...1
|-
|Unnumbered Acknowledgment '''UA'''
|R
|Acknowledge acceptance
|of one of the set-mode commands.
|..0...1...1....F..0...0...1...1
|-
|Disconnect Mode '''DM'''
|R
|Responder in Disconnect Mode
|mode set required
|..0...0...0....F..1...1...1...1
|-
|Request Disconnect '''RD'''
|R
|Solicitation for '''DISC''' Command
|
|..0...1...0....F..0...0...1...1
|-
|Request Initialization Mode '''RIM'''
|R
|Initialization needed
|Request for SIM command
|..0...0...0....F..0...1...1...1
|-
|Unnumbered Information '''UI'''
|C/R
|Unacknowledged data
|has a payload
|..0...0...0..P/F..0...0...1...1
|-
|Unnumbered Poll ('''UP''')
|C
|Used to solicit
|control information
|..0...0...1..P....0...0...1...1
|-
|Reset '''RSET'''
|C
|Used for recovery
|Resets N(R), N(S)
|..1...0...0..P....1...1...1...1
|-
|Exchange Indication '''XID'''
|C/R
|Used to Request/
|Report capabilities
|..1...0...1..P/F..1...1...1...1
|-
|Test '''TEST'''
|C/R
|Exchange identical information
|fields for testing
|..1...1...1..P/F..0...0...1...1
|-
|Frame Reject '''FRMR'''
|R
|Report receipt
|of unacceptable frame
|..1...1...0....F..0...1...1...1
|}
== Bibliography ==
*Computer Communications (course notes) by Chaim Zieglier PhD, [[Brooklyn College]].
*Data and Computer communications, by Willam Stallings. (Seventh Edition, Prentice Hall)
-->
<!--
'''Address''' utilizzato nelle linee multipunto, identifica i diversi terminali (necessario per il dialogo fra un concentratore e diversi terminali)
'''Control''' contiene numeri di sequenza, ack, ecc.
'''Dati''' contiene i dati da trasportare
'''Checksum''' è calcolata con CRC-CCITT
Caratteristiche dell'HDLC:
* usa una finestra scorrevole con numeri di sequenza a 3 bit, contenuti nel campo Seq del campo Control;
* utilizza il campo Next del campo Control, per il
* prevede tre tipi di [[Data frame|frame]] (identificati dai primi due bit di Control):
** Information, per la trasmissione dati;
** Supervisory, per comandare diverse modalità di ritrasmissione;
** Unnumbered (manca il numero di sequenza), per finalità di controllo o per trasportare il traffico di [[connessioni]] non affidabili.
-->
== Voci correlate ==
* [[Point-to-Point Protocol]]
* [[Synchronous Data Link Control]]
* [[Serial Line Internet Protocol]]
* [[Procedure avanzate di controllo della comunicazione dati]]
{{
{{Portale|telematica}}
[[Categoria:Protocolli livello collegamento]]
[[Categoria:Standard ISO]]
|