Sobes.tech
Middle

გთხოვთ, მითხრათ TCP/IP მოდელის ტრანსპორტის ფენა (transport layer) შესახებ.

sobes.tech AI

პასუხი AI-სგან

ტრანსპორტის დონე TCP/IP უზრუნველყოფს კავშირის დამყარებას პროცესებს შორის, რომლებიც სხვადასხვა ჰოსტზე მუშაობენ. ძირითადი ამოცანები:

  • პროგრამების/პროცესების იდენტიფიკაცია ჰოსტზე (პორტების მეშვეობით).
  • მონაცემთა ტრანსპორტის სერვისების მიწოდება:
    • საიმედო, მოწესრიგებული ტრანსპორტი (TCP).
    • არასაიმედო, გარანტიების გარეშე ტრანსპორტი (UDP).

ორი ძირითადი პროტოკოლი:

  • Transmission Control Protocol (TCP):
    • კავშირის ორიენტირებული.
    • გარანტიას იძლევა პაკეტების მიწოდებაზე, წესრიგის დაცვაზე, ნაკადის კონტროლსა და გადატვირთვის მართვაზე.
    • გამოიყენება იმ პროგრამებისთვის, რომლებიც საჭიროებენ საიმედო ტრანსფერს (HTTP, FTP, SMTP).
  • User Datagram Protocol (UDP):
    • კავშირს გარეშე.
    • გარანტიას არ იძლევა მიწოდებაზე, წესრიგზე ან ნაკადის კონტროლზე.
    • დაბალი ლატენცია, შესაფერისია დროით მგრძნობიარე პროგრამებისთვის, სადაც მცირე მონაცემთა დაკარგვა მისაღებია (DNS, VoIP, სტრიმინგ ვიდეო).

TCP სეგმენტები შეიცავს ველებს: წყაროს/მიმართულ პორტებს, სექვენს ნომრებს, ადასტურების ნომრებს, ფლაგებს (SYN, ACK, FIN), კონტროლის ჯამს.

UDP დაგრამები შეიცავს ველებს: წყაროს/მიმართულ პორტებს, სიგრძეს და კონტროლის ჯამს.

პორტები (ports): 16-ბიტიანი რიცხვები, რომლებიც გამოიყენება მონაცემთა მულტიპლექსირებისთვის/დემულიპლექსირებისთვის პროცესებს შორის.

  • 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;       // კონტროლის ჯამი
};