IP-адрес (айпи-адрес, сокращение от англ. Internet Protocol Address) — это уникальный сетевой адрес узла в компьютерной сети, построенной по протоколу IP. В сети Интернет требуется глобальная уникальность адреса; в случае работы в локальной сети требуется уникальность адреса в пределах сети. В версии протокола IPv4 IP-адрес имеет длину 4 байта, в IPv6 — 16 байт.
См.также
Номер порта является 16-разрядным целым двоичным числом, таким образом, порты возможны в диапазоне от 1 до 65535 (для TCP, номер порта 0 зарезервирован и не может быть использован). Для UDP порт источника не является обязательным и нулевое значение означает отсутствие порта.
$ cat /etc/services
$ getent services http
http 80/tcp www
Поиск сервисов на Python, при помощи socket.getservbyname()
,
socket.getservbyport()
:
>>> import socket
>>> socket.getservbyport(80)
'http'
>>> socket.getservbyport(21)
'ftp'
>>> socket.getservbyport(53, 'udp')
'domain'
>>> socket.getservbyname('http')
80
На C:
Компиляция:
$ gcc getservbyname.c -o getservbyname
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
struct servent *serv;
if (argc < 3) {
puts("Incorrect parameters. Use:");
puts(" gsbnm service-name protocol-name");
return EXIT_FAILURE;
}
/* getservbyname() - opens the etc.services file and returns the */
/* values for the requested service and protocol. */
serv = getservbyname(argv[1], argv[2]);
if (serv == NULL) {
printf("Service \"%s\" not found for protocol \"%s\"\n",
argv[1], argv[2]);
return EXIT_FAILURE;
}
/* Print it. */
printf("Name: %-15s Port: %5d Protocol: %-6s\n",
serv->s_name,ntohs(serv->s_port),serv->s_proto);
return EXIT_SUCCESS;
}
Пример использования:
$ ./getservbyname http tcp
Name: http Port: 80 Protocol: tcp
См.также
Для обеспечения сетевых коммуникаций используются сокеты
. Сокет
это
конечная точка сетевых коммуникаций. Каждый использующийся сокет имеет тип и
ассоциированный с ним процесс.
Сокеты существуют внутри коммуникационных доменов. Домены это абстракции,
которые подразумевают конкретную структуру адресации и множество протоколов,
которое определяет различные типы сокетов внутри домена. Примерами
коммуникационных доменов могут быть: UNIX
домен, Internet
домен, и
т.д.
Обычно клиент явно подсоединяется к слушателю, после чего любое чтение или запись через его файловый дескриптор будут передавать данные между ним и сервером.
Ко всем потокам ввода-вывода (которые могут быть связаны как с файлами, так и с каталогами, сокетами и FIFO) можно получить доступ через так называемые файловые дескрипторы. Файловый дескриптор — это неотрицательное целое число. Когда создается новый поток ввода-вывода, ядро возвращает процессу, создавшему поток ввода-вывода, его файловый дескриптор.
В программе, сокет идентифицируется дескриптором - это просто переменная типа int.