Junior
Ποια είναι η διαφορά μεταξύ των πρωτοκόλλων TCP και UDP;
sobes.tech AI
Απάντηση από AI
TCP - προσανατολισμένο στη σύνδεση, εγγυάται την παράδοση και τη σειρά των πακέτων. UDP - χωρίς εγκατάσταση σύνδεσης, δεν εγγυάται την παράδοση και τη σειρά, αλλά είναι πιο γρήγορο.
Βασικές διαφορές:
| Χαρακτηριστικό | TCP | UDP |
|---|---|---|
| Προσανατολισμός | Με εγκατάσταση σύνδεσης | Χωρίς εγκατάσταση σύνδεσης |
| Αξιοπιστία | Υψηλή (εγγυάται την παράδοση) | Χαμηλή (δεν εγγυάται την παράδοση) |
| Σειρά | Εγγυημένη | Μη εγγυημένη |
| Έλεγχος ροής | Ναι | Όχι |
| Έλεγχος σφαλμάτων | Ναι (μεταφορά και σειρά) | Όχι (βασικός έλεγχος checksum) |
| Ταχύτητα | Χαμηλότερη | Υψηλότερη |
| Χρήση | HTTP, FTP, SSH | DNS, DHCP, online παιχνίδια, streaming |
Παράδειγμα κώδικα για αποστολή δεδομένων μέσω TCP σε Go:
package main
import (
"net"
"log"
)
func main() {
conn, err := net.Dial("tcp", "localhost:8080") // Δημιουργία σύνδεσης TCP
if err != nil {
log.Fatal(err)
}
defer conn.Close() // Εγγύηση κλεισίματος σύνδεσης
_, err = conn.Write([]byte("Hello, TCP!")) // Αποστολή δεδομένων
if err != nil {
log.Fatal(err)
}
}
Παράδειγμα κώδικα για αποστολή δεδομένων μέσω UDP σε Go:
package main
import (
"net"
"log"
)
func main() {
addr, err := net.ResolveUDPAddr("udp", "localhost:8081") // Ορισμός διεύθυνσης UDP
if err != nil {
log.Fatal(err)
}
conn, err := net.DialUDP("udp", nil, addr) // Δημιουργία "σύνδεσης" UDP (χωρίς συνεδρία)
if err != nil {
log.Fatal(err)
}
defer conn.Close() // Κλείσιμο socket
_, err = conn.Write([]byte("Hello, UDP!")) // Αποστολή δεδομένων
if err != nil {
log.Fatal(err)
}
}