Tcpdump pcap, экспортированный и исследуемый на другом компьютере с wirehark, показывает множество неверных сообщений контрольной суммы TCP. Это известный и задокументированный феномен при использовании функции разгрузки TCP: https://wiki.wireshark.org/TCP_Checksum_Verification
Единственное, что неясно, это почему контрольная сумма неверна?
Контрольные суммы TCP вычисляются по всему TCP-сегменту с помощью псевдозаголовка и использования временного значения контрольной суммы всех нулей в процессе вычисления контрольной суммы (http://www.tcpipguide.com/free/t_TCPChecksumCalculationandtheTCPPseudoHeader-2.htm#Figure_218). Затем псевдоголовок отбрасывается. Где закрадывается разница?
Потому что контрольная сумма вычисляется сетевой картой, а не операционной системой.
Страница вики, на которую вы ссылаетесь, объясняет это:
Если вы выполняете захват на последней сетевой карте Ethernet, вы можете увидеть много таких «ошибок контрольной суммы». Это связано с тем, что разгрузка контрольной суммы TCP часто реализуется на этих сетевых адаптерах и, следовательно, для пакетов, передаваемых машиной. Контрольная сумма не будет вычисляться до тех пор, пока пакет не будет отправлен аппаратным обеспечением NIC, спустя много времени после того, как ваш инструмент захвата перехватит пакет из сетевого стека.
Сегмент TCP находится в оперативной памяти компьютера. Он содержит все поля, необходимые для сегмента TCP.
Когда используется разгрузка контрольной суммы TCP, при передаче сегмента происходит следующее:
ОС заполняет каждое поле в сегменте TCP в памяти, ЗА ИСКЛЮЧЕНИЕМ контрольной суммы. Поле контрольной суммы не вычисляется ОС, оно содержит все данные, которые были ранее в этой области памяти.
Теперь инструменты захвата пакетов, такие как Wireshark, захватывают содержимое этой области памяти, которая содержит сегмент TCP без вычисленной контрольной суммы.
Когда ОС отправляет сегмент в сетевой адаптер, оборудование сетевого адаптера затем выполняет вычисление контрольной суммы и помещает вычисленную контрольную сумму в конкретное поле сегмента TCP. Эта контрольная сумма никогда не просматривается ОС или инструментом захвата.
Это причина, по которой Wireshark сообщает об этих ошибках.