Що таке порти та протоколи насправді?


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 і т.д.
Link Layer - 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 видання.
nassim

3

Хоча це питання вже було позначено як відповідь, я хотів би вирішити деякі додаткові запитання, задані в ОП.

Це порти фізичні об'єкти?

Жодні порти не є фізичними об'єктами.

Номер порту - це 16-бітне ціле число, яке не підписується, що означає, що діапазон портів, доступних для використання, становить від 1 до 65535 (номер порту 0 зарезервований і не може бути використаний). Процес пов'язує вхідні та вихідні канали через Інтернет-розетки, тип дескриптора файлів, з транспортним протоколом, номером порту та IP-адресою. Цей процес відомий як прив'язка і дозволяє надсилати та приймати дані через мережу.

Вони щось вбудовані в частину мого комп'ютера? Вони навіть щось фізичне? Або записано в коді? Де цей код? Операційна система? Що справді є портом?

Забезпечення мережевого програмного забезпечення операційної системи має завдання передавати вихідні дані з усіх портів додатків у мережу та пересилати вхідні мережеві пакети до процесу шляхом узгодження ІР-адреси та номера порту пакета.

Лише один процес може прив'язуватися до певної IP-адреси та комбінації портів, використовуючи той самий транспортний протокол. Поширені збої в застосуванні, які іноді називаються конфліктами портів, трапляються, коли кілька програм намагаються прив’язати до одних і тих же номерів портів на одній IP-адресі за допомогою одного і того ж протоколу.

Наведений вище пункт є ключовим для розуміння того, чому порти / протоколи використовуються в мережі. Якби у нас не було способу вказати протокол, який передає дані за узгодженим номером порту апона - ви не зможете робити більше ніж одну справу за один раз (перевірити електронну пошту та користуватися Інтернетом), оскільки на вашому комп’ютері був би не можна відрізняти дані для свого клієнта електронної пошти та даних для веб-сайту, який ви переглядаєте.

Скільки портів?

Номери портів присвоюються різними способами на основі трьох діапазонів:

  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.