Home Hardware Networking Programmazione Software Domanda Sistemi
Conoscenza del computer >> networking >> Sicurezza di rete >> .

Puoi creare un protocollo senza connessione affidabile?

Non è possibile creare un protocollo senza connessione intrinsecamente affidabile nello stesso modo in cui è un protocollo orientato alla connessione come TCP. Protocolli senza connessione come l'Affidabilità del sacrificio UDP per velocità e bassa spese generali. Tuttavia, è possibile * aggiungere * funzionalità di affidabilità * in cima * di un protocollo senza connessione. Ciò implica l'implementazione di meccanismi per rilevare e recuperare dalla perdita di dati o dalla corruzione. Questo essenzialmente crea un trasporto affidabile in cima a uno inaffidabile.

Ecco come è possibile aggiungere affidabilità a un protocollo senza connessione come UDP:

* Checksums/CRC: Questi sono già comunemente usati in UDP per rilevare la corruzione dei dati. Se il checksum non corrisponde, il ricevitore scarta il pacchetto corrotto. Ciò non garantisce la consegna, ma garantisce l'integrità dei dati.

* Numeri di sequenza: Assegna un numero di sequenza univoco a ciascun pacchetto. Il ricevitore può quindi ordinare correttamente i pacchetti, anche se arrivano fuori servizio. Questo gestisce il riordino, un problema comune con UDP.

* Ringraziamenti (ACKS): Il ricevitore invia un pacchetto di riconoscimento (ACK) per ciascun pacchetto correttamente ricevuto e ordinato. Se il mittente non riceve un ACK entro un periodo di timeout, ritrasmette il pacchetto. Questo è fondamentale per garantire una consegna affidabile.

* timer e ritrasmissioni: Il mittente ha bisogno di timer per tenere traccia del tempo da quando è stato inviato un pacchetto. Se il timeout scade senza ricevere un ACK, il mittente ritrasmette il pacchetto. I valori di timeout appropriati sono essenziali per evitare inutili ritrasmissioni, garantendo comunque la consegna tempestiva.

* Windowing (opzionale ma efficiente): Per migliorare l'efficienza, è possibile implementare una finestra scorrevole. Ciò consente al mittente di inviare più pacchetti prima di aspettare ACK, migliorando la velocità di trasmissione. Tuttavia, la gestione delle dimensioni della finestra e la gestione dei riconoscimenti diventa più complessa.

* Ringraziamenti selettivi (sacchi) (opzionale, migliora l'efficienza): Invece di riconoscere solo l'ultimo pacchetto ricevuto correttamente, i sacchi specificano l'intervallo di pacchetti ricevuti correttamente. Ciò consente una ritrasmissione più efficiente di pacchetti solo persi, evitando ritrasmissioni inutili.

Esempio di implementazione (concettuale):

Immagina una semplice applicazione basata su UDP per inviare file in modo affidabile.

1. mittente: Rompi il file in pacchetti, aggiunge numeri di sequenza e checksum a ciascun pacchetto. Invia pacchetti e avvia un timer per ciascuno. Dopo il timeout, ritrasmette il pacchetto. Aspetta anche ACKS.

2. Ricevitore: Riceve pacchetti, controlli controlli. Se un pacchetto è valido, invia un ACK. Se i pacchetti sono fuori servizio, li respinge fino a quando i pacchetti mancanti non arrivano o vengono ritrattati. Se un pacchetto è corrotto, lo scarta e non invia un ACK per quel numero di sequenza.

Limitazioni:

Anche con queste aggiunte, un'implementazione "UDP affidabile" non sarà perfettamente affidabile di fronte alla congestione della rete o ai guasti completi della rete. La complessità aggiunta introduce anche le spese generali, riducendo il vantaggio delle prestazioni dell'utilizzo di UDP in primo luogo. TCP fornisce già queste funzionalità in modo nativo ed efficiente.

In breve, puoi * simulare * l'affidabilità su UDP, ma stai essenzialmente costruendo un TCP rudimentale sopra l'UDP. In genere non è raccomandato se non si dispone di motivi molto specifici per evitare il TCP, come la necessità di latenza molto bassa a costo di una certa affidabilità.

 

networking © www.354353.com