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):
- Klient saadab segmenti SYN lipuga ja algse järjestusnumbriga.
- Server saab SYN-i, vastab segmentiga SYN ja ACK lipudega, oma algse järjestusnumbriga ja kinnituse numbriga, mis võrdub client_seq + 1.
- 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
};