So gibt das zwei allgemeine Problem an, dass es keine deterministische Weise gibt zu wissen, ob die andere Partei - mit der wir über einen unzuverlässigen Kanal kommunizieren - unsere Nachrichten empfangen hat. Dies ist ziemlich analog zum TCP-Handshake, wo wir eine syn
syn ack
senden und eine Verbindung herstellen. Steht das den beiden allgemeinen Problemstellungen nicht entgegen?Zwei allgemeine Vereinbarung und TCP-Handshake
Antwort
Die beiden allgemeinen Probleme sind in der Tat das asynchrone Modell für TCP, weshalb (wie das theoretische Ergebnis zeigt) die beiden Endpunkte nicht gleichzeitig über den Zustand der Verbindung Bescheid wissen können.
Die Art und Weise, wie jedes verteilte Protokoll sich mit diesem Problem befasst, ist, immer Sicherheit zu versprechen (nichts Schlimmes wird passieren), kann aber die Lebendigkeit nicht garantieren (dass der Fortschritt irgendwann gemacht wird). Lebendigkeit liegt nicht in deinen Händen. In guten Zeiten kann man versuchen, die Besten zu machen und hoffen, Fortschritte zu machen.
In TCP bedeutet dies, dass ein Endpunkt eine Annahme (wie "Verbindung hergestellt") machen kann, ohne den Zustand des anderen eindeutig zu kennen. Es ist jedoch keine unsichere Annahme zu machen; im schlimmsten Fall ist es ein harmloses Missverständnis. Nach einer Zeitüberschreitung wird es seine Meinung ändern. Es ist nicht anders als an einem Ende eines Fernsprech-Telefons zu sein und weiter zu reden, wenn man bedenkt, dass die Verbindung noch besteht. nach einer Weile, müssen Sie vielleicht fragen "Hallo, bist du noch da?", und eine Auszeit. Real-World-Protokolle müssen immer Timeouts haben (im Gegensatz zu asynchronen formalen Modellen), weil irgendwo auf dem Stapel sie einer menschlichen Funktion dienen und menschliche Geduld begrenzt ist. In der Praxis gibt es genügend Zeit, um Fortschritte zu erzielen. Daher müssen wir nur geeignete Timeouts auswählen, die auch nicht zu früh auslaufen.
Das heißt, auch gutartige Missverständnisse können unerwünschte Folgen haben. Zum Beispiel, nachdem ein Server auf die syn antwortet, teilt er Ressourcen für die Verbindung in der Hoffnung, dass der Client das Protokoll beenden wird. Dies ist eine klassische Denial-of-Service-Attacke, da ein Rogue-Client die Handshake-Sequenz einfach starten, aber niemals beenden kann, so dass ein unvorbereiteter Server mit Millionen zugeordneter Status-Maschinen übrig bleibt. Sorgfalt ist erforderlich.
- 1. Platzhalter und allgemeine Methoden
- 2. Hinzufügen der TOS-Vereinbarung Kontrollkästchen mit Devise
- 3. Allgemeine Einschränkungen und Typparameter Mess
- 4. So entfernen Sie allgemeine Werte aus zwei Array-Listen
- 5. Vergleichen Sie zwei Listen, um allgemeine Elemente zu suchen
- 6. Allgemeine Entwicklungshinweise
- 7. Allgemeine Methodenaufruf
- 8. Allgemeine Methodenplatzierung
- 9. Allgemeine Einschränkungen
- 10. Django Allgemeine Relations und ORM Abfragen
- 11. C - Pthreads Mutex und allgemeine Kopfschmerzen
- 12. gleichzeitige Warteschlange - allgemeine Frage (Beschreibung und Verwendung)
- 13. Allgemeine Klasse akzeptiert primitive Art und String
- 14. Allgemeine Methoden Typinferenz
- 15. Allgemeine Umwandlung Typ Klasse
- 16. Allgemeine Programmierung über Effekte
- 17. Wie kann ich die Stripe-Taste von Anfang an deaktivieren und nach Überprüfung der Vereinbarung aktivieren?
- 18. .load() jquery php Allgemeine Frage
- 19. Allgemeine URL-Routing
- 20. Beste allgemeine Digest-Funktion?
- 21. Einige allgemeine C Fragen
- 22. rsync allgemeine Frage
- 23. Allgemeine Guice Leistungsrichtlinien
- 24. Allgemeine Syntax von Multimethoden
- 25. R als allgemeine Programmiersprache
- 26. allgemeine binäre Protokolle
- 27. Allgemeine WordPress Frage
- 28. Allgemeine Verwendung von UML
- 29. Allgemeine Javascript Syntax Abfrage
- 30. Allgemeine Debugging-Log-Praktiken
Aus diesem Grund kann TCP nicht garantieren, dass beide Seiten die normale Beendigung der Verbindung oder keine von beiden sehen werden. (Obwohl wir jetzt [haben die Technologie] (https://gigabitether.net/2016/05/16/byzantine-fault-tolerance/), um dies zu beheben.) –