Skip to content
This repository was archived by the owner on Sep 9, 2021. It is now read-only.

Conversation

sh3lep
Copy link

@sh3lep sh3lep commented Nov 26, 2020

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 т. к.
данная последовательность байт используется для передачи
данных в сети).

Типы пакетов

image

Ошибки

image

Процесс передачи данных

После получения RRQ-пакета сервером, он сразу посылает в качестве подтверждения пакет с данными и с ID пакета, равным единице. В случае с WRQ-запросом — сервер должен прислать ACK-пакет c номером пакета 0.
Каждый пакет данных содержит номер блока (block number), который затем используется в пакете подтверждения. Каждый пакет данных содержит 512 байт данных, за исключением последнего пакета, который содержит от 0 до 511 байт данных. Когда клиент получает пакет данных, который содержит меньше, чем 512 байт, он считает, что получил последний пакет.
Так как TFTP использует ненадежный UDP, то именно от конкретной реализации TFTP зависит, как будут обработаны потерянные и дублированные пакеты. В случае потери пакета отправитель отрабатывает тайм-аут и осуществляет повторную передачу.

Инструкция по использованию

Запустить в терминале

tftp_server.py
tftp_client.py

tftp_server

tftp_client

Реализация сервера была взята на github.

@sh3lep sh3lep changed the title Shelpov Vladislav. \203 Lab2c Shelepov Vladislav. \203 lab2c Nov 26, 2020
@wrbbz wrbbz added the Вторая лабораторная Реальные UDP протоколы label Nov 30, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Вторая лабораторная Реальные UDP протоколы Зачтено
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants