10

Я слышал, как люди говорят о портах и протоколах (в отношении компьютерных сетей), и они часто предоставляют им аналогии (например: «порт очень похож на порт доставки, он отправляет и получает данные, как порт отправки и получения товаров»). из других портов ") и тому подобное.

Я понимаю, что все это значит, но только на очень искусственном уровне. В принципе, я знаю, что такое порт, и я понимаю, что такое протоколы, но что они на самом деле?

Являются ли эти порты физическими объектами? Они что-то встроены в часть моего компьютера? Сколько там портов? Могу ли я увеличить или уменьшить количество портов? Они хоть что-то физическое? Или написано в коде? Где этот код? Операционная система? Что на самом деле порт?

Какие протоколы? Я полагаю, они какой-то код .... Можете ли вы создать свой собственный протокол? Как вы получаете конкретный порт для запуска определенного протокола? Какой язык вы используете для создания протокола? Как вы определяете или изобретаете новый протокол?

3 ответа3

7

В ответ на Hello71s, это может помочь визуализировать порт, думая о структуре адреса в пакете. Пакет, являющийся единицей данных, передаваемых по сети. TCP является примером протокола транспортного уровня, который использует порты и обычно используется по IP.

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

Source IP    Source Port       Dest IP       Dest Port       Service
10.1.1.10    23434             192.168.1.1   80              web
10.1.1.10    34343             192.168.1.1   25              incoming email

Веб-служба владеет портом 80, а служба электронной почты - портом 25 - они "слушают" свои соответствующие порты, что позволяет трафику оказаться в нужном месте.

Порт источника является "эфемерным" - то есть он составлен во время отправки пакета. Тем не менее, это все еще служит полезной цели. Это позволяет обоим концам соединения отслеживать отдельные разговоры. Подумайте, отправил ли наш пользователь два одновременных веб-запроса:

Source IP    Source Port       Dest IP       Dest Port       Service
10.1.1.10    23232             192.168.1.1   80              web request 1
10.1.1.10    23234             192.168.1.1   80              web request 2

Это позволяет веб-службе знать, что это отдельные запросы, но также и обратный трафик с веб-сервера - веб-страниц - отправляется обратно на соответствующие исходные порты, что позволяет браузеру узнать, на какой запрос отвечает сервер.

Обратите внимание, что все это относится к номерам портов, с точки зрения TCP/IP, фактические данные, перемещаемые по этим портам, могут быть любыми. Он не заботится о приложениях и не осведомлен о них, поэтому, если у вас есть веб-трафик на 25-м порту и электронная почта на 80-м порту, это будет неинтересно.

Именно отправляющее и получающее приложение должно гарантировать, что данные являются правильной структурой, и именно здесь вступают протоколы приложений. HTTP является примером протокола приложения, который веб-браузеры используют для взаимодействия с веб-серверами. Это четко определенный протокол, который гарантирует, что браузер будет отправлять запросы на любой веб-сервер, и что веб-сервер будет понимать и отвечать разумно. Но в его определении ничего не говорится о том, как пакеты попадают из А в В, - это ответственность предыдущих уровней - транспортного, интернет-и канального уровней.

3

Гектометр Я думаю, что для начала лучше всего взглянуть на IP Suite, он же модель TCP/IP. (Игнорирование других уровней модели OSI в целях простоты.)

По сути, это серия слоев:

Уровень приложений - HTTP, FTP, POP, SSH и т.д.
Транспортный уровень - TCP, UDP и т.д.
Интернет-уровень - IP, ICMP и т.д.
Канальный уровень - Ethernet и т.д.

Порты, по большей части, реализованы на транспортном уровне (уровень 4 - Да, нумерация правильная.)

Большинство стеков TCP и / или UDP, реализованных в ОС, используют базовую систему назначения портов программам и просто вызывают события в этих программах, когда пакеты поступают по сети. Тем не менее, любая реализация может теоретически работать; в академических кругах могут даже возникнуть гипотетические альтернативные стеки.

TCP был определен как имеющий в общей сложности 65535 портов, которые любая программа может использовать, чтобы делать с ними все, что им хочется (хотя многие операционные системы ограничивают использование портов до 1024, предоставляя им специальный специальный статус). Хотя существуют некоторые ограниченные списки, не существует реального стандарта для определения, кто получает какой порт и какой порт выполняет какую программу. Таким образом, порт является более или менее случайным числом, с которым разные реализации программы решают согласиться обмениваться данными. Конечно, разработчики таких программ стараются избегать портов, которые уже выбрали другие популярные программы.

Конечно, запускать по TCP не нужно. Некоторые протоколы работают на чистом интернет-уровне, или даже на чистом канальном уровне, в основном в целях эффективности или потому, что эти протоколы были изобретены еще до того, как существовал даже протокол TCP или IP. Конечно, при этом вы теряете простоту и тщательную проверку ошибок сетевых библиотек ОС.

Для получения более подробной информации посетите страницы Википедии о модели OSI, TCP и IP.

2

Хотя этот вопрос уже помечен как ответивший, я хотел бы ответить на некоторые дополнительные вопросы, заданные в ОП.

Являются ли эти порты физическими объектами?

Никакие порты не являются физическими объектами.

Номер порта представляет собой 16-разрядное целое число без знака, что означает, что диапазон доступных для использования портов составляет от 1 до 65535 (номер порта 0 зарезервирован и не может использоваться). Процесс связывает свои входные или выходные каналы через интернет-сокеты, тип файлового дескриптора, с транспортным протоколом, номером порта и IP-адресом. Этот процесс называется связыванием и позволяет отправлять и получать данные по сети.

Они что-то встроены в часть моего компьютера? Они хоть что-то физическое? Или написано в коде? Где этот код? Операционная система? Что на самом деле порт?

Задачей сетевого программного обеспечения операционной системы является передача исходящих данных со всех портов приложения в сеть и пересылка прибывающих сетевых пакетов в процесс путем сопоставления IP-адреса пакета и номера порта.

Только один процесс может связываться с конкретным IP-адресом и комбинацией портов, используя один и тот же транспортный протокол. Распространенные сбои приложений, иногда называемые конфликтами портов, возникают, когда несколько программ пытаются привязать к одному и тому же номеру порта один и тот же IP-адрес, используя один и тот же протокол.

Приведенный выше абзац является ключом к пониманию того, почему порты / протоколы используются в сети. Если бы у нас не было способа указать протокол, который передает данные по согласованному номеру порта apon - вы не смогли бы делать более 1 вещи одновременно (проверьте свою электронную почту и используйте Интернет), потому что ваш компьютер будет иметь нет способа разграничить данные для вашего почтового клиента и данные для веб-сайта, который вы просматриваете.

Сколько там портов?

Номера портов назначаются различными способами на основе трех диапазонов:

  1. Хорошо известные / системные порты (0-1023) - этот диапазон портов используется системными процессами, которые предоставляют широко используемые типы сетевых служб (HTTP / 80, HTTPS / 443, Telnet / 21, SSH / 22)

  2. Порты зарегистрированных / пользователей (1024-49151) - диапазон номеров портов от 1024 до 49151 - это зарегистрированные порты. Они назначаются IANA для конкретной услуги по заявке запрашивающей организации. (Webmin / 10000, HTTP Proxy / 8080, протокол удаленного рабочего стола / 3389 и т.д.)

  3. Эфемерные / динамические / частные порты (49152-65535) - диапазон 49152–65535 содержит динамические или частные порты, которые нельзя зарегистрировать в IANA. Этот диапазон используется для пользовательских или временных целей и для автоматического распределения временных портов.

Могу ли я увеличить или уменьшить количество портов?

Что касается возможности увеличения количества доступных портов, вы не можете назначить порт выше 65535 из-за математики, которая позволяет работать в сети (двоичной) - поэтому ответ на этот вопрос - нет, вы не можете увеличить общее количество доступных порты выше 65535.

Какие протоколы?

В области компьютерных наук коммуникационный протокол - это система цифровых правил обмена сообщениями внутри или между компьютерами. Когда сообщения обмениваются через компьютерную сеть, система правил называется сетевым протоколом. Протокол - это в основном согласованный набор инструкций / команд / вызовов, по которым два сетевых устройства могут обмениваться данными. Подумайте, не договорились ли мы о протоколах и веб-серверах, просто случайным образом отправили данные в веб-браузеры, с которыми браузер не знал, что делать? К счастью, у нас есть HTTP, который каждый созданный веб-браузер встроил в программное обеспечение, чтобы он мог взаимодействовать с любым веб-сервером, также говорящим на одном языке (HTTP).

Я полагаю, они какой-то код .... Можете ли вы создать свой собственный протокол? Какой язык вы используете для создания протокола?

Да, вы можете создавать свои собственные протоколы. Протоколы написаны на самых разных языках. Я не являюсь разработчиком программного обеспечения, но я уверен, что пока на любом языке, который вы используете, есть библиотеки, которые позволяют вам писать программное обеспечение, которое может взаимодействовать по TCP/IP (существуют другие наборы протоколов, но TCP/IP является широко используется), вы можете использовать этот язык для написания протокола. Язык программирования «С», кажется, наиболее часто используется для написания протоколов. Это связано с тем, что многие из первых сетевых протоколов были разработаны в UNIX в 1970-х годах, и C оказался языком, на котором написан сам UNIX.

Как вы получаете конкретный порт для запуска определенного протокола?

Это довольно сильно отличается между ОС. Например, чтобы изменить номер порта, на котором работает протокол удаленного рабочего стола в Windows, необходимо отредактировать реестр. В Linux многие сетевые службы могут быть настроены непосредственно из файла .conf для конкретной сетевой службы.

Как вы определяете или изобретаете новый протокол?

См. Https://journal.paul.querna.org/articles/2012/02/22/designing-network-protocols/ для блога, написанного кем-то, кто недавно разработал новый сетевой протокол, и какие вещи он должен был сделать по пути.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .