Middle
Կպատմե՞ք TCP/IP մոդելի տրանսպորտային շերտի մասին։
sobes.tech AI
Պատասխան AI-ից
Տրանսպորտային շերտը TCP/IP ապահովում է կապը տարբեր հոստերի վրա գործարկված պրոցեսների միջև: Հիմնական խնդիրները՝
- Ապացուցել ծրագրեր/պրոցեսներ հոստում (պորտերի միջոցով):
- Տրամադրել տվյալների փոխանցման ծառայություններ՝
- Վստահելի, կարգավորված փոխանցում (TCP):
- Անվստահելի, առանց երաշխավորության փոխանցում (UDP):
Երկու հիմնական պրոտոկոլներ՝
- Transmission Control Protocol (TCP)՝
- Կապի ուղղված:
- Հավաստիացնում է փաթեթների մատակարարումը, կարգը պահպանելը, հոսքի վերահսկումը և բեռնաթափման կառավարումը:
- Օգտագործվում է այն ծրագրերի համար, որոնք պահանջում են վստահելի փոխանցում (HTTP, FTP, SMTP):
- User Datagram Protocol (UDP)՝
- Անկապ:
- Չի երաշխավորում մատակարարումը, կարգը կամ հոսքի վերահսկումը:
- Նվազ latency, հարմար է ժամանակային զգայուն ծրագրերի համար, որտեղ փոքր կորուստը ընդունելի է (DNS, VoIP, հոսքային տեսանյութ):
TCP հատվածները պարունակում են դաշտեր՝ աղբյուրի/նպատակային պորտեր, հերթական համարներ, հաստատման համարներ, նշաններ (SYN, ACK, FIN), վերահսկման գումար:
UDP դագրամները պարունակում են դաշտեր՝ աղբյուրի/նպատակային պորտեր, երկարություն և վերահսկման գումար:
Պորտեր (ports)՝ 16-bit թվեր, որոնք օգտագործվում են տվյալների մուլտիպլեքսավորման/դեմուլտիպլեքսավորման համար պրոցեսների միջև:
- Well-known ports (0-1023): Ստանդարտ ծառայությունների համար (80՝ HTTP, 443՝ HTTPS, 22՝ SSH):
- Registered ports (1024-49151): Օգտագործվում են մասնավոր ծրագրերի համար, որոնք գրանցված են IANA-ում:
- Dynamic/Private ports (49152-65535): Օգտագործվում են հաճախորդների կողմից ելքային կապերի համար:
TCP կապի հաստատման օրինակ (Three-way Handshake):
- Միջնորդը ուղարկում է SYN նշանով հատված՝ սկզբնական հերթական համարով:
- Սերվերը ստանում է SYN, պատասխանում է SYN և ACK նշաններով, իր սկզբնական հերթական համարով և հաստատման համարով՝ հավասար client_seq + 1:
- Միջնորդը ստանում է SYN+ACK, պատասխանում է ACK նշանով և հաստատման համարով՝ հավասար server_seq + 1:
// TCP գլխագրի օրինակ (պարզեցված)
struct tcp_header {
unsigned short src_port; // Ուղարկողի պորտ
unsigned short dest_port; // Հասցեի պորտ
unsigned int seq_num; // Հերթական թիվ
unsigned int ack_num; // Հաստատման թիվ
unsigned short flags; // Նշաններ (SYN, ACK, FIN և այլն)
// այլ դաշտեր...
};
// UDP գլխագրի օրինակ (պարզեցված)
struct udp_header {
unsigned short src_port; // Ուղարկողի պորտ
unsigned short dest_port; // Հասցեի պորտ
unsigned short length; // UDP դագրամի երկարությունը
unsigned short checksum; // Հաշվարկային գումար
};