ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ 4η Γραπτή Εργασία ΠΛΗ 23 Ακαδημαϊκό Έτος 2012 - 2013 ( Τόμος Β’, Κεφάλαια 4 – 8 και Τόμος Γ’ ) Ημερομηνία Παράδοσης 08.05.2013 ΕΝΔΕΙΚΤΙΚΕΣ ΑΠΑΝΤΗΣΕΙΣ Άσκηση 1 Επέκταση συστήματος διαχείρισης φιλοδωρημάτων καφετέριας με χρήση XML/XSL Στην Άσκηση αυτή ζητείται να προσθέσετε κάποιες λειτουργίες στο σύστημα που αναπτύχθηκε στα πλαίσια της 3ης Εργασίας. Μπορείτε να χρησιμοποιήσετε είτε το σύστημα που αναπτύξατε εσείς, είτε το σύστημα των υποδειγματικών απαντήσεων. Υποθέστε ότι ένας χρήστης θέλει να εξάγει, για ένα συγκεκριμένο αριθμό ημερών, το σύνολο των φιλοδωρημάτων με τις λεπτομέρειές τους (ποσό, ημερομηνία-ώρα, όνομα και επώνυμο σερβιτόρου), ώστε να επεξεργαστεί τα δεδομένα αυτά με κάποιο πρόγραμμα λογιστικών φύλλων. Η εξαγωγή θα γίνεται με χρήση XML αρχείων που περιέχουν κατάλληλα δομημένα τα δεδομένα αυτά. Για το σκοπό αυτό θα πρέπει: (a) (Ερώτηση 1) Να περιγράψετε τη δομή του XML αρχείου, ορίζοντας το κατάλληλο σχήμα με χρήση DTD. Επίσης, να παρουσιάσετε ένα παράδειγμα ενός σωστά δομημένου και έγκυρου XML αρχείου. (b) (Ερώτηση 2) Στην αρχική σελίδα της εφαρμογής φιλοδωρημάτων, θα πρέπει να προστεθεί μία επιλογή με την οποία θα εμφανίζεται, για μία χρονική περίοδο που θα ορίζει ο χρήστης, το XML αρχείο σε νέο παράθυρο (θα δημιουργείται δυναμικά) μορφοποιημένο κατάλληλα με XSL. Η λίστα των φιλοδωρημάτων θα περιλαμβάνει το όνομα και επώνυμο του σερβιτόρου, το ποσό και την ημερομηνία ώρα. Τα φιλοδωρήματα να εμφανίζονται από το πιο πρόσφατο στο πιο παλιό. Ακόμη, στο τέλος του αρχείου θα πρέπει να εμφανίζεται ο ημερήσιος μέσος όρος των φιλοδωρημάτων (για την επιλεγμένη περίοδο) στο παραγόμενο XML. Ο υπολογισμός του μέσου όρου προτείνεται να γίνει server side, από την PHP. (c) (Ερώτηση 3) Πριν την εμφάνιση των XML αρχείων με τη χρήση XSL, θα πρέπει να προστεθεί έλεγχος του παραγόμενου XML με βάση το DTD του (a). Σε περίπτωση λάθους, θα πρέπει να εμφανίζεται αντίστοιχο μήνυμα στο χρήστη. Τέλος, στην κορυφή της τροποποιημένης σελίδας (b) θα πρέπει να εμφανίζεται ο συνολικός αριθμός των φιλοδωρημάτων που εμφανίζονται στο XML. Η λειτουργία αυτή θα πρέπει να υλοποιηθεί είτε με συνάρτηση της XSL, είτε με χρήση DOM. Για την ανάγνωση ενός XML αρχείου, (http://gr.php.net/manual/en/refs.xml.php). η PHP προσφέρει διάφορες DOMDocument (http://gr.php.net/manual/en/class.domdocument.php). SimpleXML (http://gr.php.net/manual/en/book.simplexml.php). 1 βιβλιοθήκες ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Η βιβλιοθήκη DOM δίνει τη δυνατότητα ελέγχου του XML αρχείου με βάση το DTD για την εγκυρότητα ή όχι της δομής: http://php.net/manual/en/domdocument.validate.php Επίσης, για έλεγχο της εγκυρότητας του XML με βάση το DTD στην SimpleXML, δείτε εδώ: http://www.phpbuilder.com/columns/adam_delves20060719.php3 Εναλλακτικά, ο έλεγχος μπορεί να γίνει με JavaScript όπως περιγράφεται εδώ : http://www.w3schools.com/dtd/dtd_validation.asp Οι βιβλιοθήκες DOMDocument και SimpleXML της PHP, υποστηρίζουν Ελληνικούς χαρακτήρες με χρήση της κωδικοποίησης UTF-8. Αν χρησιμοποιείτε διαφορετική κωδικοποίηση, χρήσιμη θα σας φανεί η συνάρτηση iconv(). Παραδοτέα: Ο DTD ορισμός της δομής και τουλάχιστον ένα XML αρχείο που θα λειτουργεί σωστά με την εφαρμογή σας (a). Ο HTML/PHP κώδικας της εφαρμογής που υλοποιεί τα (b) και (c). Τα XSL αρχεία (b), (c). Screenshots από τη λειτουργία της εφαρμογής. Στόχος: Η κατανόηση και η πρακτική εφαρμογή των τεχνικών προγραμματισμού εφαρμογών παγκόσμιου ιστού με χρήση XML, DTD, DOM, XSL. Απαραίτητες γνώσεις: Για την καλύτερη κατανόηση των εννοιών και των προγραμματιστικών τεχνικών, είναι χρήσιμη η παρακολούθηση των παρουσιάσεων web casts No 8 – 11, καθώς και η μελέτη του «UNIT23 - Book2 - HT2» και του νέου ΕΔΥ με hypertext υλικό για «Μετασχηματισμό XML αρχείων με χρήση XSL, μέσω PHP» από το 2ο CD του ΕΔΥ. Επίσης, βοηθητική είναι και η χρήση των σχετικών χρήσιμων δικτυακών τόπων από τη σελίδα της Θ.Ε. 2 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΠΑΝΤΗΣΕΙΣ ΑΣΚΗΣΗΣ 1 (a) Ερώτηση 1. Το DTD αρχείο είναι το εξής: <!DOCTYPE tips [ <!ELEMENT tips (tip*)> <!ELEMENT tip (f_name, l_name, amount, date)> <!ELEMENT f_name (#PCDATA)> <!ELEMENT l_name (#PCDATA)> <!ELEMENT amount(#PCDATA)> <!ELEMENT date (#PCDATA)> ]> Το παραπάνω DTD δηλώνει ότι το root element θα είναι το tips, το οποίο μπορεί να έχει κανένα, ένα ή περισσότερα παιδιά, συγκεκριμένα το element tip. Δηλαδή, θεωρούμε ένα σύνολο φιλοδωρημάτων που έχει καθένα φιλοδώρημα ξεχωριστά. Εν συνεχεία, δηλώνεται ότι το κάθε element tip θα έχει παιδιά τα εξής elements: f_name, l_name, amount, date. Το κάθε ένα από αυτά τα elements θα είναι της μορφής περιεχομένου (#PCDATA). Το XML αρχείο που θα χρησιμοποιήσουμε, έχει την παρακάτω δομή: <?xml version="1.0" encoding="UTF-8" standalone="true"?> -<tips> -<tip> <f_name/> <l_name/> <amount/> <date/> </tip> </tips> (b) Ερώτηση 2 Στη σελίδα της εφαρμογής όταν εισάγεται ο χρήστης και στη σελίδα όπου παρουσιάζεται η λίστα με τα φιλοδωρήματα, έχει προστεθεί μία φόρμα στην οποία ο χρήστης μπορεί να εισάγει το χρονικό διάστημα για το οποίο θέλει να εμφανίσει τα φιλοδωρήματα και ένα button που αναγράφει XML και μόλις το πατά ο χρήστης εμφανίζεται σε νέο παράθυρο το XML αρχείο μορφοποιημένο με XSL. Στη λίστα εμφανίζονται τα φιλοδωρήματα με το ονοματεπώνυμο αυτού που τα καταχώρησε και την ημερομηνία που έγινε η καταχώρηση. Το button για την XML το εμφανίζουμε στο αρχείο view_tip.php: 3 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ <img src='images/xml.jpg' alt='XML' title='XML' style='padding:0;margin:0;float:center;' onclick='checkentryform();' onmouseover='this.style.cursor="pointer"'/> Ο κώδικας για όλη τη φόρμα είναι ο εξής: <form name="date_tip" method="post" action="xml_tips.php" enctype="multipart/form-data"> <table align= 'center' border="0" cellspacing="1" style="border-collapse: collapse; color:#000000" bordercolor="#111111" width="60%"> <tr> <th colspan='5'><h3> Επιλέξτε χρονικό διάστημα </h3><br></th> </tr> <tr> <th colspan='5'> Παρακαλώ εισάγετε την ημερομηνία στη μορφή "2013-0422"<br></th> </tr> <tr> <td align='center'>Από</td> <td><?php echo"<input type='date' name='date_f' >"; ?></td> <td></td> <td align='center'>Μέχρι</td> <td><?php echo"<input type='date' name='date_l' >"; ?> </td> </tr> <tr> <td align='center' colspan='5'><br> <img src='images/xml.jpg' alt='XML' title='XML' style='padding:0;margin:0;float:center;' onclick='checkentryform();' onmouseover='this.style.cursor="pointer"'/> </td> </tr> </table> </form> Εικόνα 1. Φόρμα συμπλήρωσης για εμφάνιση XML Για την checkentry() ο κώδικας είναι ο εξής: 4 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ <script> function checkentryform() { var cForm = document.forms.date_tip; var errstr = ''; //alert(cForm.date_l.value); // Ημερομηνία: Έλεγχος για να μην είναι κενό το πεδίο if ( cForm.date_f.value==''){ errstr = errstr+'Το πεδίο Aπό δεν μπορεί να είναι κενό.\n'; cForm.date_f.style.backgroundColor="#ff6347"; } if ( cForm.date_l.value==''){ errstr = errstr+'Το πεδίο Μέχρι δεν μπορεί να είναι κενό.\n'; cForm.date_l.style.backgroundColor="#ff6347"; } var loc=13; var str="./logged_in.php?menu="+loc+"&p1="+cForm.date_f.value+"&p2="+cForm.date_l.value; window.open(str); // για να ανοίξει σε νέο παράθυρο //document.forms.date_tip.submit(); } </script> Έτσι, όταν πατάμε το κουμπί, εμφανίζεται ένα νέο παράθυρο με τα φιλοδωρήματα, με τη μορφή που έχει δοθεί από το παρακάτω XSL αρχείο: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:output method = "html"></xsl:output> <xsl:template match="/" > <p align="center"><b>Φιλοδωρήματα</b></p> <xsl:if test="count(/tips/tip) > 0"> <TABLE border="0" cellpadding="2" cellspacing="2" align="center"> <TR><TD align="center" bgcolor="#CCFFFF"><b>Όνομα</b></TD> <TD align="center" bgcolor="#CCFFFF"><b>Επώνυμο</b></TD> <TD align="center" bgcolor="#CCFFFF"><b>Ποσό</b></TD> <TD align="center" bgcolor="#CCFFFF"><b>Ημερομηνία</b></TD></TR> <xsl:for-each select="tips/tip"> <TR><TD valign="top" bgcolor="#CCFFFF"><xsl:value-of select="f_name" /></TD> <TD valign="top" bgcolor="#CCFFFF"><xsl:value-of select="l_name" /></TD> <TD valign="top" bgcolor="#CCFFFF"><xsl:value-of select="amount" /></TD> <TD valign="top" bgcolor="#CCFFFF"><xsl:value-of select="date" /></TD></TR> </xsl:for-each> 5 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ </TABLE> <br/> <p align="center"><font color="red"><b><xsl:value-of φιλοδωρήματα συνολικά</b></font></p> </xsl:if> select="count(/tips/tip)"/> </xsl:template> </xsl:stylesheet> Αφού πατηθεί το κουμπί XML, ελέγχουμε αν ο χρήστης έχει εισάγει χρονικό διάστημα για την εμφάνιση των φιλοδωρημάτων μέσω XML. Το αρχείο tips_xsl.xsl δηλώνει ότι τα φιλοδωρήματα θα εμφανίζονται σε έναν πίνακα όπου κάθε στήλη θα αντιστοιχεί στο όνομα του σερβιτόρου, στο ποσό του φιλοδωρήματος και στην ημερομηνία που καταχωρήθηκε. Αυτό θα γίνεται για όλα τα φιλοδωρήματα που υπάρχουν στο χρονικό διάστημα που δηλώθηκε, γι’ αυτό χρησιμοποιείται η for-each. Τέλος, έχει προστεθεί ένας μετρητής count(/tips/tip) ο οποίος μετράει πόσες φορές θα εμφανιστεί το element reminder στο XML, δηλαδή, όσα φιλοδωρήματα θα υπάρχουν γι’ αυτό το χρονικό διάστημα (Ερώτημα 3). Πατώντας το κουμπί «XML», εμφανίζεται η παρακάτω εικόνα (Εικόνα 2) σε νέο παράθυρο: 6 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Εικόνα 2. Εμφάνιση XML Για να εμφανίσουμε τα φιλοδωρήματα για το χρονικό διάστημα που έχουμε επιλέξει, θέτουμε τις ημερομηνίες του χρονικού διαστήματος ως παράμετρο στο URL και παίρνουμε με $_GET τις ημερομηνίες από το URL: $d1= $_GET['p1']; $d2= $_GET['p2']; 7 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Στη συνέχεια δημιουργούμε ένα query: $query_tip = "SELECT t1.id_tip, t1.amount, t1.date_time, t1.kod_user, t2.kod_user, t2.f_name, t2.l_name from tip as t1 INNER JOIN user as t2 on t1.kod_user=t2.kod_user WHERE date_time>='$d1' AND date_time<='$d2 23:59:59' ORDER BY date_time DESC"; Για να εμφανίσουμε τον ημερήσιο μέσο όρο των φιλοδωρημάτων, αρκεί να δημιουργήσουμε το εξής query: $query_avg = "SELECT * , count( * ) , sum( amount ) , avg( amount ) FROM tip WHERE date_time>='$d1' AND date_time<='$d2 23:59:59' GROUP BY DATE_FORMAT( date_time, '%d')"; Για να δημιουργήσουμε το συνολικό ημερήσιο μέσο όρο, θα αθροίσουμε τους μέσους όρους που θα έχουν προκύψει από το παραπάνω query και θα τους διαιρέσουμε με τον αριθμό των ημερών που έχουν γίνει καταχωρήσεις μέσα στο ζητούμενο χρονικό διάστημα. Έτσι ο κώδικας θα είναι ως εξής: $avg_t += $avg; $mo= $avg_t/$j; $hmo = number_format($mo, 2); // για να κρατήσουμε μέχρι 2 δεκαδικά ψηφία ( c ) Ερώτηση 3 Εν συνεχεία, δημιουργούμε το αρχείο xml_tips.php όπου χτίζουμε αρχικά το XML μας με βάση το DTD. Η υλοποίηση ελέγχου επικύρωσης της δομής του αρχείου που εμφανίζεται – σύμφωνα με το DTD που έχουμε ορίσει στο πρώτο ερώτημα – γίνεται με τον παρακάτω κώδικα: if ($create_xml) { $xsl_filename = "tips_xsl.xsl"; $doc = new DOMDocument(); $xsl = new XSLTProcessor(); $doc->load($xsl_filename); $xsl->importStyleSheet($doc); $doc->loadXML($create_xml); if(!$doc->validate()){ echo "<p>Το αρχείο δεν είναι έγκυρο σύμφωνα με το DTD<p>"; 8 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ } else { $tip = $doc->getElementsByTagName('tip'); //Το $tip είναι ένα DOMNodeList echo $xsl->transformToXML($doc); } } Δημιουργούμε ένα νέο αντικείμενο της κλάσης Dom Document ($doc = new DOMDocument();) και κάνουμε validate ((!$doc->validate()). Αν δεν είναι σωστό, τότε εμφανίζεται μήνυμα λάθους στο χρήστη για τη μορφή του DTD. Επίσης, στον κώδικα χρησιμοποιούμε τη συνάρτηση getElementsByTagName η οποία επιστρέφει μια λίστα των στοιχείων tips που υπάρχουν στο αρχείο που δημιουργήθηκε. 9 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Άσκηση 2 Απόδοση του πρωτοκόλλου HTTP και Caching Εισαγωγή Σκοπός της παρούσας άσκησης, είναι η μέτρηση της απόδοσης του πρωτοκόλλου HTTP αλλά και των διαδικασιών caching που πραγματοποιούν οι browsers που χρησιμοποιούμε καθημερινά. Ερώτηση 1 Για την εκτέλεση της Ερώτησης 1 θα πρέπει να χρησιμοποιήσετε το εργαλείο Wireshark, το οποίο είναι δωρεάν διαθέσιμο στο http://www.wireshark.org/download.html για λειτουργικά συστήματα Windows/Linux/Mac. To Wireshark είναι ένα εργαλείο το οποίο “συλλαμβάνει” και εμφανίζει την κίνηση του δικτύου στον υπολογιστή σας. Για τη χρήση του εργαλείου Wireshark θα πρέπει να επιλέξετε την κατάλληλη διεπαφή που χρησιμοποιείται για την πρόσβασή σας από τη διαθέσιμη λίστα του εργαλείου, όπως εμφανίζεται στην παρακάτω εικόνα: Επίσης, για τους σκοπούς της παρούσας ερώτησης, στο πεδίο του φίλτρου “σύλληψης” το οποίο εμφανίζεται στην παρακάτω εικόνα θα πρέπει να συμπληρώσετε την IP διεύθυνση του διακομιστή που σας ζητείται στα παρακάτω ερωτήματα στο πεδίο ip.addr, καθώς και το όρισμα http (ακριβώς όπως παρουσιάζεται στην εικόνα παραπάνω), ώστε το Wireshark να καταγράφει μόνο κίνηση που αφορά το διακομιστή της άσκησης, καθώς και το πρωτόκολλο HTTP. Εκκινήστε το εργαλείο Wireshark, εκκινήστε τη “σύλληψη” κίνησης στη διεπαφή (interface) του δικτύου σας και ρυθμίστε το φίλτρο να εμφανίζει μόνο την HTTP κίνηση από και προς το διακομιστή με διεύθυνση 150.140.8.26 (όπως περιγράφηκε παραπάνω). - Σε περίπτωση που είστε σε περιβάλλον Linux, χρησιμοποιείστε τον telnet client όπως στην 3η Γραπτή Εργασία για την αποστολή http εντολών, όπως αυτές περιγράφονται παρακάτω. - Σε περίπτωση που είστε σε περιβάλλον Windows, θα χρησιμοποιήσετε το εργαλείο PuTTY. Κατεβάστε το εργαλείο PuTTY από εδώ: http://www.putty.org/ . Στη ρύθμιση Connection > Telnet επιλέξτε Passive για Telnet negotiation mode. Στην επιλογή Window, πληκτρολογήστε ένα μεγάλο αριθμό (π.χ. 1000) στο Lines of scrollback. Στη σελίδα Session, επιλέξτε Telnet για Connection type. 10 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Πληκτρολογήστε για hostname ru6.cti.gr και 80 στο πεδίο port. Επιλέξτε Never για Close window on exit. (Καλό είναι σε αυτό το σημείο να σώσετε τις ρυθμίσεις αυτές ώστε να μην κάνετε την ίδια διαδικασία κάθε φορά. Απλά δώστε κάποιο όνομα στο πεδίο Saved sessions, και πατήστε save. Πλέον μπορείτε να φορτώσετε τις ρυθμίσεις επιλέγοντας το όνομα που δώσατε, και πατώντας Load.) Τέλος, πατήστε Open. α) Στο παράθυρο του telnet client που χρησιμοποιείτε (telnet ή putty) γράψτε το παρακάτω και πατήστε enter δύο φορές: GET /eap/image.jpg HTTP/1.1 host: www.ru6.cti.gr Cache-Control: no-cache Παρατηρήστε την κίνηση που καταγράφει το Wireshark. Στη συνέχεια επαναλάβετε τα παραπάνω αλλά με την αντικατάσταση του header Cache-Control με το If-Modified-Since, όπως φαίνεται παρακάτω. Δηλαδή, δώστε: GET /eap/image.jpg HTTP/1.1 host: www.ru6.cti.gr If-Modified-Since: Sun, 12 Mar 2012 13:34:54 GMT Και στη συνέχεια επαναλάβετε με το παρακάτω αίτημα: GET /eap/image.jpg HTTP/1.1 host: www.ru6.cti.gr If-Modified-Since: Sun, 12 Mar 2005 13:34:54 GMT Παρατηρήστε την καταγραφή του Wireshark. Καταγράψτε και συγκρίνετε τους χρόνους ολοκλήρωσης των αιτημάτων που εκτελέσατε. Παραθέστε χαρακτηριστικά screenshots από το Wireshark και εξηγείστε που οφείλονται οι διαφορές που παρατηρείτε. β) Στη συνέχεια επισκεφθείτε από το φυλλομετρητή σας τη σελίδα http://ru6.cti.gr/ru6/. Εκτελέστε hard refresh (Ctrl + F5) και καταγράψτε με τη βοήθεια του Wireshark το χρόνο ολοκλήρωσης του αιτήματος. Κάντε το ίδιο εκτελώντας απλή ανανέωση της σελίδας (F5). Παραθέστε χαρακτηριστικά screenshots από το Wireshark και εξηγείστε που οφείλονται οι διαφορές που παρατηρείτε. ΠΡΟΣΟΧΗ: Για την εκτέλεση των ερωτήσεων, θα πρέπει να βεβαιωθείτε πως η λειτουργία του caching στο φυλλομετρητή σας δεν είναι απενεργοποιημένη. Ερώτηση 2 α) Περιγράψτε τι είναι και πώς χρησιμοποιείται το πεδίο επικεφαλίδας ETag του πρωτοκόλλου HTTP. β) Περιγράψτε τι είναι και πώς χρησιμοποιείται το πεδίο επικεφαλίδας Expires του πρωτοκόλλου HTTP. 11 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Ερώτηση 3 Υποθέστε ότι προσπελαύνετε καθημερινά την ίδια σελίδα από τον υπολογιστή σας. Έχετε παρατηρήσει ότι στις τελευταίες 60 φορές που αναζητήσατε τη σελίδα, 15 φορές χρειάστηκαν από περίπου 0,5 sec για να «κατεβεί», 12 φορές χρειάστηκαν από περίπου 1,5 sec, 9 φορές χρειάστηκαν από περίπου 3,5 sec, και τέλος, τις υπόλοιπες φορές, η σελίδα έκανε χρόνο περίπου 5 sec για να «κατεβεί». Γνωρίζετε ότι η σελίδα μπορεί να βρεθεί είτε στον υπολογιστή σας, είτε στον υπολογιστή του τοπικού δικτύου που ανήκετε, είτε στη μνήμη cache που χρησιμοποιεί ο ISP με τον οποίο συνδέεστε στο Internet, είτε τέλος από τον web server της σελίδας. Αν γνωρίζετε ότι α) το πλήθος των μεταβάσεων με επιστροφή που χρειάζονται για να «κατεβεί» η σελίδα είναι Ν = 30, β) το RTT από το PC σας ως την cache του υπολογιστή τοπικού δικτύου έχει μετρηθεί 20 msec και γ) το μέγεθος της σελίδας είναι 200Kbytes, τότε σας ζητούνται τα παρακάτω: α) Ποια είναι η πιθανότητα η σελίδα που ζητήσατε να βρίσκεται: (i) στο PC σας; (ii) στον ενδιάμεσο υπολογιστή του τοπικού σας δικτύου; (iii) στην cache του ISP; (iv) στον web server; β) Πώς μεταβάλλονται οι παραπάνω πιθανότητες σε περίπτωση που για ένα διάστημα η cache του ISP ήταν εκτός λειτουργίας λόγω αναβάθμισης; γ) Ποιο είναι το ελάχιστο bandwidth (δηλαδή το bottleneck) της σύνδεσης από το PC σας ως την cache του υπολογιστή τοπικού δικτύου; δ) Θεωρώντας ότι το bandwidth που βρήκατε στο (γ) είναι το ελάχιστο σε όλη τη διαδρομή από το PC σας ως τον Web Server, ποιο είναι το RTT από το PC σας ως τον Web Server; (Παρατήρηση: τηρήστε ακρίβεια 2 δεκαδικών στις πράξεις.) Στόχος: Βασικός στόχος της συγκεκριμένης άσκησης είναι η μέτρηση της απόδοσης του πρωτοκόλλου Internet HTTP, η κατανόηση της διαδικασίας caching, αλλά και η κατανόηση στοιχείων που έχουν να κάνουν με διάφορους τρόπους αποθήκευσης δεδομένων από τους φυλλομετρητές. Απαραίτητες γνώσεις: Για την καλύτερη κατανόηση των εννοιών, είναι χρήσιμη η μελέτη των Κεφαλαίων 5 και 6 του Τόμου Β’ και η αξιοποίηση των σχετικών Παράλληλων Κειμένων και των Χρήσιμων Δικτυακών Τόπων από τη σελίδα της Θ.Ε. 12 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΠΑΝΤΗΣΕΙΣ ΑΣΚΗΣΗΣ 2 Ερώτηση 1 α) Αν τα κάνατε όλα σωστά, τότε το wireshark θα καταγράψει την παρακάτω κίνηση: Η κίνηση του κάθε αιτήματος καταλαμβάνει δύο γραμμές. Η πρώτη αφορά το αίτημα και η δεύτερη την απάντηση. Αν μετρήσουμε τους χρόνους ολοκλήρωσης του κάθε αιτήματος, βρίσκουμε πως για το πρώτο αίτημα χρειάστηκαν 56,0052 – 55,7665 = 0,2387 sec, για το δεύτερο 107,6283 – 107,6215 = 0,0068 sec, και για το τρίτο 125,8848 – 125,6851 = 0,1997 sec. Όπως μπορούμε να παρατηρήσουμε από το παραπάνω στιγμιότυπο, οι διαφορές αφορούν το αποτέλεσμα των αιτημάτων GET που αποστέλλονται στο διακομιστή. Συγκεκριμένα, ενώ κατά το πρώτο αίτημα τo status code της απάντησης είναι 200 OK, που σημαίνει πως το περιεχόμενο του αιτήματος GET ολοκληρώθηκε με επιτυχία (δλδ. έγινε λήψη του περιεχομένου της σελίδας που ζητήθηκε), κατά το δεύτερο αίτημα το αποτέλεσμα του ίδιου αιτήματος GET είναι το status code 304 Not Modified, που σημαίνει πως το περιεχόμενο του αιτήματος GET δεν έχει τροποποιηθεί από την τελευταία του προσπέλαση. Προφανώς, με την προϋπόθεση πως η cache του φυλλομετρητή είναι ενεργή, ο διακομιστής αποκρίθηκε με το HTTP response 304 Not Modified από την ημερομηνία που έθεσε το αίτημα, με αποτέλεσμα να φορτωθεί από την cache. Η μεγάλη διαφορά στους χρόνους ολοκλήρωσης του ίδιου αιτήματος είναι απόρροια αυτής της λειτουργίας caching, με τη φόρτωση από την cache να είναι αισθητά ταχύτερη από τη φόρτωση από το διακομιστή. Στο τρίτο αίτημα, που η προϋπόθεση της μη τροποποίησης από την ημερομηνία που ορίζει το αίτημα δεν καλύπτεται, η ζητούμενη εικόνα φορτώνεται πάλι από το διακομιστή, με αποτέλεσμα να απαιτείται πάλι μεγαλύτερος χρόνος, παρόμοιος με του πρώτου αιτήματος. β) Κατά την πρώτη προσπέλαση της σελίδας http://ru6.cti.gr/ru6/ με hard refresh, το εργαλείο Wireshark καταγράφει την παρακάτω κίνηση: 13 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Κατά την επόμενη προσπέλαση (refresh) της συγκεκριμένης σελίδας (με την προϋπόθεση πως το caching του φυλλομετρητή είναι ενεργοποιημένο), το Wireshark καταγράφει την παρακάτω κίνηση: Όπως μπορούμε να παρατηρήσουμε από την καταγραφή του Wireshark, κατά την πρώτη προσπέλαση της σελίδας απαιτήθηκε χρόνος περίπου ίσος με 0,118 sec (76,808 sec – 76,690 sec) για την ολοκλήρωση του αιτήματος, ενώ για την ολοκλήρωση της δεύτερης προσπέλασης (ανανέωση) απαιτήθηκε χρόνος περίπου ίσος με 0,075 sec (40,613 sec – 40,538 sec). Προφανώς, με την προϋπόθεση πως η cache του φυλλομετρητή είναι ενεργή, κατά τη δεύτερη προσπέλαση της ίδιας σελίδας βρέθηκε ένα έγκυρο περιεχόμενο αυτής στην cache, με αποτέλεσμα ο διακομιστής να αποκρίνεται με το HTTP response 304 Not Modified και τον συνολικό χρόνο της φόρτωσης να είναι αρκετά μικρότερος. Ερώτηση 2 α) Το ETag (entity tag) είναι ένα αναγνωριστικό που αποδίδεται από τον web server σε κάθε πόρο ενός URL. Στο πρωτόκολλο HTTP, το πεδίο επικεφαλίδας ETag στην απόκριση του web server παρέχει την τρέχουσα τιμή του ETag του αιτούμενου πόρου. Το ETag είναι ένας από τους μηχανισμούς του πρωτοκόλλου HTTP που χρησιμοποιείται για επικύρωση της cache και για την πραγματοποίηση υπό όρους αιτημάτων από τους clients. Γενικά, το ETag χρησιμοποιείται για τη σύγκριση εκδόσεων των αιτούμενων πόρων, καθώς εάν ένας πόρος αλλάξει, θα του ανατεθεί ένα νέο ETag από τον web server. Δηλαδή, ένας client ο οποίος διατηρεί μία ή περισσότερες εκδόσεις ενός πόρου, μπορεί να επιβεβαιώσει πως μία από αυτές τις εκδόσεις είναι η τρέχουσα, στέλνοντας μία λίστα των ETag του πόρου αυτού στον web server, ο οποίος με τη σειρά του μπορεί να πληροφορήσει τον client εάν η έκδοση του πόρου που διατηρεί δεν έχει τροποποιηθεί με αποτέλεσμα να χρησιμοποιηθεί η έκδοση του πόρου αυτού που βρίσκεται στην cache και να μη ληφθεί εκ νέου. β) Το πεδίο επικεφαλίδας Expires είναι ένας άλλος μηχανισμός ελέγχου της cache που προσφέρει το πρωτόκολλο HTTP. Το πεδίο Expires περιλαμβάνει την ημερομηνία και ώρα μετά την οποία η απόκριση θεωρείται πως έχει “λήξει”. 14 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Έτσι, εάν είναι γνωστή η ημερομηνία “λήξης” ενός αιτούμενου πόρου και εφόσον η ημερομηνία αυτή δεν έχει παρέλθει, μπορεί να χρησιμοποιηθεί η έκδοση του πόρου αυτού που βρίσκεται στην cache, χωρίς να πρέπει να ληφθεί εκ νέου από τον web server. Βασική διαφορά του πεδίου επικεφαλίδας Expires από το ETag είναι πως στην περίπτωση του Expires δεν χρειάζεται ο client να επικοινωνήσει εκ νέου με τον web server για επικύρωση της cache όπως στην περίπτωση του ETag ( όπου ο client πρέπει να επικοινωνήσει με τον web server για να γίνει ο έλεγχος του ETag) γεγονός που καθιστά τη χρήση caching ακόμα πιο αποδοτική. Ερώτηση 3 α) Ζητούνται τα hPC, hlan, hisp και hserv που είναι οι πιθανότητες να βρίσκεται η σελίδα στο PC του χρήστη, στον ενδιάμεσο υπολογιστή, στην cache του ISP και στον web server αντίστοιχα. Μας δίνονται δεδομένα από τα οποία μπορούμε να πάρουμε εύκολα τα PPC, Plan, Pisp, Pserv, δηλαδή, στο ιεραρχικό σύστημα caching της άσκησης, τις πιθανότητες επιτυχούς ανεύρεσης της σελίδας στο PC του χρήστη, στον ενδιάμεσο υπολογιστή του τοπικού δικτύου, στην μνήμη cache του ISP και στον web server αντίστοιχα. Από τους χρόνους που δίνονται μπορούμε να συμπεράνουμε πως υπάρχουν 4 περιπτώσεις επιτυχούς ανεύρεσης της σελίδας, με χρόνους απόκρισης από περίπου 0,5 sec (15 φορές στις 60), 1,5 sec (12 φορές), 3,5 sec (9 φορές) και 5 sec (24 φορές που αντιστοιχούν στις υπόλοιπες περιπτώσεις), που αντιστοιχούν στην ανεύρεση της σελίδας από το PC του χρήστη, τον ενδιάμεσο υπολογιστή του LAN, την μνήμη cache του ISP και τον web server αντίστοιχα, αφού αναμένουμε οι χρόνοι απόκρισης να είναι μεγαλύτεροι όσο πιο απομακρυσμένο είναι το σημείο ανεύρεσης της σελίδας. Συνεπώς: PPC = 15/60 = 0,25 Plan = 12/60 = 0,2 Pisp = 9/60 = 0,15 Προφανώς Pno = 0/60 = 0 (πιθανότητα να μη βρεθεί η σελίδα), αφού όλες οι αιτήσεις ικανοποιούνται, οπότε: Pno +PPC +Plan +Pisp + Pserv = 1 απ' όπου προκύπτει ότι: Pserv = 24/60 = 0,4 Από τους τύπους που συνδέουν τα P με τα h στο ιεραρχικό σύστημα caching, ισχύει: hPC PPC 0, 25 Plan hlan (1 PPC ) 0,2 hlan (1 0,25) hlan 0,27 Pisp hisp (1 Plan Ppc ) 0,15 hisp (1 0,25 0,2) hisp 0,27 Pserv hserv (1 Pisp Plan PPC ) 0,4 hserv (1 0,15 0,2 0,25) hserv 1 Συνεπώς, οι ζητούμενες πιθανότητες είναι: i) hPC = 0,25 για το PC, ii) hlan = 0,27 για τον ενδιάμεσο υπολογιστή του τοπικού δικτύου iii) hisp = 0,27 για την μνήμη cache του ISP iv) hserv = 1 για τον web server 15 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ (β) Στην περίπτωση που η cache του ISP καταργηθεί, οι πιθανότητες επιτυχούς ανεύρεσης της σελίδας μεταβάλλονται ως εξής: PPC = 15/60 = 0,25 Plan = 12/60 = 0,2 Pisp = 0/60 = 0 και Pserv=33/60=0,55 καθώς είναι προφανές πως εάν σε κάποιο επίπεδο δεν πραγματοποιείται caching, οι πιθανότητες επιτυχούς ανεύρεσης της σελίδας μεταφέρονται στα υψηλότερα επίπεδα της ιεραρχίας. Με τις νέες πιθανότητες, βρίσκουμε πως: hPC PPC 0, 25 Plan hlan (1 PPC ) 0,2 hlan (1 0,25) hlan 0,27 Pisp hisp (1 Plan Ppc ) 0 hisp (1 0,25 0,2) hisp 0 Pserv hserv (1 Pisp Plan PPC ) 0,55 hserv (1 0 0,2 0,25) hserv 1 (γ) Ισχύει από τη σχέση (5.1) του Τόμου Β’: Tr S N RTT PC PS Cmin (*) όπου: Tr είναι ο χρόνος απόκρισης και στην περίπτωσή μας ισούται με 1,5 sec για την απόκριση από τη μνήμη cache του υπολογιστή τοπικού δικτύου στο PC [δίνεται] S είναι το συνολικό μέγεθος της σελίδας: 200 Kbytes [δίνεται] N είναι το πλήθος μεταβάσεων με επιστροφή: 30 [δίνεται] RTT είναι ο χρόνος μετάβασης με επιστροφή από το PC ως την cache του υπολογιστή τοπικού δικτύου: 20 msec [δίνεται] PC + PS είναι ο συνολικός χρόνος επεξεργασίας: 0,5 sec όπως συνάγεται από το γεγονός ότι είναι ο συνολικός χρόνος «κατεβάσματος» της σελίδας από το PC [δίνεται] Cmin είναι η μικρότερη χωρητικότητα συνδέσμου, η οποία είναι το ζητούμενο της άσκησης. Η σχέση (*) δίνει: 1.5sec Cmin 200 Kbytes 30 20 103 sec 0.5sec Cmin 200 Kbytes 1638400 bit 4096 kbps 0.4sec 0.4sec Επομένως, το ελάχιστο bandwidth (bottleneck) της σύνδεσης από το PC ως την cache του ISP είναι 4096 kbps. 16 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ (δ) Από τη σχέση (*) και δεδομένου ότι στην περίπτωση αυτή Tr είναι ο χρόνος απόκρισης από το web server στο PC, έχουμε: Tr S N RTT PC PS Cmin 5sec 0.4sec 30 RTT 0.5sec RTT 0.136sec 136m sec Επομένως, το RTT από το PC ως τον Web Server είναι 136 msec. 17 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Κριτήρια αξιολόγησης Άσκηση 1 (Σύνολο) Ερώτηση 1 Ερώτηση 2 Ερώτηση 3 Άσκηση 2 (Σύνολο) Ερώτηση 1 Ερώτηση 2 Ερώτηση 3 Σύνολο 70 15 30 25 30 10 5 15 100 Ο συνολικός βαθμός θα διαιρεθεί δια 10, ώστε να προκύψει ο τελικός βαθμός της εργασίας. 18
© Copyright 2024 Paperzz