Протокол TCP

Полностью протокол описывается в стандарте RFC 793 (скачать в PDF на русском)

ip соединение определяется двумя параметрами:

  1. ip адресом сервера
  2. Портом

Порты определяют для какого сервиса приходит информация. Для каждого сервиса назначается свой порт, который этот сервис "слушает".

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

Пример просмотра http запроса с помощью developer tools Chrome


Статистику активных подключений можно посмотреть в терминале функцией netstat. Некоторые полезные параметры этой команды:

  • -a - вывод всех активных подключений TCP и прослушиваемых компьютером портов TCP и UDP.
  • -n - Показывать сетевые адреса как числа. 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).

Перейти к верхней панели