Как TCP и UDP обнаруживают ошибки передачи? - PullRequest
6 голосов
/ 25 декабря 2010

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

Ответы [ 3 ]

7 голосов
/ 13 июня 2013

Возможны разные ошибки:

  • Неправильный порядок пакетов
  • Потеря пакетов
  • Поврежденные данные внутри пакета
  • Фантомные пакеты (получатель получает пакеты, которые никогда не отправлялись)

UDP предоставляет только механизм для преодоления повреждения данных (это дополнительная функция в IPv4, обязательная в IPv6).

Повреждение данных

UDP защищен только от повреждения данных внутри пакетов, если в заголовке каждого пакета используется поле контрольной суммы. В основном он берет заголовок, содержимое пакета и некоторую дополнительную информацию (например, IP-адреса), интерпретирует это как длинный список 16-битных слов в одном дополнении и суммирует их контрольная сумма UDP .

TCP использует аналогичный подход для решения проблемы повреждения данных.

Все остальные проблемы

TCP имеет так называемые порядковые номера для каждого пакета. Порядковый номер адресует байты, поэтому, если отправитель говорит «это пакет с порядковым номером 102», он говорит, что отправленный им пакет начинается с байта 102 потока. Затем получатель отправляет и подтверждение получателю. Например, если пакет имеет длину 10 байтов, получатель отправит и подтвердит с порядковым номером 112, что означает «я ожидаю, что следующий пакет будет получен, начиная с порядкового номера 112». Каждый пакет с другим порядковым номером является либо дубликатом (слишком низким), либо потерянным пакетом (слишком большой принятый порядковый номер) или фантомом (общее несоответствие ожидаемого порядкового номера и полученного). Таким образом, во всех случаях несовпадения порядкового номера получатель знает, что что-то идет не так, и может реагировать (отличается от разных версий TCP).

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

Это только очень краткое объяснение. Тема несколько больше, чем описано здесь;)

2 голосов
/ 25 декабря 2010

На уровне протокола IP (на котором основаны как UDP, так и TDP) существует контрольная сумма, которая подтверждает, что содержимое пакета является действительным. Однако существуют ситуации, когда определенные ошибки не обнаружены этой контрольной суммой.

Обычно на более высоком уровне (например, при передаче файла) существует более надежный хеш, рассчитанный на содержимое файла. Это может быть сделано для всего файла или для отдельных блоков файла некоторого размера (обычно намного больше, чем один IP-пакет).

1 голос
/ 25 декабря 2010

Если я помню из разных классов, Грег был прав с контрольной суммой в качестве одного из немногих источников проверки данных.Однако UDP (разработанный так, как он есть) не всегда надежен на 100%.Это делает его идеальным для потоковой передачи данных (например, веб-камеры), так как потеря фрейма не такая уж большая проблема.Хотя это будет считаться ошибкой в ​​TCP (который затем должен будет повторно отправить кадр, задерживая все последующие кадры), UDP на самом деле не заботится, если он не настроен на.

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

...