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):
- Ο πελάτης στέλνει ένα τμήμα με σημαία SYN και αρχικό αριθμό σειράς.
- Ο διακομιστής λαμβάνει το SYN, απαντά με ένα τμήμα με σημαίες SYN και ACK, τον δικό του αρχικό αριθμό σειράς και έναν αριθμό επιβεβαίωσης ίσο με client_seq + 1.
- Ο πελάτης λαμβάνει το 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; // Άθροισμα ελέγχου
};