2024年7月5日 星期五

SIP header Via

所有 SIP 訊息都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。

格式 sent-protocol sent-by[;branch=branch][;參數...]

  • sent-protocol 格式是「SIP/2.0/transport」,transport 可以是 UDPTCPTLSSCTP 等。
  • sent-by 格式是 host[:port],host 可以是主機的網域名稱或 IP 位址,可以加上 port。host 建議 FQDN。無 port 時,預設值在 UDP/TCP/SCTP 是 5060、TLS 是 5061。在 用來送回應。收到請求的 Via 中有 sent-by 且 branch 符合自己送的,
  • 參數 branch:
    • 意思是分支。在 RFC3261 以「z9hG4bK」開頭,是必要的。值對某個 UAC 而言是時空上唯一,用來快速識別 Transaction,但在 CANCEL 和 INVITE 失敗的 ACK 是沿用原始請求的 branch。
    • 在 RFC2543,forking proxy 插入 branch 用來區分不同分支,同一個 call 在不同 proxy 可能用相同的 branch 值,沒有唯一的特性,不適合作為 Transaction ID。某種程度上不會產生「z9hG4bK」開頭的值。
    • Proxy 也用來偵測 loop。
  • 參數 received: Server Transport 收到請求檢查頂頭 Via 的 sent-by,如果是網域主機名稱,或不同於封包的來源 IP 位址時,紀錄封包的來源位址,助於之後 server transport 送回應。
  • 參數 maddr:Client Transport 紀錄
  • 參數 ttl:Client Transport 紀錄
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds

比較:Contact

2024年6月14日 星期五

Linux System Load Average

Linux 的系統平均負載可在 uptimetop、cat /proc/loadavg、w(ho) 等看到,有三組數字,分別表示最近 1 分鐘、5 分鐘、和 15 分鐘的平均負載。

平均負載在 Linux kernel 紀錄在 avenrun[],每 5 秒更新一次,公式為

new = old * exp_n + active * (1 - exp_n)

採用定點表示,計算式變成

new = old * EXP_N + active * (FIXED_1 - EXP_N);
if (active >= old)
    new += FIXED_1 - 1;
new /= FIXED_1;

小數部份有 11 bits,相乘擴充為 22 bits,所以精確度為 10 bits 整數,加上 11 bits 小數。FIXED_1 為 1.0,是 (1<<11)。EXP_N 在 1 分鐘、5 分鐘、和 15 分鐘分別是

#define EXP_1   1884    /* 1/exp(5sec/1min) as fixed-point */
#define EXP_5   2014    /* 1/exp(5sec/5min) */
#define EXP_15  2037    /* 1/exp(5sec/15min) */

1/exp5/60 * FIXED_1 = 1884

包含 TASK_UNINTERRUPTIBLE?

參考

  1. Dr. Neil Gunther 的 UNIX Load Average Part 1: How It Works, Part 2: Not Your Average Average

https://hackmd.io/@RinHizakura/S1K4fQtaF

2024年6月2日 星期日

NVIS

NVIS (Near vertical incidence skywave)

同樣是 HF 頻率,DX 以低角度發射到電離層,反射到長距離外;而 NVIS 以接近垂直的角度射向電離層,再反射回周遭地帶,依天線效能、發射功率、電離層狀況,覆蓋範圍可達 400km。NVIS 為視距外 (泛指VHF,UHF),又未需長距離 DX 通訊內的近區通訊選擇。NVIS 的傳播特性接近直上直落,幾乎沒有阻礙關係,訊號衰減較傳統電波傳播少和比較穩定,適合小功率和電池操作的場合。NVIS 使用的是 F2 電離層,為此電波既要穿過 D layer,又不能讓之直飛太空,日夜以至不同季節,電離層狀況,太陽粒子周期等因素所用頻率皆不盡相同。一般只能使用1.8 – 7MHz。

https://www.vr2xkp.org/2023/07/30/天空之鏡-nvis-技術淺談/

Citizens band radio

Citizens band radio (市民頻段無線電、民用波段無線電台、CB無線電),在台灣CB頻率從26.965至27.405MHz之間,頻道間隔 10 kHz,共分40個波段頻道,第9頻道27.065MHz是緊急頻道,CB機的發射功率最高只能到5W。波長 11 米。使用手持機可通訊的視線距離約300至500公尺左右,使用基地天線收發大約通訊距離約1至5公里之間。27MHz 屬於 HF 頻帶,可經由電離層反射到遠方,電波一次的跳躍距離約500至800公里之間。

參考:https://www.radio.club.tw/forum.php?mod=viewthread&tid=9642

2024年4月13日 星期六

dn_expand()

擴展網域名稱 (dn, doamin name)。DNS 詢問或回覆訊息中的網域名稱,並沒有「.」,每個「.」隔開的 label 改為前面加 1-byte 欄位放 label 的長度。另外,先前出現的最長字尾,可以用訊息 offset 表示,來減少封包長度。dn_expand() 將其還原為原本完整的樣子。

int dn_expand( // 回傳處理的壓縮 dn 長度,錯誤回 -1
    const unsigned char *msg, // 訊息開始
    const unsigned char *eomorig, // 訊息結束
    const unsigned char *comp_dn, // 壓縮的 dn
    char *exp_dn, // buffer 放擴展後的 dn
    int length); // buffer 大小

壓縮的 dn 每個 label 第 1 byte 的 MSB 2-bit 是

  • 00 表示沒有壓縮,剩下 6-bit 是後續資料的長度,依照常長度將後續資料複製到 buffer,特殊字元前加 '\'、不可印的字元轉成 \ddd。
  • 11 表示有壓縮,剩下 6-bit 和下個 byte 合起來是訊息的 offset,檢查是否在範圍內,跳到 offset 繼續處理。
  • 其它為錯誤。

參考

  1. RFC 1035 4.1.4

2024年4月12日 星期五

LoRa Devices

Semtech SX1262 LoRa transceiver 比 SX1276 新,效能較好。基於 nRF52 比基於 ESP32 省電,但較貴。

  • SX1261, SX1262 and SX1268 sub-GHz radio transceivers,。
  • compliance with radio regulations ETSI EN 300 220, FCC CFR 47 Part 15, China regulatory requirements and the Japanese ARIB T-108. 頻率涵蓋150MHz ~ 960MHz 支援全世界主要 sub-GHz ISM bands。
  • FSK, GFSK, MSK, GMSK, LoRa and Long Range FHSS modulations。LoRa 最快 62.5kbps LoRa,FSK 最快 300kbps。
  • 170dB maximum link budget (SX1262 / 68)
  • +22dBm (SX1262/SX1268) 或 +15dBm (SX1261) high efficiency PA [傳送能力]
  • Low RX current of 4.6mA (???4.2 mA of active receive current consumption)
  • High sensitivity: down to -148dBm
  • 88dB blocking immunity at 1MHz offset
  • Co-channel rejection of 19dB in LoRa mode
  • Automatic Channel Activity Detection (CAD) with ultra-fast AFC

LoRa Modulation Parameter:• Modulation BandWidth (BW_L)• Spreading Factor (SF)• Coding Rate (CR)• Low Data Rate Optimization (LDRO)

Spreading Factor (SF):spread spectrum LoRa® modulation 是用多個 chip 代表一個 bit 資料。symbol rate (Rs)。SF = (nominal Rs)/(chip rate) = the number of symbols sent per bit of information.

Rs = BW/2SF

SF 5 = 25 = 32 chips/symbol

svrhost

 svrhost

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...