Внесение ошибок в передачу клиент-сервер - PullRequest
3 голосов
/ 15 января 2010

Я учусь на уроке математики по теории кодирования, и мы должны сделать проект для нашего термина.

Мой проект - это клиент с эхо-сервером, который показывает, какие ошибки были внесены при поездке от клиента к серверу, а затем обратно. И протестируйте различные схемы исправления ошибок на эффективность и насколько хорошо они подходят для этой задачи.

Кодирование на самом деле не проблема, я смог сделать что-то, что обнаружит ошибки, запросит повторную передачу, если не сможет их исправить, и тому подобное.

Проблема, с которой я столкнулся, заключается в том, что до сих пор для того, чтобы ввести любой тип битовой ошибки, я должен сделать это искусственно - поскольку другие уровни передачи данных имеют свои собственные протоколы исправления ошибок.

Мой вопрос: есть ли способ обойти это?

Я понятия не имею, как бы я поступил об этом или даже с чего начать.

Кроме того, я знаю, что есть протоколы, с которыми я не могу повозиться, поэтому на этих уровнях всегда будет исправление ошибок. Но я хотел бы иметь возможность притвориться, что один из этих слоев сам не проверял, и тогда моему приложению была бы предоставлена ​​возможность сыграть эту роль.

Если это невозможно, какие есть хорошие методы имитации ошибок, введенных во время передачи. Мне не удалось найти статистическую информацию о распределении ошибок даже в простом примере канала. Учитывая это, я мог бы продолжить с нынешним подходом к тому, чтобы сервер вносил ошибки в сообщение.

Ответы [ 3 ]

2 голосов
/ 15 января 2010

Я бы начал здесь с JPCap. Это должно позволить вам подделать любой тип сетевого пакета, который вы хотите.

1 голос
/ 16 января 2010

Я бы, вероятно, просто реализовал один или несколько подклассов InputStream и / или OutputStream и закодировал бы их, чтобы различными способами мутировать мой поток данных. Это позволило бы легко создавать множество различных тестовых случаев. Затем просто разложите код на Java, чтобы части кода, исправляющие ошибки, видели только простой InputStream / OuputStream и не знали, как обрабатываются данные.

Например, записать, что каждый N-й байт изменяет один бит случайным образом. И так далее. Затем откройте сокет и поместите этот InputStream в ваш подкласс. (Подобный метод будет работать для UDP, просто без потока!)

Вы можете делать причудливые статистические действия, чтобы контролировать частоту ошибок, если у вас есть желание и / или требование, но я бы, вероятно, просто сосредоточился на псевдослучайной настройке различными способами и с различной скоростью, а затем запустил бы кучу различные тестовые случаи и попробуйте вместо этого сделать какой-нибудь сложный анализ полученных данных, если ваш проект требует этого.

Мутирование пакетов на разных уровнях TCP / UDP с использованием каких-то необычных инструментов, возможно, возможно, но отчасти отходит от математики, на которой вы действительно должны концентрироваться в классе математики! : -)

1 голос
/ 15 января 2010

Можно по крайней мере избежать одного уровня защиты, используя схему UDP вместо TCP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...