4. Anfangsverbindungsprotokoll (Initial Connection Protocol)
Eine Übertragung wird durch Senden einer Anfrage (WRQ zum Schreiben auf ein fremdes Dateisystem oder RRQ zum Lesen daraus) und Empfangen einer positiven Antwort, eines Bestätigungspakets für das Schreiben oder des ersten Datenpakets für das Lesen, eingerichtet. Im Allgemeinen enthält ein Bestätigungspaket die Blocknummer des bestätigten Datenpakets. Jedes Datenpaket hat eine zugeordnete Blocknummer; Blocknummern sind aufeinanderfolgend und beginnen mit eins. Da die positive Antwort auf eine Schreibanfrage ein Bestätigungspaket ist, ist die Blocknummer in diesem Sonderfall Null. (Normalerweise, da ein Bestätigungspaket ein Datenpaket bestätigt, enthält das Bestätigungspaket die Blocknummer des bestätigten Datenpakets.) Wenn die Antwort ein Fehlerpaket ist, wurde die Anfrage abgelehnt.
Um eine Verbindung zu erstellen, wählt jedes Ende der Verbindung eine TID für sich selbst, die für die Dauer dieser Verbindung verwendet wird. Die für eine Verbindung gewählten TIDs sollten zufällig gewählt werden, sodass die Wahrscheinlichkeit, dass dieselbe Nummer zweimal in unmittelbarer Folge gewählt wird, sehr gering ist. Jedem Paket sind die beiden TIDs der Verbindungsenden zugeordnet, die Quell-TID und die Ziel-TID. Diese TIDs werden an das unterstützende UDP (oder ein anderes Datagram-Protokoll) als Quell- und Zielports übergeben. Ein anfragender Host wählt seine Quell-TID wie oben beschrieben und sendet seine ursprüngliche Anfrage an die bekannte TID 69 dezimal (105 oktal) auf dem bedienenden Host. Die Antwort auf die Anfrage verwendet im normalen Betrieb eine vom Server gewählte TID als Quell-TID und die vom Anfrager für die vorherige Nachricht gewählte TID als Ziel-TID. Die beiden gewählten TIDs werden dann für den Rest der Übertragung verwendet.
Als Beispiel zeigt das Folgende die Schritte zum Aufbau einer Verbindung zum Schreiben einer Datei. Beachten Sie, dass WRQ, ACK und DATA die Namen der Schreibanfrage-, Bestätigungs- und Datenpakettypen sind. Der Anhang enthält ein ähnliches Beispiel zum Lesen einer Datei.
- Host A sendet eine "WRQ" an Host B mit source= A's TID, destination= 69.
- Host B sendet eine "ACK" (mit Blocknummer= 0) an Host A mit source= B's TID, destination= A's TID.
An diesem Punkt wurde die Verbindung hergestellt und das erste Datenpaket kann von Host A mit einer Sequenznummer von 1 gesendet werden. Im nächsten Schritt und in allen nachfolgenden Schritten sollten die Hosts sicherstellen, dass die Quell-TID mit dem in Schritten 1 und 2 vereinbarten Wert übereinstimmt. Wenn eine Quell-TID nicht übereinstimmt, sollte das Paket als fälschlicherweise von woanders gesendet verworfen werden. Ein Fehlerpaket sollte an die Quelle des falschen Pakets gesendet werden, ohne die Übertragung zu stören. Dies kann nur erfolgen, wenn TFTP tatsächlich ein Paket mit einer falschen TID empfängt. Wenn die unterstützenden Protokolle dies nicht zulassen, tritt diese spezielle Fehlerbedingung nicht auf.
Das folgende Beispiel demonstriert einen korrekten Betrieb des Protokolls, bei dem die obige Situation auftreten kann. Host A sendet eine Anfrage an Host B. Irgendwo im Netzwerk wird das Anforderungspaket dupliziert, und als Ergebnis werden zwei Bestätigungen an Host A zurückgegeben, mit unterschiedlichen TIDs, die auf Host B als Antwort auf die beiden Anfragen gewählt wurden. Wenn die erste Antwort eintrifft, setzt Host A die Verbindung fort. Wenn die zweite Antwort auf die Anfrage eintrifft, sollte sie abgelehnt werden, aber es gibt keinen Grund, die erste Verbindung zu beenden. Daher, wenn unterschiedliche TIDs für die beiden Verbindungen auf Host B gewählt werden und Host A die Quell-TIDs der empfangenen Nachrichten überprüft, kann die erste Verbindung aufrechterhalten werden, während die zweite durch Rücksenden eines Fehlerpakets abgelehnt wird.