Мрежен распоредувач
Мрежен распоредувач, исто така наречен пакетен распоредувач, дисциплина на редови, алгоритам на редење или qdisc, е арбитер на јазол во комуникациска мрежа за префрлање на пакети. Тој управува со низата мрежни пакети во преносот и прима редици на контролорот на мрежниот интерфејс. Постојат неколку мрежни распоредувачи на располагање за различни оперативни системи, кои спроведуваат многу од постојните алгоритми за мрежно закажување .
Логиката на мрежниот распоредувач одлучува кој мрежен пакет да го проследува следниот. Мрежниот распоред е поврзан со системот на чекање, привремено чувајќи ги мрежните пакети додека не се пренесат. Системите можат да имаат единечни или повеќе редици во кои случаи секој може да ги држи пакетите на еден проток, класификација или приоритет.
Во некои случаи, можеби не е можно да се закажат сите преноси во рамките на ограничувањата на системот. Во овие случаи, мрежниот распоред е одговорен да одлучи кој сообраќај да се препрати и што се намалува .
Терминологија и одговорности
уредиМрежа распоредувач може да има одговорност за спроведување на специфични иницијативи за мрежна контрола на сообраќајот . Контрола на мрежниот сообраќај е термин за чадор за сите мерки насочени кон намалување на загубата на застој, латентност и пакет. Поточно, активното управување со редици (AQM) е селективно спуштање на мрежните пакети со редици за да се постигне поголема цел за спречување на прекумерно мрежно метеж. Распоредот мора да избере кои пакети да се спуштат. Формирањето сообраќај ги измазнува барањата за ширина на опсегот на сообраќајот со одложување на преносни пакувања кога ќе се редат во рафали. Распоредот го одредува времето за пренесените пакети. Квалитет на услугата (QoS) е приоретизација на сообраќајот заснован на услугата класа (диференцирани услуги) или резервирана врска (Интегрирани услуги).
Алгоритми
уредиСо текот на времето, развиени се многу дисциплини на мрежни задачи. Секое од овие обезбедува специфично преуредување или вадење на мрежни пакети во разни преносни или приемни амортизери.[1][2] Дисциплините на редици обично се користат како обиди за компензација на различни услови за мрежно поврзување, како што се намалување на латентноста за одредени класи мрежни пакети, и обично се користат како дел од мерките за QoS.[3][4][5]
Примери на алгоритми погодни за управување со мрежниот сообраќај вклучуваат:
- AVQ (adaptive virtual queue)[6]
- CBQ (class-based queueing]]) discipline
- CHOKe (CHOose and Keep for responsive flows, CHOose and Kill for unresponsive flows) е варијанта на RED
- CoDel (controlled delay) и fair/flow queue CoDel
- CAKE (Common Applications Kept Enhanced), имплементирано во Linux kernel[7]
- Credit-based fair queuing
- DRR (deficit round robin) и DWRR, имплементациски пример напишан од Патрик Мекхарди за Linux kernel[8] и издадено под GNU General Public License.
- FaQ (FavourQueue)[9]
- GCRA (generic cell rate algorithm)
- HFF (heavy-hitter filter)[10]
- HFSC (hierarchical fair-service curve)
- HTB (Hierarchical token bucket)[11]
- QFQ (quick fair queueing)[12]
- FQ (fair queuing) и WFQ (weighted fair queuing)
- FIFO
- pkt_sched: fq: fair queue packet scheduler [13]
- NETEM network emulator[14]
- PIE (proportional integral controller enhanced)[15]
- RED (random early detection)
- ARED (random early detection#ARED|advanced random early detection)
- GRED (generalized random early detection)
- RRED (robust random early detection)
- WRED (weighted random early detection)
- RR (Round-robin scheduling) и WRR (weighted round robin)
- SFB (stochastic fair blue) како и RSFB (resilient SFB)
- SFQ (stochastic fairness queuing)[16]
- TBF (token bucket filter)[17]
- TEQL (trivial link equalizer)
Неколку од горенаведените се имплементирани како модули за јадрото на Линукс [18] и се слободно достапни .
Непотребна амортизација на мрежата
уредиНепотребна амортизација на мрежата (Bufferbloat) е феномен во пакетно-прекинувачките мрежи во која вишокот на визуелниот на пакети предизвикува висока латентност и пакет одложување варијација . На Bufferbloat-от може да му се обрати мрежен распоредник, кој стратешки ги отфрла пакетите за да избегне непотребно висока заостаната во тампон. Примерите вклучуваат CoDel и Случајно рано откривање.
Имплементација
уредиКернелот на Linux
уредиРаспоредот на пакетите Linux кернелот е составен дел од мрежниот магацин на Linux кернелот и управува со преносот и примањето на прстенестите тампони на сите NIC, работејќи на слојот 2 на моделот OSI и ракувајќи со рамки на Етернет, на пример.
Распоредот на пакетите е конфигуриран со помош на алатката наречена tc
(краток за "контрола на сообраќајот"). Како стандардна дисциплина на редици, распоредувачот на пакети користи FIFO имплементација наречена pfifo_fast,[19] иако е систематизиран од својата верзија 217 ја менува стандардната дисциплина на редици на задачи во fq_codel.[20]
Комуналните услуги ifconfig
и ip
им овозможуваат на администраторите на системот да ги конфигурираат txqueuelen
и rxqueuelen
за секој уред одделно во однос на бројот на рамки на Етернет, без оглед на нивната големина. Мрежата со јадрото на Linux Linux содржи неколку други амортизери, кои не управуваат со мрежниот распоред.[б 1]
Филтрите на Berkeley Packet Filter можат да бидат прикачени на класификаторите на распоредот на пакетите. Функционалноста eBPF, донесена со верзијата 4.1 од кернелот Linux во 2015 година, ги проширува класичните класификатори за програмирање на програмата BPF до eBPF.[21] Овие може да се соберат со помош на заднинскиот дел на LLVM eBPF и да се вчитаат во јадрото што работи со помош на tc
алатката.[22]
BSD и OpenBSD
уредиALTQ е имплементација на мрежен распоред за BSDs . Од верзијата 5.5 на OpenBSD, ALTQ беше заменет со распоредувачот HFSC.
Поврзано
уредиБелешки
уреди- ↑ Севкупната големина на сите амортизери била точка на критика од страна на Bufferbloat проектот, кои довеле делумно решение со CoDel кој бил првично тестиран во OpenWrt.
Наводи
уреди- ↑ „Traffic Control HOWTO: Classless Queuing Disciplines (qdiscs)“. tldp.org. Посетено на 7 март 2020.
- ↑ Saravanan Radhakrishnan (30 септември 1999}). „QoS Support in Linux: Queuing Disciplines“. qos.ittc.ku.edu. Посетено на 7 март 2020. Проверете ги датумските вредности во:
|date=
(help) - ↑ „Traffic Control HOWTO: Components of Linux Traffic Control“. tldp.org. Посетено на 7 март 2020.
- ↑ „Traffic Control HOWTO: Traditional Elements of Traffic Control“. tldp.org. Посетено на 7 март 2020.
- ↑ „Queuing Disciplines: Order of Packet Transmission and Dropping“ (PDF). tau.ac.il. 25 октомври 2006. Посетено на 7 март 2020.
- ↑ http://citeseerx.ist.psu.edu/viewdoc/download?doi=10 јануари 1.108.4477&rep=rep1&type=pdf
- ↑ „Let them run CAKE“. LWN.net.
- ↑ „DRR Linux kernel network scheduler module“. kernel.org. Посетено на 2013-09-07.
- ↑ „FavorQueue: a Parameterless Active Queue Management to Improve TCP Traffic Performance“ (PDF). Архивирано од изворникот (PDF) на 2020-05-18. Посетено на 2020-03-07.
- ↑ „Heavy-Hitter Filter qdisc“. kernel.org.
- ↑ „HTB Linux kernel network scheduler module“. kernel.org. Посетено на 7 март 2020.
- ↑ „QFQ Linux kernel network scheduler module“. kernel.org. Посетено на 7 март 2020.
- ↑ „Fair Queue packet scheduler committed to Linux kernel 3.12“.
- ↑ „Network emulator Linux kernel network scheduler module“. kernel.org. Посетено на 7 март 2020.
- ↑ „Proportional Integral controller Enhanced (PIE)“. kernel.org.
- ↑ „SFQ Linux kernel network scheduler module“. kernel.org. Посетено на 7 март 2020.
- ↑ „TBF Linux kernel network scheduler module“. kernel.org. Посетено на 7 март 2020.
- ↑ „The Linux kernel network scheduler“. kernel.org. 26 декември 2012. Посетено на 7 март 2020.
- ↑ „Linux Advanced Routing and Traffic Control HOWTO, Section 9.2 јануари pfifo_fast“. lartc.org. 19 мај 2012. Посетено на 7 март 2020.
- ↑ „systemd System and Service Manager: NEWS file“. freedesktop.org. 22 мај 2015. Посетено на 7 март 2020.
- ↑ „Linux kernel 4.1, Section 11. Networking“. kernelnewbies.org. 21 јуни 2015.
- ↑ „BPF and XDP Reference Guide“. Cilium documentation web site.