В ответ на 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 является примером протокола приложения, который веб-браузеры используют для взаимодействия с веб-серверами. Это четко определенный протокол, который гарантирует, что браузер будет отправлять запросы на любой веб-сервер, а веб-сервер будет понимать и реагировать разумно. Но в его определении ничего не говорится о том, как пакеты попадают из А в В - это ответственность предыдущих уровней - транспортного, интернет-и канального уровней.
Гектометр Я думаю, что для начала лучше всего взглянуть на 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.
источник
Хотя этот вопрос уже помечен как ответ, я хотел бы ответить на некоторые дополнительные вопросы, заданные в ОП.
Никакие порты не являются физическими объектами.
Номер порта представляет собой 16-разрядное целое число без знака, что означает, что диапазон доступных для использования портов составляет от 1 до 65535 (номер порта 0 зарезервирован и не может использоваться). Процесс связывает свои входные или выходные каналы через интернет-сокеты, тип файлового дескриптора, с транспортным протоколом, номером порта и IP-адресом. Этот процесс называется связыванием и позволяет отправлять и получать данные по сети.
Задачей сетевого программного обеспечения операционной системы является передача исходящих данных со всех портов приложения в сеть и пересылка прибывающих сетевых пакетов процессу путем сопоставления IP-адреса пакета и номера порта.
Только один процесс может связываться с конкретным IP-адресом и комбинацией портов, используя один и тот же транспортный протокол. Распространенные сбои приложения, иногда называемые конфликтами портов, возникают, когда несколько программ пытаются привязать к одному и тому же номеру порта один и тот же IP-адрес, используя один и тот же протокол.
Приведенный выше абзац является ключом к пониманию того, почему порты / протоколы используются в сети. Если бы у нас не было способа указать протокол, который передает данные по согласованному номеру порта apon - вы не смогли бы делать более 1 вещи одновременно (проверьте свою электронную почту и воспользуйтесь Интернетом), потому что ваш компьютер будет иметь нет способа разграничить данные для вашего почтового клиента и данные для веб-сайта, который вы просматриваете.
Номера портов назначаются различными способами на основе трех диапазонов:
Хорошо известные / системные порты (0-1023) - этот диапазон портов используется системными процессами, которые предоставляют широко используемые типы сетевых служб (HTTP / 80, HTTPS / 443, Telnet / 21, SSH / 22)
Порты зарегистрированных / пользователей (1024-49151) - диапазон номеров портов от 1024 до 49151 - это зарегистрированные порты. Они назначаются IANA для конкретной услуги по заявке запрашивающей организации. (Webmin / 10000, HTTP Proxy / 8080, протокол удаленного рабочего стола / 3389 и т. Д.)
Эфемерные / динамические / частные порты (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/ для блога, написанного кем-то, кто недавно разработал новый сетевой протокол, и какие вещи он должен был сделать по пути.
источник