Когда клиентский процесс хочет подключиться к серверу, клиент должен иметь способ идентифицировать сервер, к которому он хочет подключиться. Если клиент знает 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 .
обслуживание | Номер порта | Описание услуг |
эхо | 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 windows (NB> 1023). |
Порт и сервисные функции
Unix предоставляет следующие функции для извлечения имени службы из файла / etc / services.
-
struct servent * getservbyname (char * name, char * proto) — этот вызов принимает имя службы и имя протокола и возвращает соответствующий номер порта для этой службы.
-
struct servent * getservbyport (int port, char * proto) — этот вызов принимает номер порта и имя протокола и возвращает соответствующее имя службы.
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; };
Вот описание полей участника —
TCP
UDP