Полностью протокол описывается в стандарте RFC 793 (скачать в PDF на русском)
ip соединение определяется двумя параметрами:
Порты определяют для какого сервиса приходит информация. Для каждого сервиса назначается свой порт, который этот сервис "слушает".
ip-адрес вместе с портом называется сокет
В юниксовых системах порты назначаются в файле /etc/services
. Строки в нем выглядят примерно таким образом:
http-alt 8080/udp # HTTP Alternate (see port 80)
Стандартно для http используется порт 80, а для https-соединения (SSL) - 443, этому соответствуют строки:
http 80/tcp www www-http # World Wide Web HTTP
https 443/tcp # http protocol over TLS/SSL
Почтовые порты
smtp 25/tcp # Simple Mail Transfer
pop3 110/tcp # Post Office Protocol - Version 3
Порт для подключения по FTP:
ftp 21/tcp # File Transfer [Control]
Все порты до номера 1024 работают под управлением пользователя root
Когда мы набираем адрес сайта, браузер обращается к ip-адресу сервера. Мы можем посмотреть на какой ip-адрес уходит запрос и какую информацию браузер отправляет, например в инструментах разработчика Chrome. Пример на скриншоте. Инструменты разработчика можно открыть сочетанием клавиш ⌘ + ⌥ + I
для mac os и ctrl + atl + i
для Windows
Статистику активных подключений можно посмотреть в терминале функцией netstat
. Некоторые полезные параметры этой команды:
Приведу пример использования. У меня в локальной сети стоит NAS Synology. Это домашнее хранилище под управлением сборки linux. На него я установил веб-сервер, чтобы заниматься веб-разработкой и хранить на нем локально файлы сайтов. При переносе сайтов не смог подключиться к базе данных MySQL ни по ip, ни по localhost.
Подключаюсь через терминал к серверу и запускаю команду sudo netstat -tlpn
и вижу в консоли строку:
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 8662/mysqld
Соответственно добавляю к адресу порт ":3307" и благополучно подключаюсь к базе. Стоит отметить, что если выполнить netstat -tlpn без прав рута, то получим список без имен (8662/mysqld).