NACK vs. ACK? Wann sollte man eins über das andere verwenden?
On Januar 1, 2021 by adminPersönlich habe ich nicht einmal das Gefühl, dass ACK erforderlich ist. Es ist schneller, wenn wir stattdessen nur NACK (n) für die verlorenen Pakete senden des Sendens einer ACK für jedes empfangene Paket. Wann / in welchen Situationen würde man ACK über NACK und umgekehrt verwenden?
Kommentare
- Können Sie uns etwas mehr Kontext für das geben, was Sie ' redest du? Fragen Sie allgemein oder nach TCP oder?
- Eine allgemeine Netzwerkfrage, die sich nicht auf TCP, UDP oder einen anderen spezifischen Bereich bezieht.
Antwort
Der Grund für die ACK ist, dass ein NACK einfach nicht ausreicht. Nehmen wir an, ich sende Ihnen einen Datenstrom von X Segmenten (der Einfachheit halber sagen wir 10).
Sie haben eine schlechte Verbindung und empfangen nur die Segmente 1, 2, 4 und 5. Ihr Computer sendet den NACK für Segment 3, merkt jedoch nicht, dass es Segmente 6-10 geben sollte, und nackt diese nicht.
Also sende ich Segment 3 erneut, aber dann glaubt mein Computer fälschlicherweise, dass es sich um Daten handelt
ACKs bieten eine gewisse Sicherheit, dass das Segment am Ziel angekommen ist.
Wenn die Anwendung die Reihenfolge der Daten und Neuübertragungen verarbeiten soll, können Sie einfach die Verwendung auswählen ein Protokoll wie UDP (zum Beispiel wie TFTP).
Kommentare
- Gute Antwort. Aber ' t Wir bezeichnen nur das erste Paket als spezielles Paket – es würde die Anzahl der Segmente enthalten, die es senden würde.
- Damit bleibt das Problem, dass der Absender nicht weiß, ob die Daten empfangen werden Keine Bestätigung im Prozess, wenn der Absender nicht '
Antwort
Alles läuft auf die Verlustwahrscheinlichkeitsverteilung und hinaus Verkehrsmuster.
Nehmen Sie zum Beispiel eine typische drahtlose Verbindung mit einer konstanten Verlustrate von 10 bis 30%. Wenn Sie jeden empfangenen Frame bestätigen (z. B. 802.11abg), erkennen Sie schnell, wann ein Frame verloren gegangen ist, sodass Sie keine Zeit verlieren, auf eine Zeitüberschreitung zu warten.
Wenn Sie stattdessen NAK verwenden, sind Sie es wird abhängig vom Verkehrsmuster: – Wenn Sie ein einzelnes Anforderungspaket senden und eine Antwort erwarten und diese Anforderung verloren geht, müssen Sie eine Zeitüberschreitung haben, die abläuft, wenn Sie keine Antwort erhalten. – Wenn Sie nur einen Paketstrom an einen meist stummen Empfänger senden, ist es akzeptabel, nur dann eine NAK zu erhalten, wenn der Empfänger das nächste Paket oder so empfängt. Dies bedeutet jedoch, dass der Empfänger Pakete neu anordnen muss und dass der Absender einen großen Rückstand an gesendeten Nachrichten verfolgen muss.
(raten Sie, welche Lösung 802.11n wählt? Beides. Der Empfänger sendet eine Variable -Längen-Bitmap der empfangenen Frames)
Nehmen Sie nun ein typisches Internet-Netzwerk: Sie haben fast 0% Paketverlust, bis etwas Schlimmes passiert, und Sie haben fast 100% Paketverlust für a Eine bestimmte Zeit nach einem exponentiellen Verteilungsgesetz, von einer Unterbrechung von 200 ms bis zu anderthalb Minuten.
Die Überprüfung jedes Pakets erscheint in einem verlustfreien Netzwerk sinnlos, bis Sie den Fall betrachten, in dem die Verbindung getrennt wird: Sie erhalten für einen möglicherweise längeren Zeitraum keine ACK oder NACK, und der Empfänger sendet normalerweise nichts, bis die Verbindung wiederhergestellt ist.
Wenn Sie ACK verwenden, hört der Absender auf zu senden und behält seinen Rückstand bei bis die Verbindung wiederhergestellt ist. Wenn Sie stattdessen NACK verwenden, teilt Ihnen der Empfänger möglicherweise mit, dass er das Paket, das aus dem Rückstand des Absenders gefallen ist, seit langer Zeit nicht mehr empfangen hat und die Verbindung im Wesentlichen nicht wiederherstellbar ist.
Antwort
ACKs sind in Schiebefensterprotokollen nützlich. Sie ermöglichen es Sender A, zu erkennen, dass gesendete Daten von Remote B empfangen wurden. Sender A kann dann mit dem nächsten Senden fortfahren Daten – bis das Sendefenster voll ist (mit Daten, die an die Fernbedienung gesendet, aber noch nicht bestätigt wurden).
ACKs können als wichtiger angesehen werden als NAKs. NAKs ermöglichen einfach eine schnellere Wiederherstellung . in dem Fall, in dem ein von A gesendetes Paket / Block von B nicht empfangen wird und B auf irgendeine Weise erkennt, dass ein Paket / Block fehlt.
Es ist durchaus möglich, ein Protokoll zu entwerfen, das eine zuverlässige Übertragung und Unterstützung unterstützt Flusskontrolle nur mit ACK, ohne NAK (mit erneuter Übertragung durch den Sender, falls der Sender nicht empfängt Wir haben einen ACK-Mechanismus für die erneute Übertragung, der auf jeden Fall benötigt wird.
Antwort
Eine wichtige Sache, die ich hinzufügen möchte Hier in TCP senden wir KEINE ACK für JEDES EMPFANGENE PAKET.
Die ACKs werden jedoch nur für das LETZTE EMPFANGENE PAKET gesendet.
Bitte korrigieren Sie mich, wenn ich falsch liege.
Kommentare
- Dies gilt bis zu einem gewissen Punkt.Beispielsweise benötigen Segmente, für die nur das ACK- oder RST-Flag gesetzt ist, kein ACK. Wenn verzögerte ACKs verwendet werden, ist möglicherweise nicht für jedes Segment eine ACK vorhanden. Dies erfordert jedoch im Allgemeinen, dass für jedes andere Segment eine ACK gesendet wird. Viele TCP-Verbindungen verwenden jedoch keine verzögerten ACKs und senden eine ACK für jedes Segment, das Daten enthält.
Schreibe einen Kommentar