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 整理,两个例子也是照它改的。