Sobes.tech
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):

  1. Միջնորդը ուղարկում է SYN նշանով հատված՝ սկզբնական հերթական համարով:
  2. Սերվերը ստանում է SYN, պատասխանում է SYN և ACK նշաններով, իր սկզբնական հերթական համարով և հաստատման համարով՝ հավասար client_seq + 1:
  3. Միջնորդը ստանում է 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;       // Հաշվարկային գումար
};