Почему существует отдельная контрольная сумма в заголовках 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 решили, что это не обязательно во всех этих слоях, и удалили его в пользу контрольных сумм на других уровнях (например, упомянутых вами).