Junior
Jaka jest różnica między protokołami TCP a UDP?
sobes.tech AI
Odpowiedź od AI
TCP - oparty na połączeniu, gwarantuje dostarczenie i kolejność pakietów. UDP - bez ustanowienia połączenia, nie gwarantuje dostarczenia ani kolejności, ale jest szybszy.
Główne różnice:
| Cecha | TCP | UDP |
|---|---|---|
| Orientacja | Z ustanowieniem połączenia | Bez ustanowienia połączenia |
| Niezawodność | Wysoka (gwarantuje dostarczenie) | Niska (nie gwarantuje dostarczenia) |
| Kolejność | Gwarantowana | Nie gwarantowana |
| Kontrola przepływu | Tak | Nie |
| Kontrola błędów | Tak (transmisja i kolejność) | Nie (podstawowa suma kontrolna) |
| Prędkość | Niższa | Wyższa |
| Zastosowanie | HTTP, FTP, SSH | DNS, DHCP, gry online, streaming |
Przykład kodu do wysyłania danych przez TCP w Go:
package main
import (
"net"
"log"
)
func main() {
conn, err := net.Dial("tcp", "localhost:8080") // Ustanowienie połączenia TCP
if err != nil {
log.Fatal(err)
}
defer conn.Close() // Gwarancja zamknięcia połączenia
_, err = conn.Write([]byte("Hello, TCP!")) // Wysyłanie danych
if err != nil {
log.Fatal(err)
}
}
Przykład kodu do wysyłania danych przez UDP w Go:
package main
import (
"net"
"log"
)
func main() {
addr, err := net.ResolveUDPAddr("udp", "localhost:8081") // Określenie adresu UDP
if err != nil {
log.Fatal(err)
}
conn, err := net.DialUDP("udp", nil, addr) // Utworzenie "połączenia" UDP (bez sesji)
if err != nil {
log.Fatal(err)
}
defer conn.Close() // Zamknięcie gniazda
_, err = conn.Write([]byte("Hello, UDP!")) // Wysyłanie danych
if err != nil {
log.Fatal(err)
}
}