Δίκτυα Υπολογιστών Κεφάλαιο 23 – Πρωτόκολλα πραγματικού χρόνου: SIP
Δημοσιεύτηκε από τον/την codebrakes στις
Δίκτυα Υπολογιστών
Κεφάλαιο 23 - Πρωτόκολλα πραγματικού χρόνου: SIP
Τι είναι το πρωτόκολλο εκκίνησης συνόδου – SIP
Το πρωτόκολλο SIP σχεδιάστηκε αρχικά από τους Mark Handley, Henning Schulzrinne, Eve Schooler και Jonathan Rosenberg και τυποποιήθηκε ως RFC 2543 το έτος 1996, στην συνεχεία ως RFC 2543 τον Νοέμβρη του 2000 και τέλος ως RFC 3261 τον Ιούνη του 2002. Όπως δηλώνεται κι το όνομα του το πρωτόκολλο εκκίνησης συνόδου (session initiation protocol) είναι ένα δικτυακό πρωτόκολλο πραγματικού χρόνου το οποίο μας βοηθάει για να πραγματοποιηθεί μια μία σύνοδος (session).
Το πρωτόκολλο SIP εμπλέκεται στο τμήμα της σηματοδοσίας σε πολυμεσικές επικοινωνιακές συνόδους όπου η κύρια χρήση του είναι για εγκαθίδρυση και τερματισμό κλήσεων (είτε αυτές είναι φωνής είτε video). Για να καταλάβουμε τι εννοούμε με τον όρο σηματοδοσία ας πάρουμε ένα καθημερινό παράδειγμα όπου έχουμε δύο άτομα τον Bob και την Alice. O Bob για να επικοινωνήσει με την Alice μιλάει κατευθείαν σε αυτήν. Το μήνυμα του Bob (που ουσιαστικά αποτελεί μια ηχητική συχνότητα) αυτό γίνεται αντιληπτό από την Alice η οποία τον ακούει και στην συνέχεια του απαντάει. Με αυτόν τον τρόπο ο Bob και η Alice μπορούν να επικοινωνήσουν μεταξύ τους.
Επικοινωνία μεταξύ Bob και Alice
Στην μεταφορά πολυμεσικών δεδομένων υπάρχουν δύο τύποι μηνυμάτων. Το πρώτο είναι τα πακέτα σηματοδοσίας (όπου χρησιμοποιούν το πρωτόκολλο SIP) και το δεύτερο είναι τα πακέτα πολυμεσικών δεδομένων (όπου χρησιμοποιούν το πρωτόκολλο RTP).
Πρωτόκολλο εκκίνησης συνόδου – SIP
- Σε μια πολυμεσική σύνοδο όπου μεταφέρονται δεδομένα φωνής πραγματικού χρόνου το αναλογικό σήμα (δηλαδή η φωνή μας) κωδικοποιείται σε δυαδικό (0 και 1) τα οποία τοποθετούνται σε IP πακέτα. Στην συνέχεια η πληροφορία τοποθετείται σε πακέτα και δρομολογείται προς τον παραλήπτη.
- Όταν φτάσουν όλα τα πακέτα στον παραλήπτη η πληροφορία αποκωδικοποιείται προκειμένου να παραχθεί η αρχική πληροφορία.
- Για να γίνει όμως αυτό πρέπει οι δύο μεριές (αποστολέας και παραλήπτης) να γνωρίζουν τις IP διευθύνσεις τους και να χρησιμοποιούν τους ίδιους μηχανισμούς κωδικοποίησης.
Εδώ δημιουργείται ένα ερώτημα πως μπορεί (είτε ο αποστολέας είτε ο παραλήπτης) να γνωρίζει την IP διεύθυνση που θα πρέπει να στείλει τα πακέτα και πως θα γνωρίζουν τι κωδικοποίηση θα χρησιμοποιήσουν ;;;
Το πρωτόκολλο SIP βοηθάει σε αυτήν την διαδικασία. Μπορούμε να το χαρακτηρίσουμε σαν ένα βιβλίο κανόνων το οποίο με αυτό μπορούμε να εντοπίσουμε την άλλη μεριά, και τι είδους κωδικοποίηση πρέπει να χρησιμοποιήσουμε για την διαδικασία κωδικοποίησης και αποκωδικοποίησης των δεδομένων.
Αν λοιπόν ο Bob θέλει να επικοινωνήσει με την Alice χρησιμοποιώντας το πρωτόκολλο SIP θα πρέπει να ακολουθήσει όλους τους κανόνες που ορίζει αυτό το πρωτόκολλο για την δομή του πακέτου. Ο Bob στέλνει ένα πακέτο SIP στην Alice η οποία αναγνωρίζει το SIP πακέτο αυτό ως πρόσκληση για επικοινωνία. Στην συνέχεια ανταλλάσσουν πληροφορία μεταξύ τους. Όταν κάποιο από τα δυο μέρη επιθυμεί τερματισμό σύνδεσης στέλνει σήμα αποχώρησης. Αν αυτό φτάσει στην άλλη μεριά τότε και η ίδια θα στείλει σήμα αποχαιρετισμού και τερματίζεται η σύνδεση.
Το πρωτόκολλο εκκίνησης συνόδου – (Session Initiation Protocol – SIP) σχεδιάστηκε από τον οργανισμό IETF. Είναι ένα πρωτόκολλο επιπέδου εφαρμογής που εγκαθιδρύει, διαχειρίζεται και τερματίζει πολυμεσικές συνόδους (συγκεκριμένα διαδικτυακές κλίσεις). Χρησιμοποιείται για να δημιουργήσει διμερείς, πολλαπλές ή multicast συνόδους (sessions). Το πρωτόκολλο SIP σχεδιάστηκε έτσι ώστε να είναι ανεξάρτητο από το επίπεδο μεταφοράς έτσι ώστε να τρέχει πάνω από το TCP ή UDP. Είναι text-based, όπως δηλαδή το HTTP και χρησιμοποιεί απλά μηνύματα. Υπάρχουν έξι καθορισμένα μηνύματα τα οποία είναι:
- Πρόσκλησης (INVITE)
- Επιβεβαίωσης (ACK)
- Αποχώρησης (BYE)
- Επιλογών (OPTIONS)
- Ακύρωσης (CANCEL)
- Καταχώρησης (REGISTER)
Κάθε μήνυμα έχει μια επικεφαλίδα και ένα κύριο μέρος (body). Η επικεφαλίδα αποτελείται από μερικές γραμμές που περιγράφουν την δομή του μηνύματος, τις δυνατότητες του χρήστη που πραγματοποιεί την κλίση, τον τύπο πολυμέσων κοκ.
- Ο χρήστης που πραγματοποιεί μια κλίση εκκινεί μια σύνοδο με ένα μήνυμα πρόσκλησης (INVITE).
- Όταν η άλλη μεριά απαντήσει σε αυτήν την κλήση, ο χρήστης που πραγματοποίησε την κλίση αυτή στέλνει στην συνέχεια ένα μήνυμα επιβεβαίωσης (ACK) για να βεβαιωθεί ότι όλα είναι εντάξει.
- Για τον τερματισμό της SIP συνόδου χρησιμοποιείται το μήνυμα αποχαιρετισμού (BYE)
- Το μήνυμα επιλογών (OPTIONS) “εξετάζει” τις δυνατότητες τις εκάστοτε συσκευής
- Το μήνυμα ακύρωσης (CANCEL) χρησιμοποιείται για να ακυρώσει μια διεργασία εκκίνησης συνόδου όταν αυτή πρόκειται να ξεκινήσει.
- Τέλος το μήνυμα καταχώρησης (REGISTER) δημιουργεί μια σύνδεση όταν η άλλη μεριά που καλούμε δεν είναι διαθέσιμη.
Σε μια κανονική τηλεφωνική σύνδεση ένας αριθμός τηλεφώνου καθορίζει τον αποστολέα, και ένας άλλος αριθμός τηλεφώνου καθορίζει τον παραλήπτη. Το πρωτόκολλο SIP είναι αρκετά ευέλικτο. Στο πρωτόκολλο SIP, μια διεύθυνση ηλεκτρονικού ταχυδρομείου (e-mail), ένας αριθμός τηλεφώνου, και άλλοι τύποι διευθύνσεων μπορούν να χρησιμοποιηθούν για να εντοπίσουν είτε τον αποστολέα είτε τον παραλήπτη. Παρόλα αυτά, οι διευθύνσεις χρειάζονται να είναι στην δομή του SIP. Η παρακάτω εικόνα αποτυπώνει κάποια από τα κλασσικά SIP formats
Για να εγκαθιδρυθεί μια SIP σύνοδος απαιτείται μια τρίμερής χειραψία (three-way handshake), όπως γίνεται δηλαδή και στο πρωτόκολλο TCP. Ας υποθέσουμε ότι έχουμε έναν χρήστη Α που θέλει να πραγματοποιήσει μια κλίση με τον χρήστη B που προφανώς θα δεχτεί αυτήν την κλίση.
- Εγκαθίδρυση συνόδου: Ο χρήστης Α θα στείλει ένα μήνυμα πρόσκλησης (INVITE), χρησιμοποιώντας είτε το TCP είτε το UDP ως πρωτόκολλο μεταφοράς δεδομένων. Αν ο χρήστης Β επιθυμεί να αρχίσει αυτή η σύνοδος SIP στέλνει ένα απαντητικό μήνυμα για να επιβεβαιώσει ότι έχει λάβει τα απαραίτητα δεδομένα από τον χρήστη Α. Ο χρήστης Α στην συνέχεια στέλνει ένα μήνυμα επιβεβαίωσης (ACK).
- Επικοινωνία: Όταν η σύνοδος εγκαθιδρυθεί ο χρήστης Α και ο χρήστης Β μπορούν να επικοινωνήσουν μεταξύ τους χρησιμοποιώντας δύο θύρες επικοινωνίας.
- Τερματισμός συνόδου: Όταν η σύνοδος εγκαθιδρυθεί ο χρήστης Α και ο χρήστης Β μπορούν να τερματίσουν την σύνδεση με ένα μήνυμα αποχαιρετισμού (BYE)
Τι θα συμβεί όμως αν ο χρήστης Β (δηλαδή ο χρήστης που λαμβάνει την κλίση) δεν είναι εκείνη την δεδομένη στιγμή μπροστά στον υπολογιστή του ;;;
Μπορεί επίσης να μην έχει σταθερή IP αν χρησιμοποιείται το DHCP. Το πρωτόκολλο SIP έχει έναν μηχανισμό (παρόμοιο με αυτόν του DNS) έτσι ώστε να βρίσκει την IP διεύθυνση του υπολογιστή τον οποίο χρησιμοποιεί ο χρήστης που λαμβάνει την κλίση. Για να πραγματοποιηθεί αυτή η καταγραφή, το SIP χρησιμοποιεί την λογική της καταγραφής. Το πρωτόκολλο SIP ορίζει κάποιους servers ως καταχωρητές. Σε οποιαδήποτε στιγμή ένας χρήστης καταχωρείται σε έναν από αυτούς τους servers. Οι εν λόγω servers γνωρίζουν την IP διεύθυνση του χρήστη που λαμβάνει την κλήση.
Όταν λοιπόν ο χρήστης Α (δηλαδή ο χρήστης που πραγματοποιεί την κλίση) και ο χρήστης B (δηλαδή ο χρήστης που λαμβάνει την κλίση) θέλουν να επικοινωνήσουν μεταξύ τους μπορούν να χρησιμοποιήσουν τις διευθύνσεις e-mail αντί μιας IP διεύθυνσης σε ένα INVITE μήνυμα. Ο εξουσιοδοτημένος εξυπηρετητής (proxy server) στέλνει ένα μήνυμα εύρεσης (lookup) προς τον server που έχει καταχώρηση για τον χρήστη Β. Όταν ο proxy server λάβει απάντηση από τον εξυπηρετητή που έχει την καταχώρηση τοποθετεί στο μήνυμα πρόσκλησης (INVITE) την IP διεύθυνση του χρήστη Β που μόλις βρήκε. Το μήνυμα αυτό στέλνεται στην συνέχεια προς τον χρήστη B. Στο πρωτόκολλο SIP οι δύο οντότητες (αποστολέας και παραλήπτης) καλούνται ως πράκτορες SIP (SIP Agents). Οι SIP πράκτορες αναλαμβάνουν την διαχείριση της σηματοδοσίας καθώς και για την λήψη και κωδικοποίηση των πολυμεσικών δεδομένων. Ο αποστολέας (SIP πράκτορας) στέλνει πακέτα σηματοδοσίας (SIP) καθώς και πολυμεσικά δεδομένα (RTP) στον παραλήπτη (SIP πράκτορας).
Τι γίνεται όμως αν ο αποστολέας δεν γνωρίζει την IP διεύθυνση του παραλήπτη ;;;
Όπως αναφέραμε παραπάνω οι SIP πράκτορες (τερματικοί χρήστες) βρίσκουν τις IP διευθύνσεις με την βοήθεια του πρωτόκολλου SIP. Αυτό το επιτυγχάνουν χρησιμοποιώντας 4 οντότητες:
- Εξυπηρετητής καταχώρησης (Registrar)
- Εξυπηρετητές παροχέα (Provider ή Location)
- SIP καταχωρήσεις (SIP Registry)
- Εξουσιοδοτημένος εξυπηρετητής (Proxy server)
Έστω ότι έχουμε δυο χρήστες τον User Agent A και User Agent B. Στέλνει την IP διεύθυνση του μαζί με μια δημόσια διεύθυνση καταχώρησης (που στο παράδειγμα μας είναι sip: 2007@factory.gr) προς τον διακομιστή registrar. Στην συνέχεια ο registrar διακομιστής αποθηκεύει την πληροφορία αυτή σε έναν ειδικό πίνακα καταχώρησης που διαθέτει
Από τα παραπάνω συμπεραίνουμε ότι οι οντότητες εξυπηρετητών registrar και provider όπως επίσης και ο καταχωρητής SIP μας βοηθάνε έτσι ώστε οι User agents να μπορούν να βρουν IP διευθύνσεις άλλων user agents που δεν γνωρίζουν. Εδώ όμως τίθεται ένα ερώτημα ποιον ρόλο αναλαμβάνει ο proxy server ;;;
Ουσιαστικά οι οντότητες registrar και provider δεν αποτελούν τόσο εξυπηρετητές αλλά υπηρεσίες που είναι ενσωματωμένες πάνω σε έναν proxy server
Πέραν της εγκαθίδρυσης κλίσης υπάρχουν κι άλλες υπηρεσίες που χρησιμοποιούμε. Μια από αυτές είναι η προώθηση κλήσης (call forwarding). Μια λύση θα ήταν να προσθέσουμε αυτήν την λειτουργία πάνω στον proxy server, αυτό όμως είναι ενάντια στην λογική του SIP. Σε έναν proxy server που κάνει χρήση του πρωτοκόλλου SIP κάθε υπηρεσία που χρησιμοποιούμε απονέμεται σε έναν ξεχωριστό εξυπηρετητή που ονομάζεται εξυπηρετητής υπηρεσιών (feature server). Στον proxy server ρυθμίζεται η δρομολόγηση και η επικοινωνία με τους αντίστοιχους εξυπηρετητές υπηρεσιών. Με αυτόν τον τρόπο μπορούμε να προσθέσουμε όσες υπηρεσίες θέλουμε. Οι ξεχωριστές υπηρεσίες παρέχουν μεγάλη ευελιξία, είναι εύκολο να αναβαθμιστούν, μπορούμε να προσθέσουμε όποτε θέλουμε μια νέα υπηρεσία κι απλά να ρυθμίσουμε τους κανόνες δρομολόγησης κοκ.
Ας δούμε ένα άλλο σενάριο τι θα συμβεί αν ένας χρήστης θέλει να καλέσει κάποιον χρήστη που βρίσκεται σε ένα άλλο domain. Ας πάρομε για παράδειγμα τον User Agent A ο οποίος ανήκει στο domain @storeathens και θέλει να καλέσει τον user agent B με domain @storeheraklion. Όταν το SIP μήνυμα πρόσκλησης (SIP invite) του user agent A φτάσει στον δικό του proxy server ο δεύτερος δεν θα κοιτάξει τις SIP καταχωρήσεις για να βρει το domain αυτό. Αντ’ αυτού θα χρησιμοποιήσει το πρωτόκολλο DNS (DNS Lookup) προκειμένου το DNS να βρει το domain που θέλει να στείλει το πακέτο.
Σε αυτό το σημείο μπορούμε να αναρωτηθούμε τι θα συμβεί αν κάποιος προσπαθήσει να επιτεθεί σε ένα τέτοιο δίκτυο και να ανακατευθύνει τα μηνύματα σε κάποιο μη έμπιστο domain ;;;
Σε αυτήν την περίπτωση το δίκτυο το προστατεύει η οντότητα Session Control Border – SBC όπου ελέγχει την κίνηση δεδομένων εντός και εκτός του δικτύου κι αντιστοιχεί τις εσωτερικές IP διευθύνσεις με ψεύτικες IP διευθύνσεις. Προφανώς ο SBC ελεγκτής γνωρίζει όταν θα λάβει ένα απαντητικό μήνυμα ότι η IP αυτή δεν ισχύει και την αντικαθιστά με την πραγματική όπου στην συνέχεια το προωθεί προς το εσωτερικό δίκτυο.
Ο Media Server είναι μια άλλη επίσης σημαντική οντότητα όπου η χρήση του προφέρει την δυνατότητα στους user agents για ηχογράφηση και αναπαραγωγή ηχητικών μηνυμάτων καθώς και δυνατότητες επιλογών DTMF. Τοποθετείται στους εξυπηρετητές υπηρεσιών. Ένας Media server λαμβάνει όλες τις ροές πολυμέσων από πολλούς χρήστες και τις πολυπλέκει έτσι ώστε να μπορούν όλοι οι χρήστες να ακούνε ο ένας τον άλλο.
Μια τελευταία ιδιότητα του πρωτοκόλλου SIP είναι η δυνατότητα κλίσης προς χρήστες του αναλογικού δικτύου (PSTN) δηλαδή του κλασσικού τηλεφώνου. Υπάρχον δύο οντότητες που βοηθάνε σε αυτό, η πρώτη καλείται ως πύλη δεδομένων (media gateway) και η δεύτερη ως πύλη σηματοδοσίας (signalling gateway). Η πύλη σηματοδοσίας παίρνει ένα SIP μήνυμα πρόσκλησης, παίρνει το περιεχόμενο του μηνύματος, δημιουργεί ένα άλλο μήνυμα κατάλληλο για την άλλη μεριά και το στέλνει στον παραλήπτη. Στο παράδειγμα μας παίρνει το περιεχόμενο του SIP μηνύματος και δημιουργεί ενα SS7 μήνυμα τύπο ΙΑΜ για το PSTN δίκτυο. H πύλη δεδομένων (media gateway) χρησιμοποιείται για ύπαρξη συμβατότητας σε διαφορετικές κωδικοποιήσεις (codecs).
Τελευταία ενημέρωση: 26/04/2018