Perché SNMP di solito funziona su UDP e non su TCP / IP?

Questa mattina, ci sono stati grossi problemi al lavoro perché una trap SNMP non “passava” perché SNMP viene eseguito su UDP. Ricordo dalla lezione di networking al college che UDP non è garantito come il TCP / IP. E Wikipedia dice che SNMP può essere eseguito su TCP / IP, ma UDP è più comune.

Ho capito che alcuni dei vantaggi di UDP su TCP / IP sono la velocità, la trasmissione e il multicasting. Ma mi sembra che la consegna garantita sia più importante per il monitoraggio della rete rispetto alla capacità di trasmissione. In particolare quando vi sono gravi esigenze di sicurezza elevata. Uno dei miei colleghi mi ha detto che i pacchetti UDP sono i primi a essere eliminati quando il traffico diventa pesante. Questo è un altro motivo per preferire TCP / IP su UDP per il monitoraggio della rete (IMO).

Allora perché SNMP usa UDP? Non riesco a capirlo e non riesco a trovare una buona ragione su Google neanche.

In realtà UDP dovrebbe funzionare meglio di TCP in reti con perdita (o reti congestionate). Il TCP è di gran lunga migliore nel trasferire grandi quantità di dati, ma quando la rete fallisce è più probabile che UDP riesca a passare. (In effetti, recentemente ho fatto uno studio testando questo e ho scoperto che SNMP su UDP è riuscito molto meglio di SNMP su TCP in reti con perdita quando il timeout UDP è stato impostato correttamente). Generalmente, il TCP inizia a comportarsi male a circa il 5% di perdita di pacchetti e diventa completamente inutile al 33% (ish) e UDP continuerà comunque (alla fine).

Quindi la cosa giusta da fare, come sempre, è scegliere lo strumento giusto per il lavoro giusto. Se stai facendo il monitoraggio di routine di molti dati, potresti prendere in considerazione il TCP. Ma preparati a ricorrere all’UDP per risolvere i problemi. La maggior parte delle pile in questi giorni può effettivamente utilizzare sia TCP che UDP.

Per quanto riguarda l’invio di TRAP, sì TRAPs sono inaffidabili perché non sono riconosciuti. Tuttavia, gli SNMP INFORM sono una versione riconosciuta di un TRAP SNMP. Quindi se vuoi sapere che il destinatario della notifica ha ricevuto il messaggio, per favore usa INFORMs. Notare che TCP non risolve questo problema poiché fornisce solo notifiche di livello 3 che il messaggio è stato ricevuto. Non vi è alcuna garanzia che il destinatario della notifica l’abbia effettivamente ricevuto. Gli SNMP INFORM effettuano il riconoscimento a livello di applicazione e sono molto più affidabili di quanto si supponga che un ack TCP indichi che l’hanno ottenuto.

Se i sistemi inviavano trap SNMP tramite TCP, potrebbero bloccare l’attesa di ACK dei pacchetti se si verifica un problema nel traffico verso il ricevitore. Se sono state generate molte trap, è ansible utilizzare le prese disponibili sul sistema e il sistema si blocca. Con UDP questo non è un problema perché è senza stato. Un problema simile ha preso BitBucket a gennaio anche se era il protocollo syslog piuttosto che SNMP – fondamentalmente, inavvertitamente stavano usando syslog su TCP a causa di un errore di configurazione, il server syslog è andato giù e tutti i server bloccati in attesa del syslog server per ACK i loro pacchetti. Se i trap SNMP sono stati inviati su TCP, potrebbe verificarsi un problema simile.

http://blog.bitbucket.org/2012/01/12/follow-up-on-our-downtime-last-week/

L’uso di trap con SNMP è considerato inaffidabile. Non dovresti davvero fare affidamento sulle trappole.

SNMP è stato progettato per essere utilizzato come protocollo di richiesta / risposta. I dettagli del protocollo sono semplici (da qui il nome, “semplice protocollo di gestione della rete”). E UDP è un trasporto molto semplice. Prova ad implementare TCP sul tuo agente di base: è molto più complesso di un semplice agente codificato usando UDP.

Le operazioni get / getnext di SNMP hanno un meccanismo di tentativi: se una risposta non viene ricevuta entro il timeout, la stessa richiesta viene inviata fino a un numero massimo di tentativi.

Controlla gli scritti di O’Reilly su SNMP: https://library.oreilly.com/book/9780596008406/essential-snmp/18.xhtml

Un vantaggio dell’utilizzo di UDP per trap SNMP è che è ansible indirizzare UDP a un indirizzo di broadcast e quindi metterli in campo con più stazioni di gestione su tale substring.