Dove reperire informazioni sul funzionamento di SIP e RTP

Voice su IP

Moderatore: Federico.Lagni

Rispondi
masterx81
Cisco enlightened user
Messaggi: 154
Iscritto il: mer 20 giu , 2007 11:20 am

Ciao a tutti...
Sto cercando di capire un po' come funziona il voip a livello tecnico, ovvero partendo dal basso... Ho gia' letto un sacco di roba su SIP ed RTP, ma ho ancora qualche lacuna... Per esempio, come fanno gli stream RTP (su UDP) a passare il nat? Perchè se non ho capito male il proxy SIP si occupa solo di mettere in comunicazione 2 host, ma la comunicazione RTP avviene tra gli host (che quasi sicuramente sono entrambi nattati).
Un altro dubbio che ho è come, senza aprire la porta 5060 nel mio cisco 877 il server proxy possa contattarmi per mandarmi il messaggio SIP per comunicarmi ad esempio che mi sta squillando il telefono. Capisco che il telefono quando si registra apre una conunicazione col proxy, ma la traslazione NAT prima o poi si deve chiudere...
Insomma, ho da partire dal basso, perchè ho collegato il telefono, ho fatto QoS, tutto bellissimo e funziona a meraviglio, ma ci sono un sacco di cose che mi sfuggono!

Grazie mille per qualunque aiuto!!!
Avatar utente
IsaCab
Network Emperor
Messaggi: 349
Iscritto il: ven 18 gen , 2008 3:45 pm
Contatta:

Ciao,
Per esempio, come fanno gli stream RTP (su UDP) a passare il nat?
Usando UDP per il trasporto su rete IP. Il problema è che trasporta all'interno gli IP provati dell'end-point che instaura la connessione con la conseguenza che la ricustruzione del flusso RTP di ritorno verrà fatto appunto su un IP privato causando la perdita dei pacchetti. Risultato : Si parla e non si sente o viceversa o ne uno ne l'altro.

Ci sono delle tecniche per ovviare a questo. Qui trovi qualche indicazione su cui approfondire :

http://www.isaserver.it/articoli/20070422-GM10.asp
Perchè se non ho capito male il proxy SIP si occupa solo di mettere in comunicazione 2 host
Non proprio. Il SIP usa l'SDP (Session Description Protocol) per la il signaling e l'RTP e RTP per il flusso audio.

Capisco che il telefono quando si registra apre una conunicazione col proxy
La registrazione (per farla breve) serve solo ad indicare al server SIP dove inoltrare la chiamata. Sempbre molto in breve traduce un numero telefonico (interno) in IP. Una sorta di DNS per il VOIP. Ripeto in breve!!

Ciao Giulio
-------
Giulio Martino [ http://www.voipexperts.it ]
Avaya IP Office PA
Microsoft MCP [IsaServer]
Cisco SMB[AM,EN] - SBCS [AM,EN]
Technical Writer e Supporter di ISAServer.it
Articoli - <http://www.isaserver.it/articoli/>
Forum - <http://www.isaserver.it/forum/>
Blog - <http://blogs.dotnethell.it/isacab/>
masterx81
Cisco enlightened user
Messaggi: 154
Iscritto il: mer 20 giu , 2007 11:20 am

IsaCab ha scritto:Ciao,
Innanzi tutto, grazie per l'interessamento!!!
IsaCab ha scritto: Usando UDP per il trasporto su rete IP. Il problema è che trasporta all'interno gli IP provati dell'end-point che instaura la connessione con la conseguenza che la ricustruzione del flusso RTP di ritorno verrà fatto appunto su un IP privato causando la perdita dei pacchetti. Risultato : Si parla e non si sente o viceversa o ne uno ne l'altro.

Ci sono delle tecniche per ovviare a questo. Qui trovi qualche indicazione su cui approfondire :

http://www.isaserver.it/articoli/20070422-GM10.asp
Io attualmente sto parlando del Voip 'domestico' (per esempio quello che fornisce exsorsa)...
Nel telefono ho solo configurato il server proxy sip sulla porta remota 5060, e nel router nulla, e tutto funziona a meraviglia. Se non ho capito male il telefono manda un messaggio SIP sulla porta udp per registrarsi al proxy, poi sta in attesa. Quinidi l'unica porta aperta all'esterno è quella aperta dal nat, originata dalle mia richiesta di registrazione. Ieri sera ho notato che quella nat rimane sempre aperta (presumo per via di keep alive), in modo che il proxy possa contattarmi in caso di chiamata. Per semplicita' sto escludendo il firewall (che nel mio caso rimane aperto graze all'ip inspect udp che ho messo nelle regole del firewall). Ammettendo che mi arriva una chiamata, mi arriva un messaggio sip sempre sulla mia porta nattata, con insieme il messaggio SDP, che specifica il tipo di comunicazione (RTP) ed altre cosette (probabilmente sto saltando qualche passaggio intermedio). A questo punto dovrei ricevere un flusso RTP... Ma come fa a passare il firewall, passare il NAT e raggiungere il mio telefono un stream che non ho iniziato io?
IsaCab ha scritto: Non proprio. Il SIP usa l'SDP (Session Description Protocol) per la il signaling e l'RTP e RTP per il flusso audio.
Cio' non mi spiega come fa il mio telefono a ricevere lo stream RTP...
IsaCab ha scritto: La registrazione (per farla breve) serve solo ad indicare al server SIP dove inoltrare la chiamata. Sempbre molto in breve traduce un numero telefonico (interno) in IP. Una sorta di DNS per il VOIP. Ripeto in breve!!
Appunto, nel momento in cui mi registro il server proxy si tiene traccia dell'ip e della porta che ha utilizzato il mio router per nattarmi, ed utilizza questo canale per mandarmi ulteriori segnali SIP... Se no non so come spiegarmi che i messaggi sip raggiungono il mio telefono!

Sono abbastanza confuso... Sto cercando un po' di libri da leggermi... Per caso hai qualche consiglio??
Grazie mille!!!
Avatar utente
IsaCab
Network Emperor
Messaggi: 349
Iscritto il: ven 18 gen , 2008 3:45 pm
Contatta:

Ciao,
Innanzi tutto, grazie per l'interessamento!!!
Figurati è un piacere ..
Nel telefono ho solo configurato il server proxy sip sulla porta remota 5060, e nel router nulla, e tutto funziona a meraviglia.
Ok perfetto. Molto probabilmente avrai inserito nella configurazione del telefono anche uno STUN server, oltre che il SIP server.
Se non ho capito male il telefono manda un messaggio SIP sulla porta udp per registrarsi al proxy, poi sta in attesa
Ok
Quinidi l'unica porta aperta all'esterno è quella aperta dal nat, originata dalle mia richiesta di registrazione
Più che parlare di porte aperte sarebbe più giusto parlare di connessioni attive. Non cambia molto dal browser che va su internet o dal client della posta elettronica.......

Ma come fa a passare il firewall, passare il NAT e raggiungere il mio telefono un stream che non ho iniziato io?
Semplice, lo fa grazie alla registrazione che instaura una connessione con il server. La connessione tra client e server e bidirezionale.

non so come spiegarmi che i messaggi sip raggiungono il mio telefono
Come fa la posta elettronica ad arrivare sul tuo PC ? Prima che qualcuno si scateni :D è chiaro che non è la stessa cosa. Ti ho fatto questo esempio solo per indicarti che una volta stabilita la connessione (che parte dal tuo client verso internet e quindi soggetta solo alle regole di firewall e non di NAT statico) su quella connessione viaggiano i dati.

Pensandoci e ripensadoci prova a pensare al funzionamento del protocollo FTP in modalità Passiva.

Ciao Giulio
-------
Giulio Martino [ http://www.voipexperts.it ]
Avaya IP Office PA
Microsoft MCP [IsaServer]
Cisco SMB[AM,EN] - SBCS [AM,EN]
Technical Writer e Supporter di ISAServer.it
Articoli - <http://www.isaserver.it/articoli/>
Forum - <http://www.isaserver.it/forum/>
Blog - <http://blogs.dotnethell.it/isacab/>
masterx81
Cisco enlightened user
Messaggi: 154
Iscritto il: mer 20 giu , 2007 11:20 am

IsaCab ha scritto: Ok perfetto. Molto probabilmente avrai inserito nella configurazione del telefono anche uno STUN server, oltre che il SIP server.
Assolutamente nessuno STUN server, che tra l'altro devo ancora capire come funziona :-)

Premetto che sono abbastanza fresco su una lettura dei protocolli TCP e UDP a basso livello :-)
IsaCab ha scritto: Più che parlare di porte aperte sarebbe più giusto parlare di connessioni attive. Non cambia molto dal browser che va su internet o dal client della posta elettronica.......
Invece cambia molto. Da quello che ne so sia il web che la posta elettronica (a parte il fatto che utilizzano il TCP e non l'UDP, i pacchetti UDP non prevedono three way handshaking, sono dei pacchetti 'usa e getta') son protocolli che hanno origine dalla macchina client, ed il server DEVE avere la porta 80 o 110 o 25 raggiungibile. Insomma, comunque la comunicazione sulle porte inizia da me che navigo, solo così il NAT sa fare la corrispondenza tra porte esterne ed il mio ip/porta interno. Invece le porte rdt si aprono solo quando effettivamente c'e' il traffico voce... E se il traffico RTP/UDP non inizia da me??? Come avviene da una chiamata che ricevo?
IsaCab ha scritto: Semplice, lo fa grazie alla registrazione che instaura una connessione con il server. La connessione tra client e server e bidirezionale.
Sono d'accordo che è bidirezionale, ma quando mi registro, mi rimane il nat aperto della 5060, ma no del traffico RTP.
Per es il tel manda una richiesta di registrazione da una porta >1024 - per esempio 1200 sulla 5060 del proxy server, il router che è in mezzo, sente che io cerco di uscire fuori, sostituisce l'ip del mittente con quello dell'interfaccia pubblica, sostituisce la porta con una sua, e si tiene in memoria la 'mappatura', in modo che quando il pacchetto ritorna il nat riconosca che io avevo mandato un pacchetto a quell'ip su quella porta e me lo riconsegna a me. Se io non inizio la comunicazione, il nat non puo' fare nulla se non scartare i pacchetti!
Quindi a questo punto ho aperto il 'tunnel' per comunicare tra una mia porta privata dell'ip phone sulla 5060 del server SIP (canale che presumo rimanga aperto grazie a dei keep alive, perchè i nat da quello che ne so hanno politiche che se un canale non serve piu' o non è utilizzato, venga distrutto), il quale puo' comunicarmi che sto per ricevere del traffico RTP. Ma a questo punto che succede??? Se ricevessi e basta il traffico RTP il nat butetrebbe via tutto, perchè non posso ricevere traffico RTP sulla mia porta con la quale ho instaurato la comunicazione SIP (se non sbaglio il traffico RTP viaggia su porte comprese tra 16000qualcosa a 32000qualcosa).
IsaCab ha scritto: Pensandoci e ripensadoci prova a pensare al funzionamento del protocollo FTP in modalità Passiva.
L'FTP in modalita' passiva se non ricordo male è il client che inizia 2 volte la comunicazione, anzichè aspettare la risposta dal server... Quindi se fosse così devo spedire traffico RTP prima di poterlo nuovamente ricevere...

Una cosa che non ricordo è se il NAT apre e lascia aperte le porte anche per le porte UDP, che in teoria non essendo pacchetti che normalmente hanno un ritorno, non dovrebbero lasciare varchi aperti nel NAT...

Ps. Quello che ho scritto è quello che mi ricordo dagli studi fatti... Ma potrei anche sbagliarmi, la mia memoria non è un granchè! :-)

Grazie per la pazienza!
Avatar utente
IsaCab
Network Emperor
Messaggi: 349
Iscritto il: ven 18 gen , 2008 3:45 pm
Contatta:

Ciao ,
Assolutamente nessuno STUN server, che tra l'altro devo ancora capire come funziona
Se riesci a parlare e a sentire o sei fortunato :D o il SIP Server fa anche da NAT o viene utilizzata qualche altra tecnica.
Insomma, comunque la comunicazione sulle porte inizia da me che navigo,
Perfetto. La comunicazione (non nel senso telefonico, ma di connessione9 inizia da te nel momento in cui il tuo telefono si registra sul sip server.
Invece le porte rdt si aprono solo quando effettivamente c'e' il traffico voce... E se il traffico RTP/UDP non inizia da me??? Come avviene da una chiamata che ricevo?
Il punto è proprio qui. Il traffico RDP inizia sempre da te, diversamente dovresti aprire le porte sul router.
Come avviene da una chiamata che ricevo?
E' tutto SDP fino a che non alzi la cornetta. Appena la alzi instauri una connessione RTP.

In caso di chiamata inizializzata da te, teoricamente è l'utente remoto ad alzare la cornetta e ad instaurare la connessione RTP. Qui sarebbe carino capire cosa succede analizzando il flusso del traffico SDP. Secondo me, ma mi riprometto di fare dei test (tempo permettendo) viene inviato un messaggio SDP al chiamante che inizializza la sessione RTP.

Se hai modo di analizzare il traffico sarebbe molto interessante.

Ciao Giulio
-------
Giulio Martino [ http://www.voipexperts.it ]
Avaya IP Office PA
Microsoft MCP [IsaServer]
Cisco SMB[AM,EN] - SBCS [AM,EN]
Technical Writer e Supporter di ISAServer.it
Articoli - <http://www.isaserver.it/articoli/>
Forum - <http://www.isaserver.it/forum/>
Blog - <http://blogs.dotnethell.it/isacab/>
masterx81
Cisco enlightened user
Messaggi: 154
Iscritto il: mer 20 giu , 2007 11:20 am

IsaCab ha scritto: Se riesci a parlare e a sentire o sei fortunato :D o il SIP Server fa anche da NAT o viene utilizzata qualche altra tecnica.
Ciao!!

Ti giuro che non so come fa a funzionare!!!
Dovrei mettere un hub ed un portatile e far girare un po ethreal...
Oppure fare un debug dei pacchetti dal cisco...

IsaCab ha scritto: Perfetto. La comunicazione (non nel senso telefonico, ma di connessione inizia da te nel momento in cui il tuo telefono si registra sul sip server.
Ok, ma inizia una sessione udp sulla 5060... Che permette messaggi SIP e SDP, ma non rtp... Ammesso che un messaggio SDP non dica al mio telefono di mandare il segnale RTP su una determinata porta, porta che il nat apre ed attraverso la quale il server puo' 'parlarmi', ma non dovrebbe essere una comunicazione full duplex? Cavolo, che casino! :-)

IsaCab ha scritto: Il punto è proprio qui. Il traffico RDP inizia sempre da te, diversamente dovresti aprire le porte sul router.
Ok, iniziera' pure da me, ma nel caso di comunicazione tra 2 telefoni SIP nattati, come le comunicazioni che ti fanno fare gratuite fatte dallo stesso provider VOIP (e ti giuro che pure questo funziona), chi cavolo inizia la connessione? Chi inizia per primo? Non credo che sia possibile fare una connessione RTP diretta, in quanto io non posso iniziare perchè non so che porte ha l'altro aperte, idem l'altro. Insomma, no traffico RTP!!! Ma se non ho capito male l'SDP non è nient'altro che del testo nel messaggio SIP, no? Il SIP si occupa degli stati della sessione, mentre l'SDP si preoccupa di stabilire porte, protocolli, porte, etc... Giusto?
Nel mio sao è possibile che via SDP si utilizzi un server tipo un proxy RTP, che mette in comunicazione i 2 dispositivi nattati?
Oppure i router (2 cisco 877w) fanno della magia nera con i pacchetti :-|

Se utilizzasse un proxy RTP, le chiamate tra utenti dello stesso provider dovrebbero essere estremamente lenti, in quanto i pacchetti avrebbero una latenza doppia (il tempo delle due connessioni a raggiungere il proxy).
Eppure la voce tra i 2 dispositivi non è affatto peggio delle chiamate ferso i numeri normali...

Mi sa che solo ethreal sa dirmi che succede :-|

IsaCab ha scritto: E' tutto SDP fino a che non alzi la cornetta. Appena la alzi instauri una connessione RTP.
Ed è proprio nell'RTP il divertente :-)

IsaCab ha scritto: In caso di chiamata inizializzata da te, teoricamente è l'utente remoto ad alzare la cornetta e ad instaurare la connessione RTP. Qui sarebbe carino capire cosa succede analizzando il flusso del traffico SDP. Secondo me, ma mi riprometto di fare dei test (tempo permettendo) viene inviato un messaggio SDP al chiamante che inizializza la sessione RTP.

Se hai modo di analizzare il traffico sarebbe molto interessante.
Infatti, appena ho un po di tempo mi metto giu', perchè a me piace capire come funzionano le cose, e sto discorso mi interessa molto :-)
Metto un hubbino tra telefono e cisco e lancio ethreal...
Leggere i log del debug dei pacchetti ip del cisco mi fa letteralmente impazzire... Molto meglio la presentazione di ethreal...
Avatar utente
IsaCab
Network Emperor
Messaggi: 349
Iscritto il: ven 18 gen , 2008 3:45 pm
Contatta:

Ciao,
Che permette messaggi SIP e SDP, ma non rtp
Il SIP è : SDP + RTP
Ok, iniziera' pure da me, ma nel caso di comunicazione tra 2 telefoni SIP nattati, come le comunicazioni che ti fanno fare gratuite fatte dallo stesso provider VOIP (e ti giuro che pure questo funziona), chi cavolo inizia la connessione? Chi inizia per primo?
E' compito del server SIP
Il SIP si occupa degli stati della sessione, mentre l'SDP si preoccupa di stabilire porte, protocolli, porte, etc... Giusto?
Il SIP usa l'SDP per la parte di sessione e l'RTP per il flusso audio
Nel mio sao è possibile che via SDP si utilizzi un server tipo un proxy RTP, che mette in comunicazione i 2 dispositivi nattati?
Non solo nel tuo caso. E' il uno dei compiti del server SIP o Proxy SIP

Ed è proprio nell'RTP il divertente
Il processo completo lo puoi capire solo leggendo la comunicazione SDP. Anche perchè l'RTP ha poco da leggere. Vedi RFC relativo.

Infatti, appena ho un po di tempo mi metto giu', perchè a me piace capire come funzionano le cose, e sto discorso mi interessa molto
Metto un hubbino tra telefono e cisco e lancio ethreal...
Approccio che sposo in pieno. E' molto utile capire fino in fondo come funzionano le cose, oltre che interessante.

Attendiamo tue news allora ...... (a chi fa prima :D )

Ciao Giulio
-------
Giulio Martino [ http://www.voipexperts.it ]
Avaya IP Office PA
Microsoft MCP [IsaServer]
Cisco SMB[AM,EN] - SBCS [AM,EN]
Technical Writer e Supporter di ISAServer.it
Articoli - <http://www.isaserver.it/articoli/>
Forum - <http://www.isaserver.it/forum/>
Blog - <http://blogs.dotnethell.it/isacab/>
masterx81
Cisco enlightened user
Messaggi: 154
Iscritto il: mer 20 giu , 2007 11:20 am

http://it.wikipedia.org/wiki/Session_In ... n_Protocol
Qua dice che SIP e SDP sono 2 cose separate per nome, ma in realta' il pacchetto è lo stesso... Quindi i messaggi SDP, sono effettivamente messaggi SIP, ed i messaggi SIP non c'entrano nulla con l'RTP... Infatti facendo la class-map per beccare i messaggi SIP, matcha proprio solo i pacchetti di comunicazione (ma nulla di RTP).

Cmq queste sono le porte nattate appena acceso il telefono:
udp x.x.x.x:1025 192.168.1.11:1025 193.204.114.232:123 193.204.114.232:123
udp x.x.x.x:1032 192.168.1.11:5060 87.253.102.109:5060 87.253.102.109:5060

dove x.x.x.x è il mio ip pubblico, 192.168.1.11 è l'ip locale del telefono, 193.204.114.232 è l'ip del server NTP (configurato nel telefono), e dove 87.253.102.109 è il mio server proxy SIP

Invece una volta instaurata una connessione, si aggiunge questa:
udp x.x.x.x:10002 192.168.1.11:10002 87.253.102.101:30578 87.253.102.101:30578

E l'87.253.102.101 non so chi diavolo sia! Probabilmente è il famoso server RTP che mi permette di passare il nat, passato dai messaggi SDP!

La mia ricerca per sta sera finisce qua, ho ancora un papiro da studiare su come usare il mio 877W come server DNS :-)
Gia' che mi è costato caro, gli faccio fare piu' cose possibili!!! :-) Finchè non ho la cpu al 100%, non smetto di aggiungerci roba :-)

Ho notato che il telefono voip ha una porta ethernet chiamata PC; sarebbe troppo bello se fosse un hubbettino :-o
Appena ho un po' di tempo, riprendo gli esperimenti!

IsaCab, grazie mille per il supporto!
Rispondi