Sobes.tech
Middle

Räägi mulle TCP/IP mudeli transpordikihist (transport layer).

sobes.tech AI

Vastus AI-lt

Transportkihi TCP/IP tagab ühenduse erinevatel hostidel käivitatud protsesside vahel. Peamised ülesanded:

  • Rakenduste/protsesside tuvastamine hostil (pordi kaudu).
  • Andmeedastusteenuste pakkumine:
    • Usaldusväärne, järjekorras edastamine (TCP).
    • Ebastabiilne, garantiideta edastamine (UDP).

Kaks peamist protokolli:

  • Transmission Control Protocol (TCP):
    • Ühenduse orienteeritud.
    • Tagab pakettide kohaletoimetamise, järjekorra säilitamise, voogude kontrolli ja ülekoormuse juhtimise.
    • Kasutatakse rakenduste jaoks, mis nõuavad usaldusväärset edastust (HTTP, FTP, SMTP).
  • User Datagram Protocol (UDP):
    • Ilma ühenduseta.
    • Ei taga kohaletoimetamist, järjekorda ega voogude kontrolli.
    • Madala latentsusega, sobib ajakriitilistele rakendustele, kus väike andmekadu on vastuvõetav (DNS, VoIP, voogedastuse video).

TCP segmentides on väljad: lähte-/sihtpordid, järjestusnumbrid, kinnituse numbrid, lipud (SYN, ACK, FIN), kontrollsumma.

UDP datagrammides on väljad: lähte-/sihtpordid, pikkus ja kontrollsumma.

Portid (ports): 16-bitised numbrid, mida kasutatakse andmete multipleximiseks/demultipleximiseks protsesside vahel.

  • Well-known ports (0-1023): reserveeritud standardteenustele (80 HTTP jaoks, 443 HTTPS jaoks, 22 SSH jaoks).
  • Registered ports (1024-49151): kasutatakse era- või registreeritud rakenduste jaoks IANA-s.
  • Dynamic/Private ports (49152-65535): kasutavad kliendid lähivõrkude ühenduste jaoks.

Näide TCP ühenduse loomise kohta (Three-way Handshake):

  1. Klient saadab segmenti SYN lipuga ja algse järjestusnumbriga.
  2. Server saab SYN-i, vastab segmentiga SYN ja ACK lipudega, oma algse järjestusnumbriga ja kinnituse numbriga, mis võrdub client_seq + 1.
  3. Klient saab SYN+ACK-i, vastab segmentiga ACK lipuga ja kinnituse numbriga, mis võrdub server_seq + 1. Ühendus on loodud.
// TCP päise näide (lihtsustatud)
struct tcp_header {
    unsigned short src_port;       // Saatja port
    unsigned short dest_port;      // Vastuvõtja port
    unsigned int   seq_num;        // Järjestusnumber
    unsigned int   ack_num;        // Kinnituse number
    unsigned short flags;          // Lipud (SYN, ACK, FIN ja teised)
    // muud väljad...
};
// UDP päise näide (lihtsustatud)
struct udp_header {
    unsigned short src_port;       // Saatja port
    unsigned short dest_port;      // Vastuvõtja port
    unsigned short length;         // UDP datagrammi pikkus
    unsigned short checksum;       // Kontrollsumma
};