2009-02-26 20 views
18

Ho appena esaminato wikipedia's entry on out-of-band data e per quanto ho capito, i dati OOB sono in qualche modo contrassegnati più importanti e trattati come dati ordinari, ma trasmessi in un flusso separato, che mi confonde profondamente .: Come gestisco i dati fuori banda

La domanda reale sarebbe (oltre a "Qualcuno potrebbe spiegare quali dati OOB è?"):

Sto scrivendo un'applicazione UNIX che utilizza i socket e la necessità di fare uso di select() e si chiedeva che cosa fare con il parametro exceptfds? Devo inserire tutte le mie prese in questo parametro e reagire a tali eventi? O li ignoro semplicemente?

risposta

19

So che hai deciso che non è necessario per gestire i dati OOB, ma qui ci sono alcune cose da tenere a mente se mai fare cura di OOB ...

  • IPv4 doesn' t in realtà invia dati OOB su un canale separato o con priorità diversa. È solo una bandiera sul pacchetto.
  • I dati OOB sono estremamente limitati - 1 byte!
  • I dati OOB possono essere ricevuti sia in linea che separatamente in base alle opzioni socket
  • Un "eccezione" che segnala i dati OOB può verificarsi anche se la successiva lettura non contiene i dati OOB (lo stack di rete sul mittente può contrassegnare qualsiasi dati già in coda, quindi l'altro lato saprà che c'è OOB AL PIÙ PRESTO). Questo viene spesso gestito inserendo un ciclo di "scarico" in cui si scartano i dati finché non sono disponibili i dati OOB effettivi.

Se questo sembra un po 'confuso e inutile, è perché lo è per lo più. Lì sono buoni motivi per utilizzare OOB, ma è raro. Un esempio è FTP, in cui l'utente potrebbe trovarsi nel mezzo di un trasferimento di grandi dimensioni ma decide di interrompere. L'interruzione viene inviata come dati OOB. A quel punto il server e il client mangiano solo ulteriori dati "normali" per drenare tutto ciò che è ancora in transito. Se l'interruzione è stata gestita in linea con i dati, è necessario elaborare tutto il traffico in sospeso, per poi essere scaricati.

È bene essere consapevoli del fatto che OOB esiste e le basi di come funziona, nel caso ne abbiate mai bisogno. Ma non preoccuparti di impararlo a fondo, a meno che tu non sia solo curioso. Le probabilità sono decenti si può mai usarlo.

+0

Quindi, se ho capito bene, l'uso perfetto dei dati OOB è in qualsiasi flusso binario, come l'esempio di trasmissione del file dato, o un flusso audio/video, ecc. – soulmerge

+0

Binario o testo, non importa. Ma i file binari tendono ad essere più grandi, risultando in code e pacchetti più completi in transito. Utilizzare OOB quando si desidera segnalare un evento eccezionale e non si desidera elaborare alcun dato già in coda o in volo. – dwc

+0

Ho trovato questo articolo piuttosto interessante: http://www.serverframework.com/asynchronousevents/2011/10/out-of-band-data-and-overlapped-io.html – jwp

2

Penso di aver trovato la risposta su this page. In breve:

Non è necessario gestire i dati OOB sul lato di ricezione se non sono inviando eventuali dati OOB. Avevo pensato che i dati OOB potrebbero essere generati dal sistema operativo del mittente.

+0

Sì, se non viene inviato non è necessario gestirlo. – dwc

0

Non è necessario gestirlo dall'estremità ricevente anche se si è inviandolo: i dati OOB vengono ignorati in modo trasparente in tutte le circostanze, a meno che non si attivi attivamente la ricezione.

1

"Qualcuno potrebbe spiegare quali sono i dati OOB?"

Nella terminologia di comunicazione (Out-Of-Band) OOB indica semplicemente un pacchetto malevolo che contiene un puntatore urgente (URG flage nel pacchetto TCP).

Il puntatore urgente è un campo utilizzato raramente nell'intestazione TCP, utilizzato per indicare che alcuni dei dati nel flusso TCP devono essere elaborati rapidamente dal destinatario.

Da WIKI 1 Dai dati OOB, Uno è in grado di interrompere o interrompere il flusso in coda invece di attendere il completamento del flusso. Questo viene fatto specificando i dati come urgenti. Questo dice al programma ricevente di elaborarlo immediatamente, insieme al resto dei dati urgenti. Al termine, TCP informa l'applicazione e ritorna alla coda di flusso. Un esempio è quando TCP viene utilizzato per una sessione di accesso remoto, l'utente può inviare una sequenza di tastiere che interrompe o interrompe il programma all'altra estremità. Questi segnali sono più spesso necessari quando un programma sulla macchina remota non funziona correttamente. I segnali devono essere inviati senza attendere che il programma finisca il trasferimento corrente. I dati TCP OOB non sono stati progettati per la moderna Internet. Il puntatore urgente modifica solo l'elaborazione sull'host remoto e non velocizza l'elaborazione sulla rete stessa. Quando arriva all'host remoto ci sono due interpretazioni leggermente diverse del protocollo, il che significa che solo i singoli byte dei dati OOB sono affidabili. Ciò presuppone che sia affidabile poiché è uno degli elementi di protocollo meno comunemente utilizzati e tende ad essere implementato male.

+2

Non è necessario essere dannosi; è [tipo di sciocco specificare una funzione solo per uso dannoso] (https://tools.ietf.org/html/rfc3514), o almeno [funziona meglio se non lo si dice a nessuno] (http: // projectbullrun.org/dual-ec/index.html). – SamB

Problemi correlati