Sobes.tech
Middle

Μίλησέ μου για το επίπεδο μεταφοράς (transport layer) του μοντέλου TCP/IP.

sobes.tech AI

Απάντηση από AI

Το επίπεδο μεταφοράς TCP/IP παρέχει επικοινωνία μεταξύ διεργασιών που εκτελούνται σε διαφορετικούς υπολογιστές. Κύριες εργασίες:

  • Αναγνώριση εφαρμογών/διεργασιών στον υπολογιστή (μέσω θυρών).
  • Παροχή υπηρεσιών παράδοσης δεδομένων:
    • Αξιόπιστη, ταξινομημένη παράδοση (TCP).
    • Μη αξιόπιστη, χωρίς εγγυήσεις παράδοση (UDP).

Δύο βασικά πρωτόκολλα:

  • Πρωτόκολλο Ελέγχου Μεταφοράς (TCP):
    • Με βάση σύνδεση.
    • Εγγυάται την παράδοση πακέτων, διατηρεί τη σειρά, ελέγχει τη ροή και διαχειρίζεται την συμφόρηση.
    • Χρησιμοποιείται για εφαρμογές που απαιτούν αξιόπιστη μετάδοση (HTTP, FTP, SMTP).
  • Πρωτόκολλο Datagram Χρηστών (UDP):
    • Χωρίς σύνδεση.
    • Δεν εγγυάται την παράδοση, τη σειρά ή τον έλεγχο ροής.
    • Χαμηλή καθυστέρηση, κατάλληλο για εφαρμογές ευαίσθητες στον χρόνο, όπου η μικρή απώλεια δεδομένων είναι αποδεκτή (DNS, VoIP, ροή βίντεο).

Τα τμήματα TCP περιλαμβάνουν πεδία για: πύλες πηγής/προορισμού, αριθμούς σειράς, αριθμούς επιβεβαίωσης, σημαίες (SYN, ACK, FIN), άθροισμα ελέγχου.

Τα πακέτα UDP περιλαμβάνουν πεδία για: πύλες πηγής/προορισμού, μήκος και άθροισμα ελέγχου.

Ports (θύρες): 16-bit αριθμοί που χρησιμοποιούνται για πολλαπλοποίηση/αποπολυπλοποίηση δεδομένων μεταξύ διεργασιών.

  • Well-known ports (0-1023): Αποθεματικά για τυπικές υπηρεσίες (80 για HTTP, 443 για HTTPS, 22 για SSH).
  • Registered ports (1024-49151): Χρησιμοποιούνται για ιδιωτικές εφαρμογές που έχουν καταχωριστεί στην IANA.
  • Dynamic/Private ports (49152-65535): Χρησιμοποιούνται από πελάτες για εξερχόμενες συνδέσεις.

Παράδειγμα εγκατάστασης σύνδεσης TCP (Three-way Handshake):

  1. Ο πελάτης στέλνει ένα τμήμα με σημαία SYN και αρχικό αριθμό σειράς.
  2. Ο διακομιστής λαμβάνει το SYN, απαντά με ένα τμήμα με σημαίες SYN και ACK, τον δικό του αρχικό αριθμό σειράς και έναν αριθμό επιβεβαίωσης ίσο με client_seq + 1.
  3. Ο πελάτης λαμβάνει το SYN+ACK, απαντά με ένα τμήμα με σημαία ACK και αριθμό επιβεβαίωσης ίσο με server_seq + 1. Η σύνδεση έχει εγκατασταθεί.
// Παράδειγμα δομής επικεφαλίδας TCP (απλοποιημένο)
struct tcp_header {
    unsigned short src_port;       // Πύλη πηγής
    unsigned short dest_port;      // Πύλη προορισμού
    unsigned int   seq_num;        // Αριθμός σειράς
    unsigned int   ack_num;        // Αριθμός επιβεβαίωσης
    unsigned short flags;          // Σημαίες (SYN, ACK, FIN κ.λπ.)
    // άλλα πεδία...
};
// Παράδειγμα δομής επικεφαλίδας UDP (απλοποιημένο)
struct udp_header {
    unsigned short src_port;       // Πύλη πηγής
    unsigned short dest_port;      // Πύλη προορισμού
    unsigned short length;         // Μήκος UDP πακέτου
    unsigned short checksum;       // Άθροισμα ελέγχου
};