This repository was archived by the owner on Sep 9, 2021. It is now read-only.
Shelepov Vladislav. \203 lab2c #28
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
TFTP клиент
Описание протокола:
TFTP — простой протокол передачи файлов. Используется главным образом для первоначальной загрузки бездисковых рабочий станций. TFTP, в отличие от FTP, не содержит возможностей аутентификации и основан на транспортном протоколе UDP.
Типы пакетов:
•Read Request(RRQ, 1) — запрос на чтение файла.
•Write Request(WRQ, 2) — запрос на запись файла.
•Data(DATA, 3) — данные, передаваемые через TFTP.
•Acknowledgment(ACK, 4) — подтверждение пакета.
•Error(ERR, 5) — ошибка.
•Option Acknowledgment(OACK, 6) — подтверждение опций.
Реализация клиентского приложения:
Клиентское приложение выполняет следующие функции:
•считывание из консоли команды
•отправка датаграмм-запросов на сервер
•обработка датаграмм приходящих с сервера
•отправка датаграмм в соответствие с принятыми данными
•модель клиента была реализован в виде класса Client. Класс
содержит поля IP, Port, socket, chunkSize и реализует функции
get(fileName, targetFileName), put(fileName, targetFileName)
Приложение было реализовано на языке программирования
Python.
•Для формирования данных был использована функция pack из
пакета struct, позволяющая представлять данные, как
последовательность байт и выбирать порядок байт в
формируемом пакете (в нашем случае первым символом в
формате указывался символ «!» обозначающие Big-Endian т. к.
данная последовательность байт используется для передачи
данных в сети).
Типы пакетов
Ошибки
Процесс передачи данных
После получения RRQ-пакета сервером, он сразу посылает в качестве подтверждения пакет с данными и с ID пакета, равным единице. В случае с WRQ-запросом — сервер должен прислать ACK-пакет c номером пакета 0.
Каждый пакет данных содержит номер блока (block number), который затем используется в пакете подтверждения. Каждый пакет данных содержит 512 байт данных, за исключением последнего пакета, который содержит от 0 до 511 байт данных. Когда клиент получает пакет данных, который содержит меньше, чем 512 байт, он считает, что получил последний пакет.
Так как TFTP использует ненадежный UDP, то именно от конкретной реализации TFTP зависит, как будут обработаны потерянные и дублированные пакеты. В случае потери пакета отправитель отрабатывает тайм-аут и осуществляет повторную передачу.
Инструкция по использованию
Запустить в терминале
Реализация сервера была взята на github.