Здравствуйте, Linuxoid, Вы писали:
L>Здравствуйте, Booch, Вы писали:
L>Псевдозаголовок используется при расчете контрольной суммы TCP и включает в себя выборочные данные из IP-заголовка. Формат псевдо-заголовка (RFC 793):
L>- Source IP-address;
L>- Destination IP-address;
L>- Protocol;
L>- Size;
L>Размер псевдо-заголовка 12 байт.
Вот мой код для расчета TCP-чексумы (без тела TCP):
// Initialize locals
tcp_packet = (unsigned short*)(ip_datagram + ip_head_len);
size = ip_datagram_len - ip_head_len;
csum = 0;
// Psevdo-header
csum += *((unsigned short*)(ip_datagram+12)); // Source IP
csum += *((unsigned short*)(ip_datagram+14));
csum += *((unsigned short*)(ip_datagram+16)); // Destination IP
csum += *((unsigned short*)(ip_datagram+18));
csum += htons((unsigned short)ip_datagram[9]); // Protocol
csum += htons(size);
// TCP body
(skipped)