Мрежов порт
Мрежовият порт е софтуерна абстракция служеща за определяне на различните крайни точки на комуникационните канали в рамките на един хост. Мрежовият адрес, заедно с порта, идентифицира крайната точка на един комуникационен канал в рамките на една мрежа и се нарича транспортен адрес[1] (по OSI модела). Сборът от мрежовите адреси и портове (по един за хост) на два комуникиращи помежду си хоста, идентифицира еднозначно комуникационния канал помежду им и се нарича мрежов цокъл (или сокет). Два хоста могат да имат повече от един комуникационен канал помежду си; в този случай, комуникационните канали се различават с поне по един от портовете си.
Мрежовият порт, в най-общи линии, може да се разглежда като софтуерна аналогия на хардуерния порт. В тази аналогия, портът може да се разглежда като място на контакт между комуникиращи си процеси.
Отделният порт на един хост се идентифицира с число наречено номер на порт. Това число присъства в заглавието на съобщения на протоколи от транспортния слой. Такива протоколи са TCP, UDP, DCCP, SCTP. Протоколът ISO-TP използва подобен идентификатор – транспортен префикс.
Дефиниция съгласно OSI модела
[редактиране | редактиране на кода]Портовете се използват от протоколи от транспортния слой на OSI модела. В терминологията на OSI, портът се нарича транспортен селектор (transport selector или transport suffix). Така както мрежовият слой предоставя абстракция на хоста, наречена мрежов адрес, към транспортния слой, така и транспортният слой предоставя абстракция към по-горните слоеве, идентифицираща отделния процес и наричана транспортен адрес. Транспортният адрес е съчетание от мрежовия адрес и транспортния селектор (порта).
Роля в комуникацията
[редактиране | редактиране на кода]На един хост може да се изпълняват множество процеси които да искат достъп до мрежовите функции предоставяни от операционната система. Когато до хоста пристигне информация по мрежата, операционната система трябва да реши за кой процес е предназначена тя. Именно портът позволява на ОС да вземе това решение. Всеки процес който иска да комуникира трябва да отвори определен порт (с определен номер) чрез съответното системно извикване. Така номерът на порта се асоциира от операционната мрежа със съответния процес. Когато пристигне съобщение от мрежата, в заглавната му част е посочен порта за който е предназначено. Операционната система предава това съобщение на процеса който е отворил съответния порт.
IANA
[редактиране | редактиране на кода]В модела на комуникация клиент-сървър, клиентският процес е инициатор на комуникацията. Той се свързва към определен процес на сървъра, предоставящ някаква услуга (уеб, FTP и т.н.). За целта клиентът указва номера на порта съответстващ на услугата от която се нуждае. Организацията IANA има грижата да заделя и съпоставя на различни номера на портове – различни услуги (и съответно различни протоколи от приложния и други комуникационни слоеве). На портовете се съпоставя и уникален мнемоничен код. Тъй като за номера на порт в заглавията на протоколите е заделено 16-битово поле, възможните му стойности са 0 – 65535.
Диапазонът на портовете от 0 – 1023 IANA определя като познати портове. Към тези номера са назначени често използвани услуги като уеб (HTTP), FTP, IRC и др.
Диапазонът 1024 – 49151 се нарича регистрирани портове. IANA назначава тези портове за ползване от частни програми (например 3724 за World of Warcraft и др.).
Портовете 49152 – 65535 са динамични или частни. Те се използват от клиентите в комуникационния модел клиент-сървър, както и от програми в разработка или такива за частно ползване.
Всеки протокол има собствено портово именно пространство, т.е. всеки протокол получава отделни номера на портове. Стремежът на IANA е все пак, услуги които могат да използват няколко протокола, да получават един и същи номер на порт за всичките протоколи.
Пример
[редактиране | редактиране на кода]Когато един потребител иска да отвори определена уебстраница, той въвежда нейния уеб адрес в браузъра си. При това, браузърът превежда уеб адреса в мрежов адрес (IP) използвайки DNS системата. След това изпраща съобщение, в заглавието на което записва своите мрежов адрес и порт, както и мрежовия адрес на сървъра, а като порт на получателя задава стойността 80. Това е портовият номер по подразбиране на уеб услугата (HTTP) назначен от IANA.
Когато сървърът получи съобщението, той знае, че е предназначено за уеб сървърната програма (да предположим – Apache), защото е указан порт 80. Операционната система предава съобщението на Apache, а той връща отговор на посочените от нас мрежов адрес и порт.
Тъй като една уебстраница обикновено съдържа голям брой файлове, клиентът (браузърът) може да инициира няколко паралелни комуникационни канала към сървъра, за да тегли няколко файла едновременно. За всеки един от тези канали, браузърът трябва да отвори отделен порт.
Нерегламентирана употреба на портовете
[редактиране | редактиране на кода]Сканиране на портове
[редактиране | редактиране на кода]Възможно е да се провери какви услуги (съответно – какви програми) се изпълняват на един компютър, свързан в мрежа. Това става като се изпрати съобщение към всеки един порт (най-често – само към познатите портове) и се провери от кой ще се получи отговор.
Заобикаляне на защитни стени
[редактиране | редактиране на кода]Някои защитни стени блокират портове, различни от най-често използваните, за да намалят риска за разпространение на злонамерени програми. За да комуникира, програма използваща друг порт, трябва първо да създаде изключващо правило в конфигурацията на защитната стена. А това обикновено изисква намесата на потребителя. За да улеснят потребителя, такива програми понякога използват добре познати портове, които не се блокират от защитната стена. В повечето случаи това е възможно и не представлява проблем, тъй като това са потребителски програми, за които се предполага че не се изпълняват на сървър. Най-често използваният порт за заобикаляне на защитни стени е 80 – този за уеб услугата. Ако такава програма заеме този порт, на съответния компютър няма да може да се стартира уеб услуга (освен ако не ѝ се зададе друг порт).
Бележки и препратки
[редактиране | редактиране на кода]- ↑ man iso(4)[неработеща препратка] от ръководството на BSD