+++
title = 'TRANSMISSION CONTROL PROTOCOL / INTERNET PROTOCOL'
date = '2000-07-01T00:00:00Z'
description = ''
author = 'Κοτσιφάκης Θρασύβουλος'
issue = ['Magaz 25']
issue_weight = 2
+++

----------------------------------------------------------------------------------------------------------------------------------------------------------------

*Επιστροφή μετά από πολύ καιρό στα παλιά καλά λημέρια.Αν και ο χρόνος μου λίγος θα επιχειρήσω να σας μυήσω λιγάκι στις βασικές έννοιες των δικτύων και της πιο
διαδεδομένης σε εμάς συλλογής πρωτοκόλλων το **TCP/IP***

----------------------------------------------------------------------------------------------------------------------------------------------------------------

**1. Τι είναι δίκτυο και τι είναι το TCP/IP;**
----------------------------------------------------------------------

-   [1.1 Λίγη Ονοματολογία για να μπορέσουμε να συνεχίσουμε !](#ss1.1)

**2. Τα χαρακτηριστικά του TCP/IP**
-----------------------------------------------------------

-   [2.1 Logical Addressing.](#ss2.1)
-   [2.2 Routing](#ss2.2)
-   [2.3 Name Resolution](#ss2.3)
-   [2.4 Error Checking / Flow Control](#ss2.4)
-   [2.5 Application Support](#ss2.5)

**3. Τα Utilities του TCP/IP**
------------------------------------------------------

-   [3.1 ftp](#ss3.1)
-   [3.2 lpr](#ss3.2)
-   [3.3 ping](#ss3.3)
-   [3.4 telnet](#ss3.4)
-   [3.5 traceroute](#ss3.5)


### [1. Τι είναι δίκτυο και τι είναι το TCP/IP;]{#s1}

**Δίκτυο** είναι το σύνολο από υπολογιστές και συσκευές που ομοιάζουν με υπολογιστή, τα οποία επικοινωνούν μεταξύ τους μέσω ενός μέσου μεταφοράς των δεδομένων.
Αυτό το μέσο μεταφοράς μπορεί να είναι καλώδιο, η τηλεφωνική μας γραμμή ή κάποιο άλλο π.χ. κάποιος ασύρματος μεταδότης.

Σε ένα δίκτυο ο κάθε υπολογιστής πρέπει να είναι ικανός να επικοινωνεί με τους υπόλοιπους και μάλιστα αμφίδρομα, δηλαδή να δύναται να διοχετεύσει πληροφορίες
αλλά και να λάβει. Για να γίνει τώρα αυτό θα πρέπει να οριστούν εξ αρχής ο τρόπος επικοινωνίας του με το υπόλοιπο δίκτυο. Θα πρέπει δηλαδή να οριστούν κάποιοι
κανόνες για την ασφαλή και απρόσκοπτη μεταφορά των δεδομένων.

Οι συσκευές σε ένα δίκτυο δεν είναι απαραίτητο (αλλά ούτε και εφικτό πολλές φορές) να ακολουθούν τα ίδια πρότυπα ως μεμονωμένοι σταθμοί εργασίας (workstations),
δηλαδή δεν είναι απαραίτητο να εκτελούν τις εντολές κάτω από το ίδιο λειτουργικό σύστημα ή να χρησιμοποιούν το ίδιο Hardware. Για τα παραπάνω όπως καταλαβαίνετε
είμαστε αναγκασμένοι να ορίσουμε κάποια standards έτσι ώστε οι ανόμοιες αυτές συσκευές να μπορούν να συνεργάζονται αρμονικά και να εκτελούν τις αιτήσεις μας σε
συνεργασία με τις υπόλοιπες συσκευές που σχηματίζουν το δίκτυο.

Ας ορίσουμε τώρα το **TCP/IP**. Όλοι περιγράφουμε το TCP/IP σαν ένα πρωτόκολο, αυτό δεν είναι απόλυτα σωστό. Στην πραγματικότητα είναι μία ολόκληρη σουίτα από
πρωτόκολα η οποία έχει σαν βασικό της ρόλο να βοηθήσει την ομαλή συνύπαρξη των συσκευών που βρίσκονται συνδεδεμενες μεταξύ τους και επιπλέον να ορίσει τους
κανόνες που θα ισχύουν κατά την επικοινωνία των συσκευών ετσι ώστε η πληροφορία που θα περνάει από τη μία συσκευή στην άλλη να μεταφράζεται σωστά.

### [1.1 Λίγη Ονοματολογία για να μπορέσουμε να συνεχίσουμε !]{#ss1.1}

-   **LAN**:(**L**ocal **A**rea **N**etwork) Είναι μία ομάδα υπολογιστών και σχετικών συσκευών οι οποίες είναι συνδεδεμένες μεταξύ τους, επικοινωνούν και
    μπορούν να ανταλλάσουν πληροφορίες ή πόρους του δικτύου (π.χ. εκτυπωτές που μπορεί να είναι συνδεδεμένοι επάνω στο δίκτυο)
-   **WAN**:(**W**ide **A**rea **N**etwork) Είναι τα δίκτυα τα οποία συνδέουν χρήστες μεταξύ μεγάλων αποστάσεων οι οποίες πολλές φορές ξεπερνούν τα γεωγραφικά
    όρια των χωρών. Το Internet π.χ. είναι ένα WAN.
-   **MAN**:(**M**etropolitan **A**rea **N**etwork) Είναι δίκτυα υψηλής ταχύτητας τα οποία περιορίζονται σε υπολογιστές οι οποίοι είναι συνδεδεμένοι σε
    αποστάσεις όχι μεγαλύτερες από 80 χιλιόμετρα.
-   **ETHERNET**: Είναι ένας ευρέως διαδεδομένος τρόπος διασύνδεσης μεταξύ υπολογιστών το οποίο χρησιμοποιεί ως μέσο μεταφοράς το καλώδιο (ομοαξωνικό twisted
    pair ή οπτική ίνα) και μια κάρτα η οποία αναλαμβάνει τον ρόλο της διασύνδεσης και ορθής μεταφοράς των πακέτων δεδομενων που αποστέλλονται ανάμεσα στους
    υπολογιστές και τις συσκευές του δικτύου.


### [2. Τα χαρακτηριστικά του TCP/IP]{#s2}

Το TCP/IP έχει ορισμένα ενδιαφέροντα χαρακτηριστικά τα οποία χρησιμοποιεί για να παρακάμπτει προβλήματα που προκύπτουν στα δίκτυα. Ας εξετάσουμε όμως διεξοδικά
πια είναι αυτά τα προβλήματα και να δούμε πως το TCP/IP αναλαμβάνει να τα επιλύσει.

### [2.1 Logical Addressing.]{#ss2.1}

Κάθε κάρτα δικτύου από κατασκευής δια8έτει μία μοναδική και μόνιμη φυσική διεύθυνση (physical address). Σε μικρά δίκτυα η παράδοση των δεδομένων γίνεται με βάση
αυτή την φυσική διεύθυνση. Π.χ. σε τοπικά δίκτυα τύπου ethernet ένας υπολογιστής μεταδίδει τα δεδομένα κατευθείαν στο μέσο μεταφοράς (καλώδιο). Κάθε υπολογιστής
που βρίσκεται στο συγκεκριμένο δίκτυο παρακολουθεί όλες τις μεταδώσεις και επιλέγει να κρατήσει τα δεδομένα που έχουν διεύθυνση την φυσική διεύθυνση της κάρτας
δικτύου που βρίσκεται εγκατεστημένη σ\' αυτόν. Σε μεγαλύτερα δίκτυα φανταστείτε τι θα γινόταν αν κάθε υπολογιστής παρακολουθούσε όλα τα πακέττα δεδομένων που
αποστέλλονται μέσω του μέσου μεταφοράς.

Στα μεγάλα δίκτυα για αποφύγουμε την διαρκή παραλαβή άχρηστων δεδομένων τα χωρίζουμε σε άλλα μικρότερα υποδίκτυα (subnetworks) τα οποία κάτω απο μία ιεραρχική
σχεδίαση και δομή μπορούν να παρακολουθούν τις αποστολές και να επιλέγουν τα πακέττα δεδομένων που προορίζονται για τις συσκευές που τα αποτελούν.

Για να επιτύχουμε την παραπάνω λειτουργία τα υποδίκτυα θα πρέπει να έχουν διευθύνσεις που να τα χαρακτηρίζουν για να γίνονται αναγνωρίσιμα. Η διευθυνσεις αυτές
περέχονται από το λογισμικό και στην προκυμένη περίπτωση από το TCP/IP και ονομάζονται λογικές διευθύνσεις (logical address).Στο TCP/IP οι συγκεκριμένες
διευθύνσεις λέγονται IP adresses.Η διεύθυνση IP τωρα με την σειρά της μπορεί να περιέχει:

-   Την ταυτότητα ενός δικτύου.
-   Την ταυτότητα ενός υποδικτύου.
-   Την ταυτότητα ενός υπολογιστή μέσα σε ένα υποδίκτυο.

Οι ταυτότητες που αναφέρουμε παραπάνω, ουσιαστικά αντιστοιχούν σε συνδυασμούς αριθμών που χαρακτηρίζουν και την κλάση του δικτύου.Ανάλογα με το είδος δικτύου
που έχουμε, έχουμε και την αντίστοιχη κλάση. Εν περιλήψει οι βασικότερες:

-   **Κλάση A**: Εδώ οι ταυτότητες είναι 8-bit για τα δίκτυα και 24-bit για τους κεντρικούς υπολογιστές σ\'αυτά. Τέτοιοι αριθμοί αποδίδονται σε οργανισμούς,
    εταιρείες ή χώρες δηλαδή σε περιπτώσεις που απαιτούνται μεγάλος αριθμός διευθύνσεων IP αφού θεωρητικά τα δίκτυα κλάσης A μπορούν να υποστηρίξουν περίπου
    16.7 εκατομμύρια υπολογιστές.
-   **Κλάση Β**: Εδώ η ταυτότητες τών δικτύων και των κεντρικών υπολογιστών είναι 16-bit. Οι διευθύνσεις αποδίδονται σε δίκτυα μεσαίου μεγέθους και είναι ικανές
    να υποστηρίξουν την αναγνώριση μέχρι 65.5 χιλιάδων υπολογιστών περίπου.
-   **Κλάση C**: Στην τρίτη κλάση οι ταυτότητες του δικτύου είναι 24-bit και των υπολογιστών 8-bit. Mε αυτόν τον τρόπο αποδιδουμε διευθύνσεις σε μικρά δίκτυα με
    έως 254 υπολογιστές.
-   **Κλάση D**: Οι διευθύνσεις εδώ δεν αποδίδονται σε υπολογιστές αλλά χρησιμοποιούνται για multicasting δηλαδή σε περιπτώσεις που θέλουμε να ορίσουμε ομάδες
    υπολογιστών σε ένα δίκτυο που θα πρέπει να τους αποσταλλεί ένα συγκεκριμένο πακέττο δεδομένων ταυτόχρονα.

### [2.2 Routing]{#ss2.2}

Πιο πάνω είπαμε ότι μπορούμε να χωρίσουμε ένα δίκτυο σε άλλα μικρότερα και να αποδόσουμε λογικές διευθύνσεις σε αυτά.Πως όμως αποκόπτουμε τα άχρηστα πακέττα και
πως όμως το μικρότερο αυτό δίκτυο 8α αντιληφθεί ότι κάποιο πακέττο δεδομένων απευθύνεται σε αυτό;Η τεχνική λέγεται routing και οι συσκευές που αναλαμβάνουν την
αναγνώριση των πακέττων routers.

Με απλά λόγια ένας router διαχωρίζει το subnet από το υπόλοιπο δίκτυο και δεν επιτρέπει να περάσουν πληροφορίες στο σύνολο οι οποίες είναι άχρηστες. Πληροφορίες
οι οποίες αφορούν τους υπολογιστές του υποδικτύου και κατευθύνονται από υπολογιστή μέσα σε αυτό σταματούν στον router και δεν βγαίνουν προς τα έξω. Οι
πληροφορίες πάλι που απευθύνονται σε υπολογιστές εκτός του subnet ο router τις προω8εί εκτός. Γενικά ο τρόπος πού λειτουργεί ένας router είναι ο εξής:

-   Παραλαμβάνει τα δεδομένα από ένα από τα προσαρτιμένα σε αυτό δίκτυα
-   Ελέγχει τον προορισμό του πακέττου. Αν το πακέττο έχει προορισμό συσκευή μέσα στο δίκτυο από το οποίο απεστάλλει τότε το απορρίπτει αφού αυτό έχει φθάσει
    ήδη στον προορισμό του.
-   Αν το πακέττο κατευθύνεται σε συσκευή έξω από το δίκτυο απ\' όπου προέρχεται τότε ο router συμβουλεύεται εναν πίνακα που ονομάζεται routing table έτσι ώστε
    να δει που θα προωθήσει το πακέττο
-   Αφού βρεθεί που θα προωθηθεί το πακέττο ο router αναλαμβάνει την αποστολή του μέσω του λεγόμενου NETWORK ACCESS LAYER software

Το TCP/IP περιέχει πρωτόκολλα τα οποία καθορίζουν πως ένας router θα βρει διαδρομή για να κατευθύνει τα πακέττα στον προορισμό τους. Αυτά είναι τα: a)**Routing
Information Protocol (RIP)** Το οποίο είναι το παλαιότερο routing protocol. Με απλά λόγια οι routers στέλνουν πληροφορίες γι\' αυτούς και επίσης αποστέλλουν το
λεγόμενο **hop count** δηλαδή πληροφορία σχετικά με το πόσο απομακρισμένοι είναι. Με αυτόν τον τρόπο οι routers μεταξύ τους γνωρίζουν ποιοι απ\' αυτούς είναι
διαθέσιμοι και να εκτιμήσουν την συντομότερη διαδρομή για να αποστείλουν το πακέττο στον προορισμό τους.b)**Open Shortest Path First (OSPF)** είναι νεότερο
πρωτόκολλο το οποίο σταδιακά πέρνει την θέση του RIP. Η μεγάλη διαφορά του από το RIP είναι ότι εδώ οι Proxies δεν χρειάζεται να κάνουν υπολογισμό του hop απλά
αποστέλλουν πληροφορίεσ σχετικά με την κατάσταση τους στους proxies που βρίσκονται απ\' ευ8είας συνδεδεμένοι μαζί τους. Με αυτόν τον τρόπο μειώνεται το συνολικό
bandwidth που 8α πρέπει να δεσμευ8εί για την αποστολή πληροφοριών. Ως αποτέλεσμα τι OSPF μπορεί να υποστηρίξει δίκτυα μεγάλα σε όγκο και ανάγκες.

### [2.3 Name Resolution]{#ss2.3}

Φανταστείτε να σας έλεγαν 111.121.131.156 και την φίλη σας 111.121.131.158, μπέρδεμά έ; Ναι έχετε δίκιο. Καλοί οι αριθμούλιδες αλλά εμείς έχουμε μάθει να
αναγνωρίζουμε τους άλλους από το όνομα τους και όχι από τον αριθμό της ταυτότητας τους. Για να μας κάνει την ζωή πιο εύκολη λοιπόν το TCP/IP χρησιμοποιει εν
παραλλήλω με τα IP numbers και ένα πιο ανθρωπινο τρόπο για να αναγνωρίζεται ο αποστολέας και ο παραλήπτης ενός πακέττου τα ονόματα αυτά λέγονται **domain
names** και η υπηρεσία **Domain Name Service**.Με αυτόν τον τρόπο δεν χρειάζεται να γνωρίζουμε το IP number κάποιου υπολογιστή σε ένα δίκτυο αλλά μόνο το όνομα
του.Έτσι για να αποστείλουμε π.χ. ένα email στην αγαπημένη μας δεν χρειάζεται να ξέρουμε το IP number του mail server που της έχει παραχωρίσει χώρο αλλά μόνο το
domain name που συνή8ως είναι όνομα της μορφής \"companyname.com\" του και φυσικά το όνομα που χρησιμοποιεί αυτή σαν αναγνωριστικό.

Πως γίνεται τώρα και τα domain names μεταφράζονται σε IP numbers; Με απλά λόγια υπάρχουν κάποιοι εξυπηρετητές οι οποίοι αναλλαμβάνουν την αποθήκευση των domain
names και την αποκωδικοποίηση τους σε IP numbers. Αν θέλετε τώρα να δείτε πως περίπου γίνεται το name servicing ρίξτε μια ματιά στο **/etc/hosts** του κουτιού
σας για να δείτε με ποια σύνταξη ορίζονται domain names σε IP names.

### [2.4 Error Checking / Flow Control]{#ss2.4}

Κατά την μεταφορά αρχείων είναι λογικό ότι δεν πάνε πάντα τα πράγματα όπως τα θέλουμε. Λάθη κατά την μεταφορά ή πακέττα δεδομένων που για κάποιο λόγο δεν
παρελήφθησαν ακέραια είναι συχνό φαινόμενο. Γι αυτόν τον λόγο οι σχεδιαστές του TCP/IP φρόντισαν να του ενσωματώσουν διαδικασίες οι οποίες ελέγχουν την χωρίς
λάθη παραλαβή ενός πακέττου και την αποστολη του στον σωστό παραλήπτη. Οι διαδικασίες αυτές ενσώματωνονται στο ονομαζόμενο **Transport Layer** του TCP/IP.

### [2.5 Application Support]{#ss2.5}

Σε όλους είνα γνωστό ότι για να αποκτήσουμε πρόσβαση στο δίκτυο χρησιμοποιούμε εφαρμογές οι οποίες ουσιαστικά με τρόπο «αδιαφανή» μας παρέχουν την πρόσβαση αλλά
και τις ζητούμενες υπηρεσίες. Δηλαδή δεν χρειάζεται π.χ. να γνωρίζουμε τι είναι το SMTP για να στείλουμε ένα email.

Το TCP/IP αναλαμβάνει την παροχή ενός interface για τις εφαρμογές μας έτσι ώστε αυτές να μπορούν να έχουν πρόσβαση στο λογισμικό του δικτύου και να διευκολύνει
την προσπέλαση στο δίκτυο. Για να γίνει αυτό, η σουίτα χρησιμοποιεί ένα σύστημα από \"λογικά κανάλια\" τα οποία ονομάζονται **ports**. Κάθε port διαθέτει ένα
port number το οποίο χρησιμοποιείται για την αναγνώριση της port και ουσιαστικά και για την αναγνώριση της εργασίας που καλείτε να εκτελέσει. Με απλά λόγια (και
λίγη φαντασία) τα ports είναι αυλοί επικοινωνίας που μέσα τους κυκλοφορούν τα δεδομένα και οι αιτήσεις από την αφαρμογή προς το δίκτυο.

Το ίδιο το TCP/IP περιέχει μερικές εφαρμογές οι οποίες χρησιμοποιούνται για να διευκολύνουν τις διάφορες διαδικασίες. Αυτές οι εφαρμογές είναι οι γνωστές στους
περισσότερους **ftp lpr ping telnet** και **traceroute** των οποίων την χρησιμότητα θα εξηγήσουμε παρακάτω.


### [3. Τα Utilities του TCP/IP]{#s3}

### [3.1 ftp]{#ss3.1}

Το ftp είναι εφαρμογή (ουσιαστικά ένα κέλυφος εργασίας) η οποία χρησιμοποιεί το **File Transfer Protocol** για την μεταφορά αρχείων από και προς έναν υπολογιστή
ο οπoίος παίζει τον ρόλο του ftp server. Με την εντολή ftp εκκινούμε την εφαρμογή client η οποία μας παρέχει το περιβάλλον για να συνδεθούμε και να εργαστούμε
με υπολογιστές οι οποίοι τρέχουν τον λεγόμενο **ftp daemon** ο οποίος είναι μία εφαρμογή που τρέχει σε έναν ftp server στο παρασκήνιο και όταν της ζητη8εί από
τον client κάποιου υπολογιστή στο δίκτυο, αναλαμβάνει την διεκπεραιρέωση της αιτήσεως.

Η εκκίνηση της ftp μπορεί να γίνει είτε δίδοντας την εντολή σκέτη ή προσθέτοντας το **IP adress** ή το **domain name** του εξυπηρετητή που θέλουμε να
συνδεθούμε. Μπορούμε επίσης να προσθέσουμε παραμέτρους οι οποίοι να καθορίζουν τον τρόπο και το είδος της σύνδεσης που θέλουμε να πετύχουμε. Μία ματιά στην
**man page** της ftp θα σας κατατοπίσει καλύτερα για το ποιες παράμετροι μπορούν να σας φανούν χρήσιμες.

Αφού επιτύχουμε την σύνδεση με το ftp site που μας ενδιαφέρει μία σειρά εντολών μπορεί να δωθεί για την εργασία μας. Πολλές απ\' αυτές είναι ήδη γνωστές από την
εργασία μας στα linux shells **(pwd mkdir cd chmod)**.

### [3.2 lpr]{#ss3.2}

Είναι εντολή η οποία χρησιμοποιείται για την δρομολόγιση και μορφοποίηση αιτήσεων προς έναν εκτυπωτή. Όταν υπάρχουν πολύ εκτυπωτές πάνω στο δίκτυο η lpr μπορεί
να εκτελεστεί με την παράμετρο **-P** και το όνομα του εκτυπωτή που θέλουμε να μας εξυπηρετήσει. Επίσης μια πλιάδα από παραμέτρους μπορούν να χρησιμοποιηθούν
για ικανοποιητικότερη χρήση της.

### [3.3 ping]{#ss3.3}

Utility το οποίο χρησιμοποιείται ως διαγνωστικό. Όταν εκτελέσουμε την εντολή ping domainname τότε αποστέλλουμε ένα διαγνωστικό πακέττο κάτω από το **ICMP
protocol** (Internet Control Message Protocol) αιτώντας ταυτόχρονα απάντηση **(ICMP echo)** από τον παραλήπτη. Η ping έχει σχεδιασθεί έτσι ώστε να βοηθά τον
έλεγχο, την αποσφαλμάτωση, και μέτρηση της ανταπόκρισης μεταξύ δύο υπολογιστών σε ένα δίκτυο.Όταν παραλειφθεί το ICMP echo από τον υπολογιστή που εκτελέσαμε την
ping, μας εμφανίζεται στην οθόνη το μέγεθος του πακέττου που απεστάλλει (56bytes για το linux) ο χρόνος σε milliseconds ο οποίος χρειάστηκε για να αποσταλλεί
και να επιστρέψει όπως επίσης και το **TTL** (Time To Live), δηλαδή μία τιμή η οποία μας δείχνει πόσους επιπλεόν routers μπορούσε το πακέττο να περάσει μέχρι να
απορριφθεί. Αν το ποσό που επιστρέφει ως ένδειξη στην TTL είναι κοντά στο μηδέν (1,2 κλπ) τότε θα πρέπει να υποψιαστούμε ότι σφάλματα στο δίκτυο.

### [3.4 telnet]{#ss3.4}

Το telnet είναι κέλυφος εργασίας το οποίο ενσωματώνει διάφορες λειτουργίες για την εργασία μεταξύ δύο υπολογιστών εκ των οποίων ο ένας εκτελεί χρέη εξυπηρετητή
τρέχοντας τον **telnet daemon**. Το telnet επίσης είναι και αυτόνομο πρωτόκολλο επικοινωνίας. Σκοπός του telnet είναι να μας παρέχει ένα περιβάλλον εργασίας
όπου οι εντολές που εμείς πληκτρολογούμε να περνούν στο δίκτυο και να εκτελούνται στον απομακρυσμένο από εμάς υπολογιστή. Για να εκκινήσουμε μία telnet session
χρησιμοποιούμε την εντολή:

-   telnet *hostname*

Οι εντολές που δίνουμε από εκεί και πέρα εκτελούνται στον απομακρυσμένο υπολογιστή

### [3.5 traceroute]{#ss3.5}

Είναι utility το οποίο μας δείχνει την διαδρομή που ακολουθει ένα πακέττο δεδομένων έως ότου καταλήξει στον προορισμό του. Εάν δοκιμάσουμε την traceroute σε
κάποιο domain στο INTERNET θα καταλάβουμε από τα domain names και την γεωγραφική διαδρομή που έκανε το πακέττο εως ότου φτάσει στον προορισμό του.

