q 构造

包进了 APRS-IS,末尾会多出一小段 q 开头的标记。谁写上去的、什么意思,逐个讲。

什么是 q 构造

包在互联网上转一圈,末尾会多出一小段 ,qXX,呼号。那是服务器替它记的账:从哪个口进来、由谁送进来。

APRS-IS 加这一套东西,为的是几件事。认出包是从哪台服务器或者网关进的网,给将来的授权算法留个位置,发现环并且自动把环挡掉。老的客户端和网关不用改任何东西,服务器那边自己认这套记号。

要分清两类。一种由服务器自己写上去,记录包怎么到它手里;另一种由客户端或者网关写上去,说明包是从空中转上来的。同一个记号在两边都可能出现,含义不太一样,下面分开列。

服务器写上去的

包到了服务器手里,服务器在后面补一段,说明它从哪儿来。这一段里的呼号,写的是服务器自己。

qAC
登录验证过,走双向端口。包是这个客户端直接从那条验证过的连接上发上来的,发信呼号等于登录呼号。后面那个呼号是服务器的呼号与 SSID。它跟包头里那段 TCPIP* 各记各的,两个都会在。
qAX
登录没验证过,其余和 qAC 一样。这个构造跟 TCPXX 一起在 APRS-IS 上淘汰了。
qAU
客户端直接用 UDP 把包送上来。后面那个呼号是服务器的呼号与 SSID。
qAo
用的是字母 O。包从 client-only 端口进来,发信呼号不等于登录呼号,包里带着 ,I 或者 qAR 构造,而那个网关正好就是这次登录的呼号,说明这是个转发包。
qAO
也是字母 O,分两种。一种是从 client-only 端口进来的包,发信呼号不等于登录呼号,包里既没有 ,I 也没有 qAR 和 qAo,所以不算转发包。另一种是从只发端口进来的,发信呼号正好等于登录呼号。
qAS
包来自另一台服务器,或者干脆就是这台服务器自己生成的。服务器自己发信标这件事,官方明确不鼓励。后面那个呼号是它能认出来的第一台服务器的登录名或者 IP 地址。
qAr
用 ,I 构造的转发包,来自远处的网关,中间还过了别的服务器。后面那个呼号是网关的呼号与 SSID。
qAR
同样是用 ,I 构造的转发包,但这台网关是直接连上来、登录验证过的。后面那个呼号是网关的呼号与 SSID。

网关写上去的

网关把空中的包放上互联网时,自己在末尾补一段,说明这台网关是谁。

qAR
网关从空中收上来、放上 APRS-IS 的包。后面那个呼号是网关自己的呼号与 SSID。
qAO
网关从空中收上来、但它不会往空中发消息的包,字母 O。只收不发的网关,送上互联网的每个包都用这个构造。双向网关也能用它,标出自己不会发消息过去的台站:落在设定范围外的,或者根本不是 APRS 设备、要靠网关翻译的。D-STAR 台站发的 GPS 字符串经 D-PRS 转成 APRS,就是后面这种。
qAZ
服务器、客户端或者网关自己生成的命令包,不该再被转出去。一般用在连上之后的会话消息上,比如给 USERLIST 发的那条。
qAI
跟踪包。它是在告诉沿路的每台服务器:把你的登录信息也加进包里。qAI 后面第一个呼号,是最初发这个包的台站。

这几个标记是客户端写上去的,将来有了新的授权算法,会一并纳入验证。还有一句忠告:只收不发的网关在标准 APRS 频率上不被鼓励,最好架双向网关,只把消息发回直接听得到的台站。

几条规矩

这套记号靠登录名认人,所以登录名不能重,也不能长得像 IP 地址。

  • 登录名不能重 任何一台往 APRS-IS 里塞数据的服务器、网关或者客户端,登录名都得跟别人不一样。假设一台服务器登录名是 AE5PL,同一个人的气象客户端也叫 AE5PL,服务器看到 ,qAC,AE5PL 就会当成环包。登录名可以是九位以内的字母数字组合,避开重名不难。
  • 八位十六进制不能当登录名 恰好八位、而且全是 0-9 或者 A-F 的登录名不许用,那个形状会被当成服务器生成的 IP 地址。
  • 网关写的那段会被服务器改写 习惯在包尾加 呼号,I 的网关,连的服务器支持 q 构造时,服务器会把这一段改写成 qAR 那一套,把这套能力用起来。
  • 跟踪要慎用 服务器可以开跟踪,让每个包都带上沿途的登录信息,查环的时候很有用。平时别开,包会明显变长,带宽也跟着涨。
  • 只在互联网上 q 构造只出现在 APRS-IS 里,别的场合都不要用,空中的一个都不该有。多加几个字节就多占一段带宽。

两个例子

同一个台站,从客户端直接上来和从空中被网关收上来,末尾补的东西不一样。

先看客户端从验证过的连接直接发上来的包,没带 q 构造。

  • 原来的包 AE5PL>APRS,TCPIP*:payload 客户端发上去的原样。
  • 服务器发出去,没开跟踪 AE5PL>APRS,TCPIP*,qAC,AE5PL-JS:payload 服务器补上自己:包是从 AE5PL-JS 这条验证过的连接进来的。
  • 开了跟踪 AE5PL>APRS,TCPIP*,qAI,AE5PL,AE5PL-JS:payload 换成 qAI,后面把最初发信的台站也带上。

再看同样的台站,这次是从空中被网关收上来的。

  • 原来的包 AE5PL>APRS,WIDE1*:payload 空中听到的样子,最后一跳是 WIDE1。
  • 送上互联网之后 AE5PL>APRS,WIDE1*,qAR,AE5PL-10:payload 网关 AE5PL-10 收的,它把自己补在末尾。
  • 开了跟踪 AE5PL>APRS,WIDE1*,qAI,AE5PL-10,AE5PL-JS:payload 再往后还经过服务器,服务器也留下了名字。

原文与相关

每个构造的说明按官方 q Construct 整理,两个例子也是照它改的。