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. |