Te whakamahi i te TSDuck ki te aroturuki i nga rerenga IP(TS).

I tenei ra, he otinga kua rite (mana) mo te aro turuki i nga rerenga IP(TS), hei tauira VB и iQ, he tino nui o raatau mahi me te nuinga o nga wa e pa ana ki nga ratonga pouaka whakaata he rite nga otinga. Ko tenei tuhinga e whakaatu ana i tetahi otinga i runga i tetahi kaupapa puna tuwhera TSDuck, i hangaia mo te iti o te whakahaere i nga rerenga IP(TS) ma te whakamahi i te porotiti CC (te haere tonu) me te tere moka. Ko tetahi tono ka taea te aro turuki i te ngaronga o nga paatete, i te rerenga katoa ranei i roto i te hongere L2 riihi (kaore e taea te aro turuki, hei tauira, ma te panui i nga porotiti mate i roto i nga rarangi).

He poto noa mo TSDuck

Ko te TSDuck he puna tuwhera (2-Clause BSD raihana) pūmanawa (he huinga taputapu papatohu me te whare pukapuka mo te whakawhanake i au ake taputapu, monomai ranei) mo te raweke i nga awa TS. Hei whakaurunga, ka taea e ia te mahi me te IP (multicast/unicast), http, hls, dvb tuners, dektec dvb-asi demodulator, kei reira he kaihanga awa TS o roto me te panui mai i nga konae. Ko te putanga ka taea te tuhi ki tetahi konae, IP (multicast/unicast), hls, dektec dvb-asi me HiDes modulators, kaitakaro (mplayer, vlc, xine) me te maturuturu. I waenga i te whakaurunga me te whakaputanga, ka taea e koe te whakaahei i nga momo kaitukatuka waka, hei tauira, te maataki ano i nga PID, te mahi tukituki/whakaahua, te wetewete i nga porotiti CC, te tatau i te reiti moka me etahi atu mahinga mo nga awa TS.

I roto i tenei tuhinga, ka whakamahia nga awa IP (whakamarama maha) hei whakaurunga, ka whakamahia nga tukatuka bitrate_monitor (mai i te ingoa ka marama he aha tenei) me te haere tonu (CC counter analysis) ka whakamahia nga tukatuka. Kaore he raruraru, ka taea e koe te whakakapi IP multicast me tetahi atu momo whakauru e tautokohia ana e TSDuck.

Kei te wātea hanga mana / mōkihi TSDuck mo te nuinga o nga OS o naianei. Kaore he mea mo Debian, engari i kaha taatau ki te whakahiato mo Debian 8 me Debian 10 kaore he raru.

I muri mai, ka whakamahia te putanga TSDuck 3.19-1520, ka whakamahia te Linux hei OS (i whakamahia te debian 10 ki te whakarite i te otinga, i whakamahia a CentOS 7 mo te whakamahi pono)

Te whakarite i te TSDuck me te OS

I mua i te aro turuki i nga rerenga tuuturu, me mohio koe kei te mahi tika a TSDuck me te kore e paheke i te kaari whatunga, i te taumata OS (tupapa) ranei. Ka hiahiatia tenei kia kore ai koe e whakaaro i muri mai i te waahi i puta ai nga maturuturu - i runga i te whatunga, i "i roto i te tūmau." Ka taea e koe te tirotiro i nga maturuturu i te taumata kaari whatunga me te whakahau ethtool -S ethX, ka mahia e te ethtool ano (te nuinga o te waa me whakanui koe i te RX buffer (-G) me etahi wa ka whakakorehia etahi o nga whakaheke (-K)). Ka rite ki te tūtohutanga whānui, he mea tika ki te whakamahi i te tauranga motuhake ki te whiwhi i te waka tātarihia, ki te taea, ka whakaiti i te pai teka na te mea i puta te maturuturunga iho i runga i te tauranga kaitātari na te aroaro o etahi atu waka. Mena kaore e taea (kei te whakamahi koe i te rorohiko paku/NUC me te tauranga kotahi), he mea tika kia whirihorahia te kaupapa matua o nga waka kua tātarihia e pa ana ki era atu o te taputapu e hono ana te kaitirotiro. Mo nga taiao mariko, i konei me tupato koe, kia kitea e koe nga takai mokete mai i te tauranga tinana ka mutu me te tono kei roto i te miihini mariko.

Te whakaputa me te whiwhi roma i roto i te kaihautu

Hei mahi tuatahi ki te whakarite i te TSDuck, ka whakaputa me te whiwhi waka i roto i te kaihautu kotahi ma te whakamahi kupenga.

Te whakarite i te taiao:

ip netns add P #создаём netns P, в нём будет происходить анализ трафика
ip link add type veth #создаём veth-пару - veth0 оставляем в netns по умолчанию (в этот интерфейс будет генерироваться трафик)
ip link set dev veth1 netns P #veth1 - помещаем в netns P (на этом интерфейсе будет приём трафика)
ip netns exec P ifconfig veth1 192.0.2.1/30 up #поднимаем IP на veth1, не имеет значения какой именно
ip netns exec P ip ro add default via 192.0.2.2 #настраиваем маршрут по умолчанию внутри nents P
sysctl net.ipv6.conf.veth0.disable_ipv6=1 #отключаем IPv6 на veth0 - это делается для того, чтобы в счётчик TX не попадал посторонний мусор
ifconfig veth0 up #поднимаем интерфейс veth0
ip route add 239.0.0.1 dev veth0 #создаём маршрут, чтобы ОС направляла трафик к 239.0.0.1 в сторону veth0

Kua reri te taiao. Whakarewahia te kaitirotiro waka:

ip netns exec P tsp --realtime -t 
 -I ip 239.0.0.1:1234 
 -P continuity 
 -P bitrate_monitor -p 1 -t 1 
 -O drop

te tikanga "-p 1 -t 1" me tatau koe i te reiti moka ia hekona me te whakaatu korero mo te reiti moka ia hekona.
Ka whakarewahia e matou he kaihanga waka me te tere o te 10 Mbit/s:

tsp -I craft 
 -P regulate -b 10000000 
 -O ip -p 7 -e --local-port 6000 239.0.0.1:1234

ko te tikanga o te "-p 7 -e" me whakakootia e koe nga paatete TS e 7 ki roto i te paatete IP 1 me te mahi pakeke (-e), ara. tatari i nga wa katoa mo nga paatete TS 7 mai i te tukatuka whakamutunga i mua i te tuku i te hanganga o te putea IP.

Ka timata te kaitirotiro ki te whakaatu i nga karere e tumanakohia ana:

* 2020/01/03 14:55:44 - bitrate_monitor: 2020/01/03 14:55:44, TS bitrate: 9,970,016 bits/s
* 2020/01/03 14:55:45 - bitrate_monitor: 2020/01/03 14:55:45, TS bitrate: 10,022,656 bits/s
* 2020/01/03 14:55:46 - bitrate_monitor: 2020/01/03 14:55:46, TS bitrate: 9,980,544 bits/s

Inaianei me tapiri etahi pata:

ip netns exec P iptables -I INPUT -d 239.0.0.1 -m statistic --mode random --probability 0.001 -j DROP

ka puta nga karere penei:

* 2020/01/03 14:57:11 - continuity: packet index: 80,745, PID: 0x0000, missing 7 packets
* 2020/01/03 14:57:11 - continuity: packet index: 83,342, PID: 0x0000, missing 7 packets 

e tumanakohia ana. Ka whakakorehia e matou te ngaronga o te paakete (ip netns exec P iptables -F) ka ngana ki te whakanui ake i te tere moka whakaputa ki te 100 Mbit/s. Ka ripoatahia e te kaitataritari te maha o nga hapa CC me te 75 Mbit/s hei utu mo te 100. Kei te ngana matou ki te whakaaro ko wai te he - kaore te kaihanga i te pupuri, kaore ranei te raru kei roto, ki te mahi i tenei ka timata taatau ki te whakaputa he te maha o nga paatete (700000 nga paatete TS = 100000 nga paatete IP):

# ifconfig veth0 | grep TX
       TX packets 151825460  bytes 205725459268 (191.5 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
# tsp -I craft -c 700000 -P regulate -b 100000000 -P count -O ip -p 7 -e --local-port 6000 239.0.0.1:1234
* count: PID    0 (0x0000):    700,000 packets
# ifconfig veth0 | grep TX
        TX packets 151925460  bytes 205861259268 (191.7 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Ka kite koe, 100000 nga paatete IP i hangaia (151925460-151825460). Na ka whakaarohia e matou he aha te mea e pa ana ki te kaitirotiro, ki te mahi i tenei ka tirohia e matou me te kaute RX i runga i te veth1, he tino rite ki te kaute TX i runga i te veth0, katahi ka titiro tatou ki nga mea e tupu ana i te taumata turanga:

# ip netns exec P cat /proc/net/udp                                                                                                           
  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops             
  133: 010000EF:04D2 00000000:0000 07 00000000:00000000 00:00000000 00000000     0        0 72338 2 00000000e0a441df 24355 

I konei ka kite koe i te maha o nga maturuturu = 24355. I roto i nga paatete TS ko te 170485, ko te 24.36% ranei o te 700000, no reira ka kite matou ko te 25% o te bitrate ngaro he maturuturu ki te turanga UDP. I te nuinga o te wa ka paheke ki runga i te turanga UDP na te kore o te parapara, kia kite tatou he aha te rahi o te papaa turanga taunoa me te rahi o te papaa turanga morahi:

# sysctl net.core.rmem_default
net.core.rmem_default = 212992
# sysctl net.core.rmem_max
net.core.rmem_max = 212992

No reira, ki te kore e tino tono nga tono mo te rahi o te paatete, ka hangaia nga turanga me te 208 KB buffer, engari ki te tono atu, kare ano e whiwhi i ta ratou i tono. I te mea i roto i te tsp ka taea e koe te whakarite i te rahi o te parapara mo te whakaurunga IP (--buffer-size), kare matou e pa ki te rahi o te turanga taunoa, engari ka tautuhi noa i te rahi o te putunga papaa me te whakaatu i te rahi o te parapara ma roto i nga tohenga tsp:

sysctl net.core.rmem_max=8388608
ip netns exec P tsp --realtime -t -I ip 239.0.0.1:1234 -b 8388608 -P continuity -P bitrate_monitor -p 1 -t 1 -O drop

Na tenei whakatikatika o te papaa turanga, ko te reiti moka kua kiia inaianei ko te 100Mbps, kaore he hapa CC.

I runga i te kohi CPU na te tono tsp ano. Mo tetahi matua i5-4260U CPU @ 1.40GHz, hei tātari i te rere 10Mbit/s, 3-4% o te PTM ka hiahiatia, 100Mbit/s - 25%, 200Mbit/s - 46%. Ina tautuhia te % te ngaronga o te paakete, karekau e piki te uta o te PTM (engari ka heke iho).

I runga i nga taputapu whai hua ake, i taea te whakaputa me te tātari i nga awa neke atu i te 1Gb/s kaore he raru.

Te whakamatautau i runga i nga kaari whatunga tuuturu

I muri i te whakamatautau i te takirua takirua, me tango e koe kia rua nga kaihautu, kia rua ranei nga tauranga o te ope kotahi, honoa nga tauranga ki tetahi ki tetahi, whakahaere i te kaihanga i runga i tetahi, me te kaitirotiro ki te tuarua. Kaore he ohorere i konei, engari ko te mea ka whakawhirinaki katoa ki nga taputapu, ko te ngoikore, ko te pai ake ka tae mai ki konei.

Ma te whakamahi i nga raraunga kua riro mai i te punaha aroturuki (Zabbix)

tsp karekau he API ka taea te panui miihini penei i te SNMP, he rite ranei. Me whakahiato nga karere CC i te iti rawa 1 hekona i te wa kotahi (me te nui o te paheketanga o te ngaronga o te paatete, ka taea te rau/mano/tekau mano ia hekona, i runga i te tere moka).

No reira, hei tiaki i nga korero me te tuhi kauwhata mo nga hapa CC me te reiti moka me te hanga i etahi atu aitua, tera pea nga whiringa e whai ake nei:

  1. Parse and aggregate (by CC) the tsp output, i.e. huri ki te ahua e hiahiatia ana.
  2. Tāpirihia te tīpune ake me/rānei te bitrate_monitor me ngā monomai pūtukatuka haere tonu kia puta te hua ki te puka ka taea te panui miihini e tika ana mo te punaha aroturuki.
  3. Tuhia to tono ki runga o te whare pukapuka tsduck.

Ma te mohio, mo nga utu mo nga mahi, ko te waahanga 1 te mea ngawari, ina koa ko te tsduck ake kua tuhia ki te reo taumata-iti (ma nga paerewa hou) (C++)

Ko tetahi tauira ngawari o te parser + aggregator i roto i te bash i whakaatu mai i te rere o te 10 Mbit/s me te 50% te ngaronga o te paatete (tino kino rawa atu), ka pau te 3-4 nga wa nui atu i te PTM i te tukanga tsp ake te tukanga bash. Ko tenei ahuatanga kaore e whakaaetia. Ko tetahi waahanga o tenei tauira kei raro

Noodles i runga i te basha

#!/usr/bin/env bash

missingPackets=0
ccErrorSeconds=0
regexMissPackets='^* (.+) - continuity:.*missing ([0-9]+) packets$'
missingPacketsTime=""

ip netns exec P tsp --realtime -t -I ip -b 8388608 "239.0.0.1:1234" -O drop -P bitrate_monitor -p 1 -t 1  -P continuity 2>&1 | 
while read i
do
    #line example:* 2019/12/28 23:41:14 - continuity: packet index: 6,078, PID: 0x0100, missing 5 packets
    #line example 2: * 2019/12/28 23:55:11 - bitrate_monitor: 2019/12/28 23:55:11, TS bitrate: 4,272,864 bits/s
    if [[ "$i" == *continuity:* ]] 
    then
        if [[ "$i" =~ $regexMissPackets ]]
        then
            missingPacketsTimeNew="${BASH_REMATCH[1]}" #timestamp (seconds)
            if [[ "$missingPacketsTime" != "$missingPacketsTimeNew" ]] #new second with CC error
            then
                ((ccErrorSeconds += 1))
            fi
            missingPacketsTime=$missingPacketsTimeNew
            packets=${BASH_REMATCH[2]} #TS missing packets
            ((missingPackets += packets))
        fi
    elif [[ "$i" == *bitrate_monitor:* ]]
    then
        : #...
    fi
done

I tua atu i te mea kaore e pai ana te mahi, kaore he miro noa i roto i te bash, ko nga mahi bash he tikanga motuhake, a me tuhi e au te uara ngaroPackets kotahi te rua i runga i te paanga o te taha (i te wa e whiwhi ana i nga karere bitrate ka tae mai ia hekona). Ko te mutunga mai, ka waiho noa te bash ka whakatauhia kia tuhia he takai (parser + aggregator) ki te golang. Ko te kai PTM o te waehere rite i roto i te golang he 4-5 wa iti iho i te tukanga tsp ano. Ko te whakaterenga o te takai ma te whakakapi i te bash ki te golang he tata ki te 16 nga wa, a, i te nuinga o te waa ka whakaaehia te hua (CPU i runga ake i te 25% i te mea kino rawa atu). Kei te takoto te kōnae puna golang konei.

Te whakarewa i te takai

Hei whakarewa i te takai, i hangaia he tauira ratonga ngawari mo systemd (konei). E kiia ana ko te takai ake ka whakahiato ki te konae rua (haere hanga tsduck-stat.go), kei roto /opt/tsduck-stat/. Ko te whakaaro ka whakamahia te golang me te tautoko karaka monotoni (>=1.9).

Hei hanga i tetahi tauira ratonga me whakahaere e koe te tono systemctl enable [email tiakina]:1234, ka rere me te systemctl timata [email tiakina]: 1234.

Te kitenga mai i a Zabbix

Na ka taea e zabbix te kite i nga ratonga whakahaere, kaihanga rarangi roopu (discovery.sh), i roto i te whakatakotoranga e hiahiatia ana mo te kitenga a Zabbix, e kiia ana kei te waahi kotahi - i /opt/tsduck-stat. Hei whakahaere kitenga ma te zabbix-agent, me taapiri koe .conf kōnae ki te whaiaronga me nga whirihoranga zabbix-agent hei taapiri i tetahi tawhā kaiwhakamahi.

Te tauira Zabbix

I hangaia te tauira (tsduck_stat_template.xml) kei roto te ture kitea-aunoa, te huānga, te kauwhata, me nga tauira keu.

He rarangi arowhai poto (mehemea ka whakatau tetahi ki te whakamahi)

  1. Me whakarite kia kaua e taka nga paakete ki raro i nga tikanga "tino pai" (ka hono tika te kaihanga me te kaitirotiro), mena he maturuturu, tirohia te tohu 2, te tuhinga ranei o te tuhinga mo tenei take.
  2. Hangaia te whakakorikori i te morahi o te puhera turanga (net.core.rmem_max=8388608).
  3. Whakahiato tsduck-stat.go (haere hanga tsduck-stat.go).
  4. Whakanohoia te tauira ratonga ki /lib/systemd/system.
  5. Tīmatahia nga ratonga ma te whakamahi i te systemctl, tirohia kua timata te puta mai o nga porotiti (grep "" /dev/shm/tsduck-stat/*). Te maha o nga ratonga ma te maha o nga rerenga rerenga maha. I konei ka hiahia koe ki te hanga ara ki te roopu multicast, ka monohia pea te rp_filter, te hanga ara ranei ki te puna ip.
  6. Whakahaerehia te discovery.sh, kia mohio kei te whakaputa json.
  7. Whakanohoia te whirihora kaihoko zabbix, whakaara ano i te kaihoko zabbix.
  8. Tukuna te tauira ki te zabbix, tono ki te kaihautu e whakahaerea ana te aro turuki me te whakauru i te zabbix-agent, tatari mo te 5 meneti, tirohia kua puta mai nga waahanga raraunga hou, kauwhata me nga keu.

hua

Te whakamahi i te TSDuck ki te aroturuki i nga rerenga IP(TS).

Mo te mahi ki te tautuhi i te ngaronga o te paatete, he tata tonu, he pai ake i te kore aroturuki.

Ko te tikanga, ko te "ngaro" CC ka puta i te wa e hono ana nga kongakonga ataata (i taku mohio, koinei te ahua o nga whakaurunga ki nga pokapu pouaka whakaata a-rohe i roto i te Russian Federation, ara, me te kore e tatau i te kaute CC), me mahara tenei. I roto i nga otinga whai mana, ka kopikopikohia tenei raru ma te kimi i nga tohu SCTE-35 (mehemea ka taapirihia e te kaihanga awa).

Mai i te tirohanga o te aro turuki i te kounga o te waka, kaore e ranea te tirotiro jitter (IAT), na te mea Ko nga taputapu pouaka whakaata (ahakoa ko nga kaitahuri, ko nga taputapu mutunga ranei) he whakaritenga mo tenei tawhā, a kaore e taea te pupuhi i te jitbuffer i nga wa katoa. A ka taea te rewa i te wa e whakamahi ana te whakawhiti i nga taputapu me nga papaa nui me te QoS kaore i te whirihorahia, kaore ranei i te pai te whirihora ki te tuku i nga waka i te waa tuuturu.

Source: will.com

Tāpiri i te kōrero