Getaktete Verbindung/Metered Network

Als ich nach vielen Monaten COVID19- Reisepause mal wieder Bahn gefahren bin, habe ich dort natürlich auch wieder das WiFi genutzt. Da es die erste Verbindung auf diesem Gerät war, hat mich die Meldung von Windows und OneDrive etwas überrascht, dass es sich um eine "getaktete Verbindung" handelt. Ich kannte diesen Status schon von meiner UMTS/LTE-Karte im Notebook aber wie funktioniert das mit WLAN?

Was heißt "getaktet"?

Nicht jede Netzwerkverbindung ist "unlimited" oder "flat". Gerade im Mobilfunkbereich gibt es Volumenpakete, nach deren Überschreitung der Provider die Bandbreite drosselt oder der Verkehr teuer wird. Daher sollte ihr Endgerät erkennen oder entsprechend konfiguriert sein, dass es sparsam mit der Datenmenge umgeht. Dazu gehören zwei Parteien:

  • Erkennen einer "getakteten Verbindung"
    Das Betriebssystem bzw. die Applikation muss irgendwie erkennen, dass die Verbindung nach Volumen abgerechnet wird.
  • Rücksichtsvolle Anwendung
    Die Applikationen müssen mit dem Wissen ihr Verhalten anpassen, z.B. für Windows könnte das bedeuten, dass Outlook nicht mehr permanent Online ist sondern dem Anwender es überlässt zu "synchronisieren". Auch OneDrive kann bevorzugt den Cache nutzen und synchronisierte Änderungen erst mit einer Verzögerung.

Es kann ja durchaus sein, dass die momentane Verbindung nur kurze Zeit genutzt wird und in absehbarer Zeit wieder eine "unlimitierte" Verbindung zur Verfügung steht.

Kompatible Anwendungen

Es bleibt jedem Entwickler überlassen, ob er seine Anwendung auf einen "Network Change" reagiert, den Status überprüft und sich dann anders verhaltet. Aber drei Applikationen kenne ich:

  • Outlook
    Microsoft Outlook erkennt den Status "Metered" und fragt den Anwender, ob er die Übertragung solange pausieren soll. Per Default überträgt Outlook dann keine Mails, ehe Sie drücken als Anwender ein "Jetzt Synchronisieren" (F9-Taste)
  • OneDrive
    Der OneDrive-Client stellt auch die Synchronisierung ein, während Windows eine "Metered Connection" erkennt.
  • Windows Update
    Über eine UMTS-Karte sollte Windows nicht gerade die großen Updates herunterladen und vor allem nicht mit anderen PCs teilen. Auch dies ist die Standardeinstellung
  • Windows VPN
  • Windows Karten
  • Browser (navigator.connection.metered )
    Auch Browser bieten über JavaScript eine Schnittstelle an, damit eine "Modern App" sich angepasst verhalten kann.

"Getaktet" einstellen

Wenn Sie eine LTE-Karte in ihrem Notebook haben, dann ist dies nicht nur eine weitere Netzwerkkarte, sondern die Netzwerkkarte kann auch die Information mitliefern, dass die Verbindung nach Volumen abgerechnet wird. Windows erkennt alleine, dass es sich dabei um "Mobilfunk" handelt und bietet entsprechende erweiterte Funktionen an, z.B. ob Roaming genutzt werden soll oder bei schlechtem WLAN sogar die mobile Datenverbindung einspringen soll:

Das funktioniert aber nur, wenn die LTE-Karte direkt von Windows angesteuert wird. Wenn Sie nun aber einen Router per Ethernet oder WLAN nutzen, der seinerseits doch wieder per LTE-Stick im Internet ist, dann kann Windows das anhand der Netzwerkverbindung nicht direkt erkennen. Dann können Sie aber manuell z.B. in den Eigenschaften des WLAN die Funktion "getaktete Verbindung" aktivieren:

Das funktioniert auch auf LAN-Verbindungen, wie die am Beispiel "FC Dock" sehen. Das ist meine Docking-Unit im Büro mit bidirektionaler Gigabit-Anbindung. Das ganze geht natürlich auch per Skript, Regedit und damit indirekt auch per Gruppenrichtlinien. Ein eleganter Weg für WLANs ist NETSH.

netsh wlan set profileparameter name=<WLAN-Profilname> cost=fixed

Die Einstellung kann manuell bestimmt werden aber LTE-Karten setzen den Mode normalerweise alleine "richtig"

Default Einstellungen

Neben der Einstellung pro Netzwerkkarte gibt es in Windows auch eine Standardeinstellung zu den Kosten einer Verbindung:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\DefaultMediaCost

Die Standardeinstellungen von Windows 10 sind:

Sie sehen gut, dass Ethernet und WIFI hier auf 1 (unmetered) stehen aber 3G und 4G auf 2 (Metered) steht.

Als Client erkennen

Damit meine eigene Software wie Outlook, OneDrive oder auch Rimscout (https://www.rimscout.com) den Status erkennen kann, muss es eine Schnittstelle geben, um den Status anzufragen. Man muss gar nicht lange suchen, um die verschiedenen Optionen zu finden. Per PowerShell 2-5 geht es über folgenden Code recht einfach.

Weitere Informationen zu Rimscout finden Sie hier https://www.rimscout.com

Der Code funktioniert nicht in der neuen PowerShell Code (PWSH.EXE), die ja keine Windows Module einbinden kann.

# Quelle https://gist.GitHub.com/nijave/d657fb4cdb518286942f6c2dd933b472

[void][Windows.Networking.Connectivity.NetworkInformation, Windows, ContentType = WindowsRuntime]
$cost = [Windows.Networking.Connectivity.NetworkInformation]::GetInternetConnectionProfile().GetConnectionCost()
    $cost.ApproachingDataLimit `
-or $cost.OverDataLimit `
-or $cost.Roaming `
-or $cost.BackgroundDataUsageRestricted `
-or ($cost.NetworkCostType -ne "Unrestricted")

Ein zweites Beispiel ist bei OpenWRT veröffentlicht, welche aber nur minimal abweicht:

# Quelle https://openwrt.org/docs/guide-user/network/wifi/ms-meteredconnection 

[void][Windows.Networking.Connectivity.NetworkInformation, Windows, ContentType = WindowsRuntime]
[Windows.Networking.Connectivity.NetworkInformation]::GetInternetConnectionProfile().GetConnectionCost() | FL

Eine zweite schnelle Option ist die Ausgabe per NetSH mit dem Namen des Hotspots und dem Blick auf den letzten Abschnitt der Kosten. Hier am Beispiel zweier öffentlicher Netzwerke in Zügen. (Ausgabe gekürzt)

C:\>netsh wlan show profile name="RRX Hotspot"

Das Profil "RRX Hotspot" auf Schnittstelle T480s-WLAN:
=======================================================================

Kosteneinstellungen
-------------------
    Kosten                  : Uneingeschränkt
    Überlastet              : Nein
    Datenlimit bald erreicht: Nein
    Über Datenlimit         : Nein
    Roaming                 : Nein
    Kostenquelle            : Standard

Dazu noch die Einstellung beim ICE

C:\>netsh wlan show profile name="wifionice"

Das Profil "WIFIonICE" auf Schnittstelle T480s-WLAN:
=======================================================================

Kosteneinstellungen
-------------------
    Kosten                  : Fest
    Überlastet              : Nein
    Datenlimit bald erreicht: Nein
    Über Datenlimit         : Nein
    Roaming                 : Nein
    Kostenquelle            : Benutzer

Interessant ist hier der Eintrag hinter "Kosten", für den ich drei Einstellungen bislang gefunden haben.

Fest                limitierte Datenübertragung
Variabel            limitierte Datenübertragung
Uneingeschränkt     Keine Limits

"Fest" und "Variabel" bewirken die Kennzeichnung als getaktet, während "Uneingeschränkt" keine Limits anwendet.

LACP und metered connection

Bei einem Kunden habe ich einen physikalischen Server neu gestartet aber konnte mich danach nicht per per RDP anmelden. Aber auch auf einen PING hat der Server nicht mehr reagiert und am Ende habe ich mich auf dem Server direkt (ILO-Board/Konsole) angemeldet. Aber Just in dem Moment der Anmeldung auf der Konsole hat der Server auch wieder auf einen PING reagiert und RDP war auch möglich. Nach einiger Suche ist auafgefallen, dass das Netzwerk als "Metered" geführt wird:

Der Server wurde mit zwei Netzwerkkarten und einem LACP-Teams angebunden. Die individuelle Netzwerkkarten aber sind korrekt konfiguriert.

Bislang habe ich noch nicht die Ursache dafür gefunden

Network Cost Transfer Protocol

Nun kann man natürlich nicht jedem Anwender zumuten, dass er bei der Nutzung von Mobilfunk über einen WLAN-Router oder HotSpot in Windows die getaktete Verbindung manuell aktiviert. Wenn Sie mit ihrem Windows Notebook z.B. den WLAN-Hotspot im ICE der DB nutzen, dann bekommen Sie trotz WLAN die Information, dass es sich um eine "getaktete Verbindung" handelt.

Bislang konnte ich noch nicht im ICE mit meinem Endgerät und passendem WLAN-Device (Stichwort Promiscuous mode) die WLAN Beacons mitschneiden.

REM Anzeige der Fähigkeiten der WLAN-Schnittstelle
netsh wlan show wirelesscapabilities

Die weder die Bahn noch der WiFi-Access-Point direkten Zugriff auf meinem Client hat, kann die Information nur als WLAN-Zusatzelement oder über eine DHCP-Option an meinen Client gekommen sein. Man muss nicht lange suchen, um die Quellen direkt bei Microsoft zu finden. WLAN erlaubt die Definition eines "vendor-specific information Element (IE)", um zusätzliche Informationen zu übermitteln. Wenn der WLAN-AP diese Information sendet und der Client dies auswertet, kann der Anbieter die "getaktet"-Option dem Client mitteilen. Es handelt sich dabei um ein Element im "Beacon"-Frame.


Quelle: https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/MS-NCT/%5bMS-NCT%5d.pdf Seite 7

[MS-NCT]: Network Cost Transfer Protocol
https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/MS-NCT/%5bMS-NCT%5d.pdf

Auch Details zu den "Cost Flags" und "Cost Level" hat Microsoft publiziert.

Wenn ich per WLAN den kompatiblen Clients die Information mitgeben will, dass die Verbindung "getaktet" ist, dann muss ich ein "Vendor Specific" Network Cost Information Element im WLAN Beacon senden. In meinem Beispiel wäre das dann einfach:

# Korrekte Definition!
0xDD           (Vendor-specific record)
0x08           (Record length : 8 bytes)
0x00 0x50 0xF2 (Vendor: Microsoft)
0x11           (OUI Type: Network Cost)
0x04 Cost Level: connection cost per byte, Linux NetworkManager Ver 1.31.5+ behandelt alle >1 als nicht fixed
0x00 Reserved
0x02 Cost Flag: Unknown (Portable Hotspot Default: Metered network; limit unknown or not yet reached; matches Windows default for mobile broadband connections.)
0x00 Reserved

Früher hatte Microsoft wohl anhand einer fehlerhaften Dokumentation die Reihenfolge getauscht:

# Falsche Definition
0xDD           (Vendor-specific record)
0x08           (Record length : 8 bytes)
0x00 0x50 0xF2 (Vendor: Microsoft)
0x11           (OUI Type: Network Cost)
0x00 Reserved
0x04 Cost Level: connection cost per byte
0x00 Reserved
0x02 Cost Flag: Unknown (Portable Hotspot Default: Metered network; limit unknown or not yet reached; matches Windows default for mobile broadband connections.)

Interessant ist hier natürlich auch das "Cost Flag", welches z.B. ein "Congested" melden könnte. Ich wüsste zwar nicht, dass Windows diese Information auswertet aber denkbar wäre schon eine Anzeige bei der Netzwerkkarte, dass es auf dem Übertragungsweg gerade einen Engpass gibt.

NCT und Controller

Damit stellt sich nun natürlich die Frage, welche LTE-Router per WLAN diese Information verteilen. Per "Kabel" angeschlossene Endgeräte bekommen zudem nichts mit.

WiFi Gerät/Software Beschreibung

OpenWRT

Anscheinend ist OpenWRT die erste Firmware, die eine entsprechende Konfiguration offen dokumentiert:

uci add_list wireless.radio0.hostapd_options='vendor_elements=DD080050F21102000200'
uci add_list wireless.radio1.hostapd_options='vendor_elements=DD080050F21102000200'
uci commit
reboot

?

?

Ich bin sicher, dass es weitere Produkte gibt, die das Setzen dieser Information erlauben und vermute, dass die Bahn vermutlich nicht auf OpenWRT setzt. Ich habe nur keine weiteren Informationen gefunden

Wenn Sie einen WLAN-AP betreiben und diese Option setzen können, dann kann ich gerne einen Link oder Beschreibung ergänzen.

Status bei der Bahn

Die Bahn hat eine andere Lösung gewählt, dass Sie über das Portal "https://iceportal.de" im Zug eine Statusanzeige samt Anleitung und Rückmeldung einblendet:

 

Sogar die unterschiedlichen Zustände werden auf PCs und Mobilgeräten erläutert:

Das kann ein einfaches WLAN-Beacon natürlich nicht leisten und muss es auch nicht pro Endgerät. Als Anwender können Sie ja einfach das Portal oder vielleicht eine App offen lassen, die diese Informationen regelmäßig abruft oder per Push bekommt.

Weitere Links