Zum Inhalt springen

UDP und TCP ​

Rohes UDP und TCP haben keine eigene Ansicht. Sie sind das, was Sie für ein Gerät mit eigenem Text- oder Binärprotokoll verwenden — einen Projektor, einen Medienserver, einen Sensor — und kommen an mehreren Stellen vor:

Um…Verwenden Sie
ein Datagramm oder eine TCP-Nachricht als Schritt zu senden und auf die Antwort zu wartendie Schritte im Experiment
ein Datagramm zu behalten, um es erneut zu senden, oder ein mitgeschnittenes wiederzugebenein UDP-Signal
ein Datagramm aus einem Skript zu sendensignallab send udp
auf einmal an viele Hosts zu senden, an eine Broadcast-Adresse oder eine Multicast-Gruppedie Ansicht Broadcast
einen Server oder eine Leitung mit Verkehr zu belastenSturm
herauszufinden, welche TCP-Ports ein Host offen hatScanner
die Seite des Geräts zu spielenein Emulator für ein UDP- oder TCP-Gerät
das Netzwerk zwischen zwei Enden zu verschlechternein Störungs-Relais

OSC ist ein Format, das in UDP-Datagrammen übertragen wird; es hat seine eigene Seite: OSC.

Nutzdaten ​

Wo immer Sie rohe Nutzdaten schreiben, sind sie von einer von zwei Arten:

ArtWas gesendet wirdBeispiel
TextDie Zeichen als UTF-8, genau wie eingegeben: kein Abschluss, kein Zeilenende angehängt. Ein Zeilenprotokoll braucht sein Zeilenende im Text.PING
Hex-BytesByte für Byte, geschrieben als Paare von Hex-Ziffern. Leerzeichen, :, - und , zwischen den Paaren und ein 0x davor sind erlaubt.de ad be ef, DEADBEEF, 0xde,0xad

Ein Datagramm trägt höchstens 65.507 Bytes. Eine ungerade Anzahl Hex-Ziffern oder gar keine ist ein Fehler, bevor etwas gesendet wird.

INFO

UDP kennt keine Empfangsbestätigung. „Gesendet" heißt, dass das Datagramm diesen Computer verlassen hat, nicht, dass es jemand empfangen hat. Um zu wissen, dass ein Gerät Sie gehört hat, warten Sie auf seine Antwort.

Wohin es geht ​

Ein Ziel ist eine IP-Adresse und ein Port oder ein Hostname und ein Port: 192.0.2.20:9000, [2001:db8::20]:9000 (eine IPv6-Adresse steht in eckigen Klammern), projector.local:9000. Das gilt für das Ziel eines UDP-Schritts, ein OSC-Ziel, ein UDP-Signal, signallab send udp und signallab send osc, die Liste von Broadcast, das Ziel von Sturm und den Host des TCP-Schritts.

Ein Hostname wird bei jeder Verwendung nachgeschlagen. Hat er eine IPv4-Adresse, wird diese verwendet — so erreicht localhost einen Dienst, der auf 127.0.0.1 empfängt, wo die erste Adresse, die ein System für ihn auflistet, ::1 sein mag —, und ein Name, der nur IPv6-Adressen hat, wird über einen IPv6-Socket erreicht. Ein Name, der sich nicht auflösen lässt, scheitert mit Cannot resolve …; ein Ziel ohne Port oder das keiner der beiden Formen entspricht, mit … is not a valid address. Adressen, auf denen ein Dienst empfängt (die eines Monitors, eines Warteknotens, eines Emulators), sind immer IP:port.

In Experimenten ​

SchrittWas er tut
UDP-DatagrammSendet seine Nutzdaten als Text an Ziel Host:Port. Das Ziel ist IP:port oder host:port (oben), und mehrere durch Kommas getrennte Ziele erhalten jeweils das Datagramm. Mit auf eine Antwort warten sendet er von Antwort auf (IP:Port) und wartet dort im selben Schritt auf eine Antwort. Details
Auf UDP wartenEmpfängt auf Empfang auf (IP:Port) (IP:port) und wartet auf ein Datagramm, dessen Nutzdaten passen. Details
TCP-NachrichtVerbindet sich mit Host und Port, schreibt seine Nutzdaten als Text, empfängt 250 ms lang auf eine Antwort und schließt. Der Schritt sagt, wie viele Bytes zurückkamen, nicht, was sie waren. Details

Die UDP-Nutzdaten und das UDP-Ziel, der TCP-Host und die TCP-Nutzdaten sowie das Muster eines Warteknotens nehmen {{templates}}, sodass ein Datagramm die ID des Durchlaufs oder einen Wert tragen kann, den ein früherer Schritt extrahiert hat. Siehe Daten und Vorlagen.

Ein Datagramm auswählen ​

Auf UDP warten und die Antwort von UDP-Datagramm wählen ein Datagramm anhand seiner Nutzdaten aus:

NutzdatenNimmt ein Datagramm an, wenn
Beliebiges Datagrammimmer: das erste, das eintrifft
Enthält Textseine als Text gelesenen Nutzdaten das Muster enthalten
Passt auf Regexseine als Text gelesenen Nutzdaten auf den regulären Ausdruck passen
Enthält Bytes (Hex)seine Bytes die Bytes des in Hex geschriebenen Musters enthalten

Was gepasst hat, bleibt in der Variablen des Schritts (Antwortvariable, reply, wenn Sie sie nicht umbenennen): text, hex (die ersten 1024 Bytes), bytes (die Größe), from (IP:port des Absenders), ms (wie lange es dauerte) und match (der gefundene Text oder die Bytes oder die erste Gruppe eines regulären Ausdrucks).

Ein Warteknoten beginnt zu empfangen, wenn der Durchlauf startet, nicht wenn der Schritt erreicht wird, sodass eine sehr schnelle Antwort nicht verpasst wird. Er nimmt nur, was nach dem letzten Senden auf seinem Pfad eingetroffen ist.

Grenzen und Voreinstellungen ​

EinstellungStandardBereich
TCP-Schritt: Timeout (ms) (Verbinden, Schreiben und die Antwort zusammen)4000 ms1–120.000 ms
Timeout, ms eines Warteknotens oder einer Antwort2000 ms1–120.000 ms
UDP-Nutzdaten—höchstens 65.507 Bytes
Empfangsadresse—IP:port mit einem Port; Antwort auf (IP:Port) einer Antwort darf Port 0 verwenden (irgendein freier Port)

Im Inspektor erscheint das Datagramm eines UDP-Schritts mit der Quelle broadcast (oder experiment, wenn der Schritt auf eine Antwort wartet), und jedes an einem Port eines Warteknotens eintreffende Datagramm mit der Quelle experiment-wait. Ein TCP-Schritt erscheint als zwei tcp-Frames mit der Quelle experiment: die Nutzdaten, die er geschrieben hat, und, wenn eine kam, die Antwort, die er gelesen hat. Sein Eintrag in der Zeitleiste sagt, was er gesendet hat und wie groß die Antwort war.

Signale ​

Ein Signal UDP (roh) in der Bibliothek ist ein Ziel und Nutzdaten, als Text oder Hex-Bytes. Senden Sie es aus Signale oder mit Ctrl+K von jeder Ansicht aus. Sein Ziel darf ein Hostname sein.

Jedes Datagramm, das der Inspektor vollständig behalten hat, kann eines werden: Als Signal speichern legt ein Hex-UDP-Signal im Ordner Mitgeschnitten an, das genau diese Bytes erneut sendet — an das Ziel des Frames, wenn der Frame gesendet wurde, an die Adresse, die ihn empfangen hat, wenn er eingetroffen ist (auf diesem Computer, wenn das jede Adresse war). Ein TCP-Block kann das nicht: Er ist ein Stück eines Datenstroms. Siehe Signale und Inspektor.

Ein Text-UDP-Signal kann einem Experiment als Schritt UDP-Datagramm hinzugefügt werden; ein Hex-Signal nicht, weil der Schritt Text sendet.

Von der Kommandozeile ​

signallab send udp sendet ein Datagramm:

bash
signallab send udp 127.0.0.1:9000 --text "PING"
signallab send udp 127.0.0.1:9000 --hex "de ad be ef"
text
✔ sent 4 bytes → 127.0.0.1:9000

Geben Sie genau eines von --text und --hex an. Das Ziel ist IP:port oder host:port (oben). Es endet mit 0, wenn das Datagramm hinausging, mit 1, wenn das Senden fehlschlug, und mit 2, wenn das Ziel oder die Hex-Bytes ungültig sind. Ein send tcp gibt es nicht. Siehe Kommandozeile.

Sturm ​

Sturm ist eine Lastquelle für Ihre eigenen Server und Leitungen: UDP-Flut sendet Datagramme fester Größe mit einer festen Rate, TCP-Verbindungsflut öffnet eine Verbindung, schreibt die Nutzdaten und schließt, immer wieder. Der Durchsatz wird live gemessen. Siehe Sturm.

Scanner ​

Scanner versucht eine TCP-Verbindung zu jedem Port in einem Bereich und listet die auf, die annehmen, samt dem, was der Dienst zuerst sagt, wenn Sie Banner anfordern. Siehe Scanner.

DANGER

Sturm und Scanner senden echten Verkehr an echte Hosts. Richten Sie sie nur auf Systeme, die Ihnen gehören oder deren Test Ihnen erlaubt ist: Ein Sturm kann eine Leitung sättigen, und beide können eine Angriffserkennung auslösen.

Emulierte Geräte ​

In der Ansicht Emulatoren kann Signal Lab das Gerät sein:

  • ein UDP-Gerät beantwortet Datagramme nach Regeln zu ihren Nutzdaten — beliebig, einen Text enthaltend, auf einen regulären Ausdruck passend, Bytes enthaltend — mit einer Text- oder Hex-Antwort, aus dem Eingetroffenen gebaut, an den Absender oder an ein anderes IP:port, nach einer Verzögerung, wenn Sie eine festlegen;
  • ein TCP-Gerät nimmt Verbindungen an, teilt das Eintreffende an einem von Ihnen gewählten Zeilenende in Nachrichten (LF, CR LF, CR oder jeden Block, wie er kommt), beantwortet jede nach denselben Regeln, kann eine Begrüßung senden, wenn sich ein Client verbindet, und die Verbindung nach einer Antwort schließen.

Beide können auch als Schritt Emulator für die Dauer eines Durchlaufs laufen. Siehe Emulatoren.

Störung ​

Das Relais Störung sitzt zwischen einem Client und seinem Ziel und verschlechtert, was passiert: pro Datagramm über UDP (Verzögerung, Verlust, Duplikate, Umordnung, eine Bandbreitengrenze) oder pro Datenstrom über TCP (Verzögerung, eine Bandbreitengrenze, Verbindungen zurückgesetzt oder halboffen gelassen). Siehe Störung und, in einem Experiment, Störungen.

„Port unreachable" unter Windows ​

Wenn ein Datagramm einen Port erreicht, auf dem nichts empfängt, antwortet der empfangende Rechner üblicherweise mit einer ICMP-Nachricht „Port unreachable". Windows meldet diese Antwort beim nächsten Empfang des sendenden Sockets, als wäre die Verbindung zurückgesetzt worden — obwohl UDP keine Verbindung kennt.

Signal Lab rechnet damit. Seine Empfänger — der OSC-Monitor, der Erkennungsempfänger, die Warteknoten und Antworten von Experimenten, UDP- und OSC-Emulatoren, das Störungs-Relais — bemerken es und empfangen weiter. Ein Gerät, das verschwunden ist, hält sie nicht auf. Ein Empfänger, der wirklich nichts mehr empfangen kann, beendet seinen Job, und die Konsole sagt, warum.

Probleme ​

Was Sie sehenÜbliche Ursache
… is not a valid addressDas Ziel hat keinen Port oder ist weder IP:port noch host:port.
Cannot resolve …Der Hostname lässt sich auf diesem Computer nicht auflösen.
… refused the connection — nothing is listening on that port (TCP)Auf diesem Port empfängt nichts, oder eine Firewall weist ihn ab.
No answer from … in time (TCP)Der Host antwortet überhaupt nicht — falsche Adresse oder eine Firewall, die verwirft statt abzulehnen.
Ein Warteknoten läuft in ein Timeout, obwohl das Gerät antwortetDas Gerät antwortet an den Port, von dem das Datagramm kam, nicht an den Port des Warteknotens. Lassen Sie das Senden mit auf eine Antwort warten selbst auf die Antwort warten: Dann geht es von dem Port aus, an den die Antwort zurückkommt.
Datagramme von anderen Rechnern kommen nie anUnter Windows kann die Firewall sie abhalten: Lassen Sie Signal Lab zu, wenn die App es anbietet. Siehe Problemlösung.

Jede Fehlermeldung steht unter Fehlermeldungen.