Middle
Pastāsti par TCP/IP modeļa transporta slāni (transport layer).
sobes.tech AI
Atbilde no AI
Transporta līmenis TCP/IP nodrošina savienojumu starp procesiem, kas darbojas dažādiem hostiem. Galvenie uzdevumi:
- Programmu/procesu identificēšana uz hosta (caur portiem).
- Datu pārraides pakalpojumu nodrošināšana:
- Uzticama, sakārtota pārraide (TCP).
- Neuzticama, bez garantijas pārraide (UDP).
Divi galvenie protokoli:
- Transmission Control Protocol (TCP):
- Savienojuma orientēts.
- Garantē paketeņu piegādi, saglabā secību, plūsmas kontroli un pārslodzes vadību.
- Izmanto lietojumprogrammām, kas prasa uzticamu pārraidi (HTTP, FTP, SMTP).
- User Datagram Protocol (UDP):
- Bez savienojuma.
- Negarantē piegādi, secību vai plūsmas kontroli.
- Zema latentuma, piemērots laika jutīgām lietojumprogrammām, kur mazs datu zudums ir pieņemams (DNS, VoIP, straumēšanas video).
TCP segmenti satur laukus: avota/galamērķa portus, secības numurus, apstiprinājuma numurus, flagus (SYN, ACK, FIN), kontroles summu.
UDP datgrami satur laukus: avota/galamērķa portus, garumu un kontroles summu.
Porti (ports): 16 bitu skaitļi, kas tiek izmantoti datu daudzplūsmu/multiplūsmu starp procesiem.
- Well-known ports (0-1023): rezervēti standarta pakalpojumiem (80 HTTP, 443 HTTPS, 22 SSH).
- Registered ports (1024-49151): lieto privātām lietojumprogrammām, kas reģistrētas IANA.
- Dynamic/Private ports (49152-65535): lieto klienti izejošiem savienojumiem.
Piemērs, kā izveidot TCP savienojumu (Three-way Handshake):
- Klients sūta segmentu ar SYN flag un sākuma secības numuru.
- Serveris saņem SYN, atbild ar segmentu ar SYN un ACK flagiem, ar savu sākuma secības numuru un apstiprinājuma numuru, kas ir vienāds ar client_seq + 1.
- Klients saņem SYN+ACK, atbild ar segmentu ar ACK flag un apstiprinājuma numuru, kas ir vienāds ar server_seq + 1. Savienojums ir izveidots.
// TCP galvenes piemērs (vienkāršots)
struct tcp_header {
unsigned short src_port; // Avota ports
unsigned short dest_port; // Galamērķa ports
unsigned int seq_num; // Sekvences numurs
unsigned int ack_num; // Apstiprinājuma numurs
unsigned short flags; // Flagus (SYN, ACK, FIN un citi)
// citi lauki...
};
// UDP galvenes piemērs (vienkāršots)
struct udp_header {
unsigned short src_port; // Avota ports
unsigned short dest_port; // Galamērķa ports
unsigned short length; // UDP datagramma garums
unsigned short checksum; // Kontrolsumma
};