Почему существует отдельная контрольная сумма в заголовках TCP и IP?

В чем необходимость наличия контрольной суммы на разных уровнях? Например, есть контрольная сумма в уровне TCP и снова на уровне IP, а также на уровне Ethernet. Достаточно ли иметь контрольную сумму на одном уровне?

Ответы

Ответ 1

Все три слоя необходимы по нескольким причинам:

  • IP не всегда запускается через Ethernet (представьте себе IP через RS-232, что-то, что может сделать каждый блок Cisco и Unix)

  • IP не проверяет данные

  • TCP-пакеты могут быть повторно собраны из IP-пакетов и фрагментов, у каждой из которых есть совершенные контрольные суммы.

  • Даже если правильно собрать, программное обеспечение или другие ошибки могут быть введены в слоях между IP и TCP

  • Даже если все программное обеспечение функционирует правильно, а TCP/IP находится поверх ethernet, ограниченный размер контрольных сумм может быть ошибочно корректным (и будет в какой-то момент, учитывая достаточное количество пакетов) перед лицом постоянных ошибок, поэтому полезно иметь более чем одну контрольную сумму.

  • Каждый раз, когда вводится новый заголовок, для контрольной суммы больше, и новый слой не может видеть бит заголовка слоя ниже.

Ответ 2

Контрольная сумма Ethernet - это контрольная сумма hop to hop, что означает, что она пересматривается каждый раз, когда изменяются поля заголовка Ethernet. Контрольная сумма TCP/UDP - это сквозная контрольная сумма, означающая, что она вычисляется отправителем и проверяется получателем. Контрольные суммы TCP/UDP охватывают весь сегмент. Контрольная сумма IP покрывает только заголовок. Ethernet CRC охватывает весь кадр.

Ответ 3

Возможно, потому, что они охватывают разные данные, нет?

Ответ 4

Дизайнеры IPv6 решили, что это не обязательно во всех этих слоях, и удалили его в пользу контрольных сумм на других уровнях (например, упомянутых вами).