Программирование TCP с помощью .NET - PullRequest
1 голос
/ 03 февраля 2010

У меня проблема с заданием на программирование сокетов. Я написал TCP-клиент, который отправляет команды через сокеты / сетевой поток. Я использую Wireshark , чтобы посмотреть необработанные данные, которые проходят через провода. Каждый раз, когда я посылаю «команду» (то есть, я сбрасываю () сетевой поток), приложение Wireshark сообщает мне, что контрольная сумма в заголовке TCP неверна (говорит «это должно быть 0x2440, но 0x0000). Я получаю ACK обратно , Я не понимаю, почему на уровне приложений мне нужно заботиться о заголовке TCP. Это не может быть правдой. Кто-нибудь знает, почему я получаю эту «ошибку». Есть ли настройка, о которой я не знаю? Я использую сокеты .NET 2.0 с Tcp. Спасибо.

1 Ответ

8 голосов
/ 03 февраля 2010

Вы просматриваете дамп Wireshark с компьютера, который отправляет данные?Если это так, то может быть так, что контрольная сумма не была вычислена в той точке стека, где ее видит Wireshark.Многие сетевые карты в наши дни имеют разгрузку контрольной суммы TCP, где контрольная сумма выполняется аппаратным обеспечением, и поэтому поле контрольной суммы будет нулевым при выходе (Wireshark получает пакет непосредственно перед его отправкой на оборудование).Так как вы получаете ACK, принимающая сторона явно клевая.Кроме того, если вы разговариваете с localhost, ваш стек может вообще не беспокоиться о контрольных суммах (они не являются строго необходимыми для хоста, говорящего с собой).

...