#include 'std.incl'

<set-var  seitentitel="Maximal m&ouml;glicher Durchsatz bei ax.25">
<set-var    fachstand="12.Sep. 1999">
<set-var        motto="">
<set-var  mottoquelle="">




# Beliebig viele
<schlagwort "Packet Radio">
<schlagwort "ax.25">
<schlagwort "Baudrate">
<schlagwort "Bandbreite">
<schlagwort "Vortrag">
<schlagwort "Amateurfunk">
<schlagwort "Durchsatz">


#-- Nicht zu ändern:
<set-var cvs:revision="$Revision: 456 $" />
<set-var cvs:date="$Date: 2008-07-05 13:41:46 +0200 (Sa, 05 Jul 2008) $" />


<kopf>


(Optisch und rechtschreiberisch leicht &uuml;berarbeitete Version. Das 
<a href="eff_baud_org.html">Original</a>
ist weiterhin verf&uuml;gbar. Der Artikel erschien zuerst im 
<href url="http://www.adacom.org" name="ADACOM-Magazin">)

<hr>

Hin und wieder stellt sich die Frage, wie hoch der maximale Durchsatz an 
Nutzdaten bei einer gegebenen Brutto-&Uuml;bertragungsrate sein kann.
<p>
Wir betrachten dazu zun&auml;chst die Verh&auml;ltnisse in einer 9600-Bit/s
Verbindung auf einer freien und absolut st&ouml;rungsfreien Frequenz.
Beide Stationen sind gleich ausgestattet, ihre Knotenrechner sind
hinreichend schnell, so daß es auf Grund der Protokollbearbeitung
keine Verz&ouml;gerung gibt. <br>
Da sie alleine auf einer Frequenz sind, brauchen sie auf andere Stationen
keine R&uuml;cksicht zu nehmen und verwenden &quot;Kampfparameter&quot;.
<p>
In ax.25 werden die Daten &uuml;blicherweise in einer &quot;geschalteten Verbindung&quot; 
(virtual circuit) &uuml;bertragen. Das garantiert, daß die Daten komplett 
und in der richtigen Reihenfolge beim Empf&auml;nger ankommen. 
<p>
Die geschieht mit Hilfe von Infopaketen (I-Frames), die die eigentliche
Informationen transportieren sowie &Uuml;berwachungspaketen (Supervisory-Frames),
die f&uuml;r die Best&auml;tigung der Infopakete und ggf. deren Wiederholung sorgen.
<p>
Im Idealfall der st&ouml;rungsfreien &Uuml;bertragung k&ouml;nnen vom Sender bis zu 
7 Pakete mit einem Nutzinhalt von jeweils bis zu 256 Bytes an einem 
St&uuml;ck gesendet werden. Danach mu&szlig; der Empf&auml;nger den korrekten Erhalt
der 7 Pakete durch ein kurzes &Uuml;berwachungspaket (RR-Frame) best&auml;tigen. 
<p>
Das sieht dann in etwa so aus:
<pre>
 TX:  1.I-Paket   256 Byte Nutzdaten 
 TX:  2.I-Paket   256 Byte Nutzdaten 
 TX:  3.I-Paket   256 Byte Nutzdaten 
 TX:  4.I-Paket   256 Byte Nutzdaten 
 TX:  5.I-Paket   256 Byte Nutzdaten 
 TX:  6.I-Paket   256 Byte Nutzdaten 
 TX:  7.I-Paket   256 Byte Nutzdaten 
                                       RX:  RR-Paket f&uuml;r 1.-7. I-Paket
 TX:  8.I-Paket   256 Byte Nutzdaten 
 TX:  9.I-Paket   256 Byte Nutzdaten 
 ...(usw.)
 </pre>

In einem Sendedurchgang k&ouml;nnen also  7 * 256 = 1792 Byte Nutzinhalt
transportiert werden. Bei 8 Bit pro Byte sind dies 14336 Bit Nutzinhalt. 
Dieser Sendevorgang &quot;kostet&quot; insgesamt 8 Pakete sowie Ein- und Ausschalten
des HF-Sender von Sender und Empf&auml;nger.
<p>
Jedes ax.25-Paket enth&auml;lt Kopfinformationen (Header), welches das Zielcall 
(Adresse) des Pakets, seinen Absender sowie evtl. bis zu 
8 Zwischenstationen (Digis) enth&auml;lt.
<p>
Jedes Call ben&ouml;tigt 7 Byte. Sechs Byte sind f&uuml;r das eigentliche Call 
erforderlich, das 7.Byte enth&auml;lt die SSID sowie einige Steuerinformationen.
<p>
Ausserdem gibt es noch ein Kontrollbyte, das angibt welcher Pakettyp vorliegt
und welches I-Paket gesendet wird, bzw welches Paket best&auml;tigt wird.
<p>
I-Pakete verf&uuml;gen ausserdem noch &uuml;ber ein Byte PID (Protokoll IDentyfier). 
Es gibt die Art des Inhalts der I-Pakete an. Die h&auml;ufigsten PID-Werte sind
f0 (hex) falls kein besonderes Protokoll vorliegt sowie cc (hex) f&uuml;r TCP/IP.
Das PID-Byte z&auml;hlt nicht als Nutzdatum.
<p>
Wir haben also 8 Pakete. Jedes Paket hat also einen Header mit einer 
L&auml;nge zwischen 
<pre>
      2*7=14  (Absender Call und Ziel Call)
           1  Kontrollfeld  
     --------      
          15 Byte
</pre>
und       
<pre> 
  (2+8)*7=70  (Absender Call und Ziel Call, sowie 8 Zwischenstationen)
           1  Kontrollfeld  
  -----------      
          71 Byte
</pre>  
Wir begn&uuml;gen uns mit dem k&uuml;rzeren Adresse als Beispiel.
I-Pakete haben noch ein Byte mit der PID zus&auml;tzlich, so daß wir auf
insgesamt
<pre>
  8 Paket * 15 Byte (Header) + 7 * 1 (Byte PID) = 127 Byte = 1016 Bit
                                                             ======== 
</pre>							     
ax.25-Header f&uuml;r unsere 14336 Bit Nutzdaten kommen.
<p>
Allerdings sind wir damit noch lange nicht auf dem Sender. Denn es fehlen
noch
<ul>
 <li>die Pr&uuml;fsumme 
 <li>Wiederaufsetzungsm&ouml;glichkeit bzw. Erkennung von Paketanfang/ende 
</ul> 
F&uuml;r beides sorgt das HDLC-Format (High Level synchronous Data 
Link Communication, manchmal auch als SDLC bezeichnet).
<p>
Dazu wird jedes ax.25-Paket in einen HDLC-Rahmen (Frame) verpackt.
An das Ende des ax.25 Paket wird eine 2-Byte Pr&uuml;fsumme angeh&auml;ngt.
Dahinter und auch vor das erste ax.25 Bit wird ein bestimmtes Bitmuster 
(Flag) von 8 Bit L&auml;nge gesetzt (01111110). Es wird nun daf&uuml;r gesorgt, da&szlig; 
zwischen diesen beiden Flags - also in den Daten selber - kein weiteres 
Flag mehr auftauchen kann. <br>
Sind dort irgendwo f&uuml;nf &quot;Einsen&quot; hintereinander vorhanden, so mu&szlig; nach der 
5. &quot;Eins&quot; eine &quot;Null&quot; eingef&uuml;gt werden. Dies nennt man Bit-Stuffing (F&uuml;llung).
<p>
Die Anzahl der einzuf&uuml;llenden Bits ist von dem Typ der Daten abh&auml;ngig.
Experimente ergaben, daß mit etwa 0,1 % (Textdateien) bis 1,5% (komprimierte
Dateien) Stopfbits zu rechnen ist. Die theoretische Obergrenze liegt bei 20%,
wenn n&auml;mlich der gesamte Inhalt aus &quot;Einsen&quot; besteht. Die Experimente 
bezogen sich allerdings nur auf die Nutzdaten, und nicht auf die ax.25-Header. 
Aufgrund der Adresscodierung kann man davon ausgehen, daß in ax.25-Headern 
auf 56 Bits maximal 1 Bit gestufft wird. Das w&auml;ren immer 
noch unter 2%.
<p>
Sind mehrere Rahmen direkt hintereinander, so kann das Ende des ersten 
Rahmens gleichzeitig als Anfang des zweiten Rahmens dienen. Dies wird
offenbar nicht h&auml;ufig ausgenutzt, ist aber zul&auml;ssig.
<p>
Wir haben also 14336 Bit Nutzdaten + 1016 Bit ax.25-Header. Hinzukommen
f&uuml;r die 8 Pakete jeweils 16 Bit Pr&uuml;fsummen. Die sind 
 14336+1016+8*16 = 15480 Bit
<p> 
Diese Daten werden gestopft. Dies ergibt
<pre>
 15480 * 1,5 % = 232 Bit
</pre> 
Stopfbits.
<p> 
Jetzt kommen noch die Blockbegrenzer. Diese sind f&uuml;r diese 8 Pakete 
insgesamt 10 Begrenzer je 8 Bit = 80 Bit.
<p>
Bislang haben wir also 15480 + 232 + 80 = 15792 Bit mit denen die 14336 Bit
Nutzdaten &uuml;bertragen werden. Das sind 9,2 % Overhead. Das w&auml;ren 8714 Bit/s 
bei einem &uuml;blichen 9600 Bit/s Einstieg.
<p>
Aber noch sind wir nicht auf dem Sender.
<p>
Bevor wir auf den Sender d&uuml;rfen, m&uuml;ssen wir abwarten bis die Frequenz frei 
ist (wir gehen von einem Simplex, Nicht-DAMA Einstieg aus).
<p>
Dies bestimmen die Parameter Persistance und Slottime bzw. DWait. F&uuml;r die 
einfachere Rechnung verwenden wir hier nur den Wert DWait. Fred, DC6IQ 
zeigte in [1] wie man zwischen diesen Parametern umrechnen kann.
<p>
Ist die Frequenz frei, so kann man den Sender einschalten. Bevor aber der
erste HDLC-Rahmen gesendet werden kann, muß der Sender erst bereit sein. 
Diese Latenzzeit mu&szlig; man abwarten. Wir nennen sie *TXDelay*.
<p>
Nach dem Senden des letzten HDLC-Rahmen gibt es analog zu TXDelay meistens
noch ein Sender-Abklingzeit. Wir nennen sie *TXTail*.
<p>
Diese Zeit  DWait+TXDelay+TXTail  geht zweimal - n&auml;mlich jeweils f&uuml;r die 
Sendung von Sender und Best&auml;tigung des Empf&auml;ngers von der nutzbaren Zeit ab. 
Da wir einen maximalen Durchsatz erreichen wollen, stellen wir dazu 
&quot;Kampfparameter&quot; ein:
<pre>
   DWait    10 ms
 TxDelay    40 ms
  TxTail    10 ms
 ----------------
            60 ms
</pre>  
Wir dr&uuml;cken sie sinnvollerweise in Anzahl nicht nutzbarer Bits aus:
<pre>
  9600 bit
       ---  * 0,06 s = 576 Bit.
        s
</pre>        
Diese Verz&ouml;gerung tritt zweimal auf.
<pre>
  15792 + 2 * 576 = 16944 Bit 
</pre>  
mit denen die 14336 Bit Nutzdaten &uuml;bertragen werden. 
<p>
Jetzt sind wir endlich auf dem Sender und k&ouml;nnen bilanzieren:
<pre>
   16944 Bit Brutto
 - 14336 Bit Netto
  -----------------
    2608 Bit 
</pre>
oder 18,2 % Overhead oder 81,8% effektiv. Dies sind bei 9600 Bit/s 
<pre>
    7854 Bit/s effektiv
</pre>    
Verwendet man vern&uuml;nftige Parameter, z.B. DWAIT 400 ms gibt es direkt
0,390 s * 9600 bit/s = 3744 Pseudobit dazu, was dann zu einem Overhead von
insgesamt 44,3 % f&uuml;hrt, entsprechend 5346 Bit/s eff. Datenrate. Aber man 
l&auml;sst dann auch im echten Betrieb noch andere HAMs ran.


    
<h3>Allgemeine Formel</h3>
    
Wir wandeln nun die gemachten Aussagen in eine allgemeine Formel um:
<pre>
      o = max. Anzahl unbest. I-Pakete (1 bis 7, typisch 7)
    mpl = max. Nutzl&auml;nge eines I-Pakets (1 bis 256, typisch 256)
 nDigis = Anzahl der Digis in der Adresse (0 bis 8, typisch 0..2)
    bpc = Bytes pro Call im ax.25-Header (6 Byte Rufzeichen + 1 Byte SSID = 7)
     sr = Stuffingrate. Abh&auml;ngig vom Dateiinhalt (0 bis 0,2 , typisch 0,01)
  DWait = in s
 TxTail = in s
TxDelay = in s
     Bd = Datenrate brutto der &Uuml;bertragungsstrecke in Bit/s
</pre>
Anzahl der Nutzdaten Bits:  
<pre>
 AND = 8 * o * (mpl+1)
</pre> 
Anzahl ax.25-Header-Bits
<pre>
 A25H = 8 * (o+1) * ( (2+nDigis)*bpc + 1 )
                                       ^ Kontrollfeld
</pre>                                 
Anzahl HDLC Bits                                     
<pre>
 AHDLC = ( AND+A25H + 2*(o+1) ) * (1+sr) +    8 * (o+1+2) 
                       CRC       Stuffbits  Blockbegrenzer
</pre>                       
Anzahl der &quot;Pseudobits&quot; wg. Latenzzeiten
<pre>
 APB = 2 * (Dwait+TxDelay+TxTail) * Bd
</pre>  

Gesamtformel also: 
<pre>
                    AND
  effBaudrate = ----------- * Bd
                APB + AHDLC 
</pre>
                
                                
<h3>Welche Verbesserungen sind m&ouml;glich?</h3>

<ol>
<li>Anzahl der Nutzdatenbits (AND) erh&ouml;hen.                
  <ul>
   <li>Auf den ersten Blick scheint die Erh&ouml;hung der max. 
     Nutzl&auml;nge eines 
     I-Pakets die einfachste M&ouml;glichkeit zu sein. Der Parameter
     mpl taucht schliesslich nur einmal in der Formal - und zwar oberhalb des
     Bruchstrichs - auf.<br>
     Allerdings steigt dadurch die Wahrscheinlichkeit stark, daß ein Infopaket durch
     eine St&ouml;rung unbrauchbar wird . Dabei werden 
     direkt mehr Nutzdaten unbrauchbar, die Effizienz sinkt also im realen
     Betrieb.<p>
   
   <li>Erh&ouml;hung der maxinalen Anzahl von unbestätigten I-Paketen ist 
     da g&uuml;nstiger. <a href="http://pe1chl.xs4all.nl/">pe1chhl</a> 
     hat einen entsprechenden Vorschlag gemacht und implementiert.
     Dabei ist Maxframe auf 63 einstellbar. Rob berichtet von guten 
     Ergebnissen.<p>
   </ul>
   
<li>Verringerung der Header-Gr&ouml;sse (A25H)
  <ul>
    <li>Flexnet-Kompress<br>
     Das FlexNet-Header-Komprierung verringert die Gr&ouml;sse eines 
     ax.25-Headers auf konstante 3 Byte. Dadurch lassen sich - grade bei
     den Flexnet-typischen l&auml;ngeren Adressen - erhebliche Headerverk&uuml;rzungen 
     beobachten.<p>
  </ul> 
  
<li>Verringerung der Latenzzeiten (APB)                
  <ul>
  <li>Optimieren der Stationen<br>
     Durch verwenden von f&uuml;r die Betriebsart geeignete Ger&auml;te kann TxDelay 
     minimiert werden. Bei ungeeigneten Ger&auml;ten ist das TxDelay teilweise 
     l&auml;nger als die Aussendung selber.<p>
     
   <li>DAMA<br>
     DAMA minimiert im Idealfall DWait auf 0. Txdelay und TxTail bleiben
     aber wie gehabt. 
     Da im obigen Beispiel DWait auf Kampfparameterart auch auf 0 stand,
     ist scheinbar kein Vorteil erkennbar. Mit DAMA k&ouml;nnen aber mehrere
     Stationen sehr gut auf den Digi zugreifen.<p>

   <li>Vollduplex<br>
     Bei Vollduplex f&auml;llt Dwait sofort weg. Bei dauerstrichfesten Sendern
     (und g&uuml;nstigen Strompreisen :) ) kann man den Sender dauergetastet 
     lassen, so da&szlig; auch txdelay und txtail wegfallen.<p>
     
   <li>Optima<br>
     Optima soll die Vorteile von Duplexbetrieb erbringen, ohne deren 
     Nachteile.<p>
     
   </ul>
</ol>        

Bei hohen Datenraten stellen die Umschaltvorg&auml;nge zwischen Senden und 
Empfangen die gr&ouml;sste Bremse dar. Man muß daher versuchen die Anzahl
der Umschaltungen verringern (Maxframe erh&ouml;hen) oder auf solche 
Umschaltungen seitens des Senders verzichten (Duplex, Optima).


<hr>

[1] Fred Baumgarten, DC6IQ, &quot;Parametrieung von FlexNet-Digipeatern&quot;, 
    Adacom Magazin, 3/92
   





<fuss>
