Unix Socket - Cổng và Dịch vụ

Khi một tiến trình máy khách muốn kết nối một máy chủ, máy khách phải có cách xác định máy chủ mà nó muốn kết nối. Nếu máy khách biết địa chỉ Internet 32-bit của máy chủ lưu trữ, máy khách có thể liên hệ với máy chủ đó. Nhưng làm thế nào để máy khách xác định tiến trình máy chủ cụ thể đang chạy trên máy chủ đó?

Để giải quyết vấn đề xác định một quy trình máy chủ cụ thể đang chạy trên máy chủ, cả TCP và UDP đều đã xác định một nhóm các cổng nổi tiếng.

Theo mục đích của chúng tôi, một cổng sẽ được định nghĩa là một số nguyên từ 1024 đến 65535. Điều này là do tất cả các số cổng nhỏ hơn 1024 được coi là nổi tiếng - ví dụ: telnet sử dụng cổng 23, http sử dụng 80, ftp sử dụng 21, và như thế.

Việc gán cổng cho các dịch vụ mạng có thể được tìm thấy trong tệp / etc / services. Nếu bạn đang viết máy chủ của riêng mình thì phải cẩn thận để gán một cổng cho máy chủ của bạn. Bạn nên đảm bảo rằng cổng này không được gán cho bất kỳ máy chủ nào khác.

Thông thường, một thông lệ là gán bất kỳ số cổng nào nhiều hơn 5000. Nhưng có nhiều tổ chức đã viết máy chủ có số cổng lớn hơn 5000. Ví dụ: Yahoo Messenger chạy trên 5050, SIP Server chạy trên 5060, v.v.

Cổng và dịch vụ mẫu

Đây là một danh sách nhỏ các dịch vụ và các cổng liên quan. Bạn có thể tìm thấy danh sách cập nhật nhất của các cổng internet và dịch vụ liên quan tại IANA - TCP / IP Port Assignments .

Service Port Number Service Description
tiếng vang 7 UDP / TCP gửi lại những gì nó nhận được.
bỏ đi 9 UDP / TCP loại bỏ đầu vào.
ban ngày 13 UDP / TCP trả về thời gian ASCII.
chargen 19 UDP / TCP trả về các ký tự.
ftp 21 Truyền tệp TCP.
telnet 23 Đăng nhập từ xa TCP.
smtp 25 Email TCP.
ban ngày 37 UDP / TCP trả về thời gian nhị phân.
tftp 69 Truyền tệp tầm thường UDP.
ngón tay 79 Thông tin TCP về người dùng.
http 80 TCP World Wide Web.
đăng nhập 513 Đăng nhập từ xa TCP.
WHO 513 UDP thông tin khác nhau về người dùng.
Xserver 6000 Cửa sổ TCP X (NB> 1023).

Chức năng cổng và dịch vụ

Unix cung cấp các chức năng sau để tìm nạp tên dịch vụ từ tệp / etc / services.

  • struct servent *getservbyname(char *name, char *proto) - Cuộc gọi này nhận tên dịch vụ và tên giao thức, và trả về số cổng tương ứng cho dịch vụ đó.

  • struct servent *getservbyport(int port, char *proto) - Cuộc gọi này nhận số cổng và tên giao thức, và trả về tên dịch vụ tương ứng.

Giá trị trả về cho mỗi hàm là một con trỏ đến một cấu trúc có dạng sau:

struct servent {
   char  *s_name;
   char  **s_aliases;
   int   s_port;
   char  *s_proto;
};

Đây là mô tả của các trường thành viên -

Thuộc tính Giá trị Sự miêu tả
tên của http Đây là tên chính thức của dịch vụ. Ví dụ: SMTP, FTP POP3, v.v.
s_aliases ALIAS Nó chứa danh sách các bí danh dịch vụ. Hầu hết thời gian, nó sẽ được đặt thành NULL.
s_port 80 Nó sẽ có số cổng liên quan. Ví dụ: đối với HTTP, nó sẽ là 80.
s_proto

TCP

UDP

Nó được đặt thành giao thức được sử dụng. Dịch vụ Internet được cung cấp bằng TCP hoặc UDP.