Что такое порты и протоколы на самом деле?


11

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

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

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

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

Ответы:


9

В ответ на 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.


Я все это понимаю. Так что, в принципе, порт - это не физическая вещь? Это что-то запрограммировано? Где определен порт на компьютере? А затем для протоколов, как они создаются? Они запрограммированы?
Боб

Нет, порт в данном контексте не является физическим (очевидно, USB-порт является физическим, но не относится к этой теме). Протоколы определяются через RFC ( en.wikipedia.org/wiki/Request_for_Comments ) и реализуются в программно-программируемом коде.
Пол

Правильно ли было бы сказать, что TCP - это системный процесс, который резервирует память для хранения данных, поступающих с IP (или для хранения данных, извлекаемых по IP), и что эта память делится на «порты». И что другие приложения (процессы), такие как HTTP, могут уведомлять TCP, что они хотели бы зарезервировать определенные порты (то есть 80 и 443). Тогда становится задачей TCP: 1. разрешить HTTP добавлять исходящие данные к этим адресам памяти и 2. сообщить HTTP, когда входящие данные были добавлены к этим адресам памяти?
Зак Смит

Возможно, Боб перепутал порты протокола и порты физического коммутатора. На часть порта протокола ответили неплохо несколько человек, хотя и не было ни одного источника. Что касается физических портов, это места ввода и вывода, где соединяются кабели, которые позволяют передавать данные по сети. Это может включать в себя электронные схемы, оптоволоконные приемники, лазеры и буферы. Л. Петерсон 4-е издание.
Нассим

3

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

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

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

Номер порта представляет собой 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 является наиболее широко используется), вы можете использовать этот язык для написания протокола. Язык программирования 'C', кажется, наиболее часто используется для написания протоколов. Это связано с тем, что многие из первых сетевых протоколов были разработаны в UNIX в 1970-х годах, и C оказался языком, на котором написан сам UNIX.

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.