2016-11-22 3 views
0

Я работаю над приложением сервера/клиента, использующим интерфейс Linux TUN.Ошибка контрольной суммы TCP для фрагментированных пакетов

Сервер получает пакеты непосредственно с интерфейса TUN и передает их клиентам и клиентам, которые помещают полученные пакеты непосредственно в интерфейс TUN.

<Server_TUN---><---Server---><---Clients---><---Client_TUN---> 

Иногда пакеты с сервера_TUN должны быть фрагментированы на уровне IP перед передачей клиенту.

Итак, на сервере я прочитал пакет из TUN, начните фрагментировать его на уровне IP и отправьте их через сокет клиентам.

Когда была реализована логика фрагментации, решение не сработало.

После запуска Wireshark на Client_TUN я заметил, что для всех входящих фрагментированных пакетов я получаю ошибку TCP Checksum.

wireshark capture

На данном скриншоте, номер кадр 154 заявлен как Сборка в 155.

Но TCP контрольной сумма, как утверждается, неправильно!

На стороне сервера я сохраняю данные tcp без изменений и для данного примера, пока вы видите обратное в Wireshark, я разделил пакет с 1452 байтами (включая заголовок IP) и 30 байтами (включая заголовок IP)

Я также проверил значение контрольной суммы TCP на сервере, и его значение точно равно 0x935e, и, хотя я не думал, что вопрос о выгрузке Checksum имеет значение для входящих пакетов, я проверил разгрузку на клиенте, и он был выключен.

$ sudo ethtool -k tun0 | grep ": on" 
scatter-gather: on 
tx-scatter-gather: on 
tx-scatter-gather-fraglist: on 
generic-segmentation-offload: on 
generic-receive-offload: on 
tx-vlan-offload: on 
tx-vlan-stag-hw-insert: on 

Несмотря на это, из-за решения не работает сейчас, я не думаю, что его вызвано выгрузку эффектом.

У вас есть идея, почему контрольная сумма TCP может быть неправильной для фрагментированных пакетов?

ответ

0

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

Смежные вопросы