Unix Socket - порты и службы

Когда клиентский процесс хочет подключиться к серверу, клиент должен иметь способ идентифицировать сервер, к которому он хочет подключиться. Если клиенту известен 32-битный Интернет-адрес хоста, на котором находится сервер, он может связаться с этим хостом. Но как клиент определяет конкретный серверный процесс, запущенный на этом хосте?

Чтобы решить проблему идентификации конкретного серверного процесса, запущенного на хосте, TCP и UDP определили группу хорошо известных портов.

Для нашей цели порт будет определен как целое число от 1024 до 65535. Это связано с тем, что все номера портов меньше 1024 считаются хорошо известными - например, telnet использует порт 23, http использует 80, ftp использует 21, и так далее.

Назначение портов сетевым службам можно найти в файле / etc / services. Если вы пишете свой собственный сервер, необходимо позаботиться о том, чтобы назначить порт вашему серверу. Вы должны убедиться, что этот порт не должен быть назначен никакому другому серверу.

Обычно принято назначать любому порту номер более 5000. Но есть много организаций, которые написали серверы с номерами портов более 5000. Например, Yahoo Messenger работает на 5050, SIP Server работает на 5060 и т. Д.

Примеры портов и служб

Вот небольшой список служб и связанных портов. Вы можете найти самый последний список интернет-портов и связанных услуг на сайте IANA - TCP / IP Port Assignments .

Service Port Number Service Description
эхо 7 UDP / TCP отправляет обратно то, что получает.
отбросить 9 UDP / TCP отбрасывает ввод.
дневное время 13 UDP / TCP возвращает время в формате ASCII.
Chargen 19 UDP / TCP возвращает символы.
ftp 21 год Передача файлов TCP.
телнет 23 Удаленный вход по TCP.
smtp 25 Электронная почта TCP.
дневное время 37 UDP / TCP возвращает двоичное время.
tftp 69 Простая передача файлов по протоколу UDP.
Палец 79 Информация TCP о пользователях.
http 80 TCP World Wide Web.
авторизоваться 513 Удаленный вход по TCP.
ВОЗ 513 UDP разная информация о пользователях.
Xserver 6000 Окна TCP X (NB> 1023).

Порт и сервисные функции

Unix предоставляет следующие функции для получения имени службы из файла / etc / services.

  • struct servent *getservbyname(char *name, char *proto) - Этот вызов принимает имя службы и имя протокола и возвращает соответствующий номер порта для этой службы.

  • struct servent *getservbyport(int port, char *proto) - Этот вызов принимает номер порта и имя протокола и возвращает соответствующее имя службы.

Возвращаемое значение для каждой функции - это указатель на структуру следующей формы:

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

Вот описание полей членов -

Атрибут Значения Описание
s_name http Это официальное название службы. Например, SMTP, FTP POP3 и т. Д.
s_aliases НИКНЕЙМЫ Он содержит список псевдонимов служб. В большинстве случаев он будет установлен в NULL.
s_port 80 Он будет иметь связанный номер порта. Например, для HTTP это будет 80.
s_proto

TCP

UDP

Он настроен на используемый протокол. Интернет-услуги предоставляются с использованием TCP или UDP.