Θέματα Προγραμματισμού Διαδικτύου Εισαγωγή - Πρωτόκολλα Στελιος Σφακιανάκης Εαρινό 2019 Αυτή η εργασία χορηγείται με άδεια Creative Commons Αναφορά Δημιουργού - Μη Εμπορική Χρήση - Παρόμοια Διανομή 1
Περιεχόμενα Εισαγωγή στο Διαδίκτυο Διευθύνσεις Πρωτόκολλα Παγκόσμιο Ιστός - HTTP 2
Διαδίκτυο - Πρωτόκολλα - Υπηρεσίες 3 Διαδικτυοκεντρικός Προγραμματισμός, Στέλιος Σφακιανάκης
Αρχιτεκτονική του Ιστού ως υπηρεσία διαδικτύου Web APIs HTML CSS Javascript Παγκόσμιος Ιστός HTTP DNS TLS UDP TCP IP Υπηρεσίες και πρωτόκολλα Διαδικτύου IP : Internet Protocol TCP: Transmission Control Protocol UDP: User Datagram Protocol TLS: Transport Layer Security DNS: Domain Name Sercvice 4 Διαδικτυοκεντρικός Προγραμματισμός, Στέλιος Σφακιανάκης
Internet Protocol (IP) και οι διευθύνσεις του Καθε υπολογιστής προσβάσιμος στο Ιντερνετ έχει μια διεύθυνση IP (Internet Protocol address) Στην πιο διαδεδομένη έκδοση version 4 του IP, οι διευθύνσεις ειναι 4 bytes (δηλ. 32 bit) που συνήθως τις γραφουμε ως 4 αριθμοί χωρισμένοι με τελεία π.χ. 147.95.40.60 Οι διευθύνσεις (όπως και στην καθημερινότητα μας) επιτρέπουν την εύρεση μιας "τοποθεσίας" και τη "δρομολόγηση" σε αυτήν Το πρωτόκολλο IP ορίζει πώς γινεται η μεταφορά πακέτων δεδομένων στο Διαδίκτυο, μεσω ενδιάμεσων δικτύων και υπολογιστών-κόμβων. Καθε πακέτο IP περιέχει την IP διεύθυνση του "αποστολέα" και την διεύθυνση του προορισμού. 5
Transmission Control Protocol (TCP) Τα πακέτα δεδομένων του IP μπορεί να χαθούν ή να φτάσουν με διαφορετική σειρα στον προορισμό τους. Το TCP προσφέρει αξιοπιστία, χειρισμό λαθών, και αλγορίθμους για την βελτιστοποίηση της μεταφοράς των δεδομένων. Χρησιμοποιεί την έννοια της σύνδεσης δηλ. ορίζει μηνύματα για την αρχικοποίηση του "καναλιού" επικοινωνίας πριν τη μεταδοση των δεδομένων των εφαρμογών, καθώς και μηνύματα για το "κλείσιμο" της σύνδεσης Τα πακέτα του TCP περιέχονται μεσα σε πακέτα του IP και με τη σειρά τους περιέχουν της θύρες (ports) του αποστολέα και του παραλήπτη. Ενώ οι IP διευθύνσεις προσδιορίζουν τον "υπολογιστή" από τον οποίο ξεκινάνε ή καταλήγουν τα πάκετα, οι θύρες προσδιορίζουν τις εφαρμογές (π.χ. web server) που επικοινωνούν. Έτσι π.χ. το λειτουργικό σύστημα του υπολογιστή προορισμού μπορεί να παραδώσει το πακέτο πληροφορίας στο κατάλληλο πρόγραμμα που το περιμένει. 6
UDP και DNS Η αξιόπιστη λειτουργία του TCP όμως εισάγει πολυπλοκότητα και καθυστερήσεις. Σε περιπτώσεις που η γρήγορη παράδοση της πληροφορίας (π.χ. για βίντεο και ήχο) είναι πιο σημαντική από την αξιόπιστη μπορεί να χρησιμοποιηθεί το User Datagram Protocol (UDP) Τα UDP πακέτα που ανταλλάσονται μεταξύ δυο εφαρμογών στο διαδίκτυο μπορεί να φτάσουν με λαθος σειρά και δεν υπάρχουν αναφορές παράδοσης οπότε ο αποστολέας δεν γνωρίζει αν ενα μήνυμα έφτασε στον προορισμό. Όπως για το TCP έτσι και τα πακέτα του UDP μεταδίδονται μεσα σε πακέτα IP και περιέχουν ομοίως αριθμούς θυρών Ενώ η πλειονότητα των εφαρμογών χρησιμοποιεί TCP, υπάρχει μια πολύ κρίσιμη υπηρεσία που το χρησιμοποιεί: το DNS! 7
Domain Name Service (DNS) Η Υπηρεσία Ονομάτων (DNS) του Διαδικτύου επιτρέπει την αντιστοίχιση των αριθμητικών διευθύνσεων IP σε φιλικά για τον χρήστη ονόματα Τα ονόματα είναι δομημένα σε μια ιεραρχική δομή (δένδρο) που επιτρέπει την κατανεμημένη κατασκευή και διαχείρηση τους Η σχέση μεταξύ ονομάτων και διευθύνσεων IP δεν είναι 1 προς 1. Δηλαδή σε ένα όνομα μπορεί να αντιστοιχούν πολλές διευθύνσεις IP και σε μια διεύθυνση πολλά ονόματα. By DNS_Tree.svg: Sylvain Leroux (talk)derivative work: Ggia (talk) - DNS_Tree.svg, CC BY-SA 3.0, https:// commons.wikimedia.org/w/index.php?curid=15525424 Π.χ. Το google.com έχει τις 108.177.127.102, 108.177.127.100, 108.177.127.138, 108.177.127.101, 108.177.127.113, 108.177.127.139,... 8
TLS Το Transport Layer Security (TLS) εξασφαλίζει την ασφάλεια της επικοινωνίας στο Διαδίκτυο Κρυπτογράφηση, που εξασφαλίζει την ιδιωτικότητα (privacy) Ακεραιότητα δεδομένων (δηλ. δεν μπορεί ένας ενδιάμεσος κόμβος να αλλάξει την πληροφορία που ανταλλάσεται) Αυθεντικοποίηση, δηλ. ταυτοποίηση των επικοινωνούντων μερών Χρησιμοποιείται ευρέως για να ασφαλίσει πρωτόκολλα και υπηρεσίες εφαρμογής, π.χ. HTTPS, SMTPS (email),... 9
HTTP και ο Παγκόσμιος Ιστός 10 Διαδικτυοκεντρικός Προγραμματισμός, Στέλιος Σφακιανάκης
Ο Παγκόσμιος Ιστός Ο Παγκόσμιος Ιστός (World Wide Web) είναι ενα παγκόσμιο σύστημα διασυνδεδεμένων εγράφων υπερκειμένου που είναι διαθέσιμα στο Ιντερνετ Τι είναι το υπερκείμενο? Ειναι το μη γραμμικο κείμενο, δηλαδή αν μπορεί ο αναγνώστης να μεταβεί από κάποιο σημείο του εγγράφου σε κάποιο άλλο (ή σε άλλο έγγραφο) χωρίς να χρειαστεί να προσπελάσει σειριακά ό,τι βρίσκεται ενδιάμεσα Επομένως, το χαρακτηριστικό στοιχείο του υπερκειμένου είναι η ύπαρξη (υπερ)συνδέσμων (hyperlinks) 11
Ο Παγκόσμιος Ιστός: λίγη ιστορία Τη δεκαετία του 1960 ο πρόγονος του Ιντερνετ, το λεγόμενο ARPANET, δημιουργείται από το Υπουργείο Άμυνας των ΗΠΑ To 1974 δημοσιεύεται το TCP (Transmission Control Protocol) από τους Cerf και Kahn και το 1983 το TCP/IP γίνεται ο θεμέλιος λίθος του ARPANET To 1984 υλοποιείται το πρώτο Domain Name System (DNS), η υποδομή ονοματοδοσίας του Internet Το Ηλεκτρονικό Ταχυδρομείο (e-mail) και η ανταλλαγή εγγράφων (File Transfer Protocol - FTP) οι κύριες υπηρεσίες του Το 1989 ο Sir Tim Berners-Lee προτείνει ενα κατανεμημένο σύστημα υπερκειμένου στο CERN (δες επόμενο slide) και πριν τα Χριστούγεννα του 1990 υλοποιεί τον πρώτο εξυπηρετητή (server) και τον πρώτο πλοηγητή (web browser)..μαζί (επανα)εισαγει τον όρο Hypertext (υπερκείμενο) και υλοποιεί το Πρωτόκολλο Υπερκειμένου (HTTP) και την Γλώσσα Σήμανσης Υπερκειμένου (HTML) Η πρώτη τεκμηριωμένη του HTTP ειναι η 0.9 το 1991, το 1996 η έκδοση 1.0 (RFC 1945), ενώ το 1997 η έκδοση 1.1 (RFC 2068) με βελτιώσεις το 1999 (RFC 2616) Ο πρώτος ευρέως διαθέσιμος browser ήταν ο Mosaic (1993) στον οποίο βασίστηκε ο δημοφιλής Netscape Navigator (1994) Ξεκινάει ο (1ος) πόλεμος των πλοηγητών (browser war) με τη διάθεση απο την Microsoft του Internet Explorer (1995). Η Netscape χάνει και δημιουργεί το Mozilla Foundation που το 2004 διαθετει τον (ανοικτου λογισμικού) Mozilla Firefox To 1998 δημιουργείται η Google και σε λίγα χρόνια εξαφανίζει τις άλλες μηχανές αναζήτησης (Lycos, Altavista, Yahoo!) Το 2008 παρουσιάζεται ο Chrome browser από την Google Το HTTP 2 δημοσιεύεται ως RFC 7540 τον Μαίο 2015 12
Information Management: A Proposal This proposal concerns the management of general information about accelerators and experiments at CERN. It discusses the problems of loss of information about complex evolving systems and derives a solution based on a distributed hypertext system. Tim Berners-Lee, CERN March 1989 https://www.w3.org/history/1989/proposal.html 13 Διαδικτυοκεντρικός Προγραμματισμός, Στέλιος Σφακιανάκης
Το πρωτόκολλο HTTP 14 Διαδικτυοκεντρικός Προγραμματισμός, Στέλιος Σφακιανάκης
HTTP Έιναι ένα πρωτόκολλο εφαρμογής "πάνω" από τα TCP/IP Η προτυποποιημένη θύρα επικοινωνίας είναι το 80 και στην περίπτωση που χρησιμοποιείται το TLS (δηλ. για το HTTPS) είναι το 443 Τα μηνύματα που ανταλλάσονται είναι σε κείμενο που κάνει εύκολο το να δούμε τί πληροφορία ανταλλάσεται (π.χ. στο Chrome DevTools) 15
Διακομιστές και Πελάτες HTML, CSS, JS Διακομιστής GET / Πελάτης Το HTTP ακολουθεί μια λογική αίτησης - απάντησης (requestresponse) μεταξύ του πελάτη (π.χ. browser σε ενα PC) και του διακομιστή (server) Το πρόγραμμα Πελάτης ξεκινάει την επικοινωνία στέλνοντας μια αίτηση στον Διακομιστή Ο Διακομιστής απαντάει στέλνοντας την αιτούμενη πληροφορία 16
"Under the hood" Πελάτης (Browser) Διακομιστής (Web Server) Internet 17
URLs Τα Uniform Resource Locators (URLs) είναι διευθύνσεις για σελίδες στον Ιστό (web pages) Ενσωματώνουν πληροφορία για το πρωτόκολλο επικοινωνίας (http/ https), την διεύθυνση/όνομα του διακομιστή, την θύρα επικοινωνίας, το "μονοπάτι" στο συγκεκριμένο αρχείο/έγγραφο, και άλλες πληροφορίας 18
HTTP μηνύματα Όπως συνηθίζεται σε όλα τα πρωτόκολλα τα μηνύματα HTTP περιέχουν: Μια κεφαλίδα (headers), και (προαιρετικά) ένα "σώμα" (body/payload) Τα headers μηνυμάτων που στέλνουν οι πελάτες περιέχουν την "μεθοδο" (π.χ. GET) και τη διύθυνση της σελίδας, ενώ τα μηνύματα που επιστρέφει ο διακομιστής περιέχουν κωδικούς κατάστασης και άλλα μεταδεδομένα 19
20 Διαδικτυοκεντρικός Προγραμματισμός, Στέλιος Σφακιανάκης
Request GET / HTTP/1.1 Host: www.teicrete.gr Connection: keep-alive Pragma: no-cache Cache-Control: no-cache Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh... DNT: 1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Accept-Encoding: gzip, deflate, br Accept-Language: el,en-us;q=0.9,en;q=0.8 Response HTTP/1.1 200 OK Connection: Keep-Alive Transfer-Encoding: chunked Expires: Sun, 19 Nov 1978 05:00:00 GMT Date: Thu, 18 Oct 2018 07:00:20 GMT Content-Type: text/html; charset=utf-8 Etag: "1539844751-0" Server: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.26 OpenSSL/1.0.1f X-Powered-By: PHP/5.5.9-1ubuntu4.26 X-Drupal-Cache: HIT Content-Language: el X-Frame-Options: SAMEORIGIN X-Generator: Drupal 7 (https://www.drupal.org) Cache-Control: public, max-age=600 Last-Modified: Thu, 18 Oct 2018 06:39:11 GMT Vary: Cookie,Accept-Encoding Content-Encoding: gzip 21
(Βασικές) Μέθοδοι HTTP GET: ανάκτηση σελίδας από διακομιστή HEAD: επιστροφή μονο της κεφαλίδας (header) του μηνύματος δηλ μόνο μεταδεδομένα (π.χ. μέγεθος αρχείου) χωρίς το περιεχόμενο της σελίδας/αρχείου POST: υποβολή φόρμας ή άλλων δεδομένων στον διακομιστή για δημιουργία νέας "σελίδας" PUT: υποβολή δεδομένων για την ενημέρωση σελίδας DELETE: αίτηση για κατάργηση (διαγραφή) της σελίδας στον διακομιστή 22
HTTP κώδικες κατάστασης Τα HTTP Status codes είναι αριθμοί 3 ψηφίων, από τα οποία το πρώτο προσδιορίζει την γενικη κατηγορία της απάντησης (response): 1xx : πληροφοριακά μηνύματα 2xx : Επιτυχία!! 3xx : ανακατεύθυνση σε άλλο URL 4xx: Αποτυχία, οφείλεται στον πελάτη 400: Bad request 401: Unauthorized (π.χ. λαθος κωδικός) 403: Forbidden 404: Not Found 5xx : Αποτυχία, οφείλεται στον διακομιστή 500: Internal Server Error (π.χ. ο διακομιστής δεν μπορεί να επικοινωνήσει με τη βάση δεδομένων) 23