Passa al contenuto principale

6.2.1. SUBSCRIBE Request (Richiesta SUBSCRIBE)

6.2.1. SUBSCRIBE Request (Richiesta SUBSCRIBE)

Una richiesta SUBSCRIBE inizia con l'intestazione DSO standard da 12 byte [RFC8490], seguita dal TLV primario SUBSCRIBE (Primary TLV). Una richiesta SUBSCRIBE è illustrata nella figura 1.

Il campo MESSAGE ID DEVE essere impostato a un valore univoco che il client non stia usando per nessun'altra operazione attiva su questa sessione DSO. Ai fini di questo documento, un MESSAGE ID è in uso su questa sessione se il client lo ha usato in una richiesta per cui non ha ancora ricevuto una risposta, o se lo ha usato per una sottoscrizione che non ha ancora annullato con UNSUBSCRIBE. Nella risposta SUBSCRIBE, il server DEVE ripetere il valore MESSAGE ID invariato.

Gli altri campi dell'intestazione DEVONO essere impostati come descritto nella specifica DSO [RFC8490]. Il campo DNS OPCODE contiene il valore OPCODE per DNS Stateful Operations (6). I quattro campi di conteggio devono essere zero e le quattro sezioni corrispondenti devono essere vuote (cioè assenti).

Il DSO-TYPE è SUBSCRIBE (0x0040).

Il DSO-LENGTH è la lunghezza del DSO-DATA che segue, che specifica il nome, il tipo e la classe (class) dei record cercati.

Il DSO-DATA per una richiesta SUBSCRIBE DEVE contenere esattamente un NAME, TYPE e CLASS. Poiché le richieste SUBSCRIBE sono inviate su TCP, più messaggi di richiesta DSO SUBSCRIBE possono essere concatenati in un singolo flusso TCP e impacchettati efficientemente in segmenti TCP.

Se accettata, la sottoscrizione resta in vigore finché il client non annulla la sottoscrizione con UNSUBSCRIBE o finché la sessione DSO tra client e server non viene chiusa.

Le richieste SUBSCRIBE su una data sessione DEVONO essere uniche. Un client NON DEVE inviare un messaggio SUBSCRIBE che duplichi il nome, il tipo e la classe di una sottoscrizione attiva esistente su quella sessione DSO. Ai fini di questa corrispondenza, si applica l'insensibilità alle maiuscole/minuscole DNS stabilita per le lettere US-ASCII [RFC0020] (ad esempio, «example.com» e «Example.com» sono uguali). Se un server riceve un tale messaggio SUBSCRIBE duplicato, si tratta di un errore fatale e il server DEVE interrompere forzatamente la connessione immediatamente.

Il wildcarding DNS non è supportato. Cioè, un carattere asterisco («») in un messaggio SUBSCRIBE corrisponde solo a un asterisco letterale («») in un nome e a nient'altro. Analogamente, un CNAME in un messaggio SUBSCRIBE corrisponde solo a un record CNAME con quel nome nella zona e a nessun altro record con quel nome.

Un client PUÒ effettuare SUBSCRIBE a record sconosciuti al server al momento della richiesta (purché il nome ricada in una o più zone di cui il server è responsabile), e questo non è un errore. Il server NON DEVE restituire NXDOMAIN in questo caso. Il server DEVE accettare queste richieste e inviare notifiche push (Push Notifications) se e quando vengono trovati record corrispondenti in futuro.

Se né TYPE né CLASS sono ANY (255), si tratta di una sottoscrizione specifica ai cambiamenti per il nome, tipo e classe dati. Se uno o entrambi di TYPE o CLASS sono ANY (255), questa sottoscrizione corrisponde a tutti i tipi e/o tutte le classi come appropriato.

NOTA: Una peculiarità poco nota del DNS è che nelle richieste DNS QUERY, QTYPE e QCLASS 255 significano «ANY», non «ALL». Indicano che il server dovrebbe rispondere con qualsiasi record corrispondente di sua scelta, non necessariamente con tutti i record corrispondenti. Ciò può portare a risultati sorprendenti e inattesi, in cui una query restituisce alcune risposte valide ma non tutte, e rende le query con QTYPE = 255 (ANY) meno utili di quanto a volte si immagini.

Se usato insieme a SUBSCRIBE, TYPE 255 e CLASS 255 devono essere interpretati come «ALL», non «ANY». Dopo aver accettato una sottoscrizione in cui uno o entrambi di TYPE o CLASS sono 255, il server DEVE inviare aggiornamenti di notifica push (Push Notification Updates) per TUTTI i cambiamenti di record che corrispondono alla sottoscrizione, non solo per alcuni di essi.

<|tool▁calls▁begin|><|tool▁call▁begin|> StrReplace