IP 包头的 checksum 是如何计算的?
struct HdrIp {
byte: ihl_ver; // IP header (RFC 791) - Internet Layer
// Combined field:
// ihl:4 - IP header length divided by 4
// version:4 - IP version
byte: tos; // IP type-of-service field
word: tot_len; // total length
word: id; // unique ID
word: frag_off; // Fragment Offset + fragmentation flags (3 bits)
byte: ttl; // time to live
byte: protocol; // protocol type
word: checksum; // IP header checksum
InAddr : saddr; // source IP
InAddr : daddr; // destination IP
};
这是一个IP包头格的说明. 里面有一个 checksum
RFC791 里是这样说的:
The checksum algorithm is:
The checksum field is the 16 bit one's complement of the one's
complement sum of all 16 bit words in the header. For purposes of
computing the checksum, the value of the checksum field is zero.
说实话我没太看明白它的意思.大约是说这个 checksum 只是头格式的 checksum 不包括数据部份. 计算方式是把每个 字段补足16bit 来相加,计算前把 checksum 域计为 0.
但我抓了几个包来试,发现都得不到那个 checksum 呢? 是我没看明白,还是方法不正确? 哪个大侠给我说一下 这个 checksum 是如何计算出来的???
这是我抓的这几个包的包头.
第一个:
45 // ihl_ver
00 // tos
00 28 // tot_len
16 B9 // id
40 00 // frag_off
80 // time to live
06 // IP Protocel
61 8F // checksum 这个是 checksum
C0 A8 00 D1 // saddr
C0 A8 00 66 // daddr
这是第二个:
45 // ihl_ver
00 // tos
00 28 // tot_len
5B CC // id
40 00 // frag off
80 // time to live
06 // tcp ,udp
1C 7C // checksum
C0 A8 00 66 // saddr
C0 A8 00 D1 // daddr
第三个
45 // ihl_ver
00 // tos
00 30 // tot-len // 48 byte , 总长度 - mac 头
16 BA // id
40 00 // frag off
80 // time to live
06 // tcp udp
61 86 // check sum
C0 A8 00 D1 // saddr
C0 A8 00 66 // daddr
总之我一连计算了几个. 用不同的计算方法都得不到这个 checksum. 这个 checksum 是如何计算的?
- 大小: 13.5 KB
- 大小: 6.4 KB
分享到:
相关推荐
4. IP 包总长(Total Length):以字节为单位计算的 IP 包的总长度,包括头部和数据,最大为 65535 字节。 5. 标识符(Identifier):用于分段大型数据包,长度为 16 位。 6. 标记(Flags):用于标记包的分段和重组...
### IP包头分析 在计算机网络中,IP(Internet Protocol)是用于报文分组交换的一种通信协议。IP数据包是互联网中传输的基本单位,它包含头部和数据两部分。本篇文章将根据提供的文件信息对IP包头进行深入解析。 #...
IP包头的最小长度为20字节,当存在选项字段时,最大长度可达60字节。 #### 3. 服务类型(Type of Service, TOS) - **长度**:8比特 - **作用**:此字段最初设计用于指定数据包的服务质量(Quality of Service, ...
#### IP包头的格式解析 IP报文由包头和数据两部分组成。包头包含了源地址、目的地址以及控制信息,而数据部分则携带实际的传输数据。下面我们逐一解析IP包头的各个字段: 1. **Version(版本)**: 占用4位,定义了...
// 定义IP数据包头结构体 struct ipHeader { unsigned char h_lenver; // 头部长度和版本 unsigned char tos; // 服务类型 unsigned short total_len; // 总长度 unsigned short ident; // 标识 unsigned short...
在本文中,我们讨论了使用 Winpcap 对数据包进行拦截的技术,包括包头的介绍、PSD 的定义、PCAP 句柄的使用、checksum 函数的使用、CTod::SendRaw 函数的使用、IP 头的定义等内容。这些技术都是 Winpcap 中的核心...
- **IPv4数据报包头**:包括版本、头部长度、服务类型等字段。 - **版本(Version)**:4位,标识IP版本,如IPv4为0100。 - **头部长度(Header Length)**:4位,标识IP报头的长度。 - **服务类型(Type of Service, ...
8. 首部校验和(Header Checksum):16位,用于检查IP头部的错误,但不包括数据部分。 9. 源地址(Source Address)和目的地址(Destination Address):各32位,分别表示发送方和接收方的IP地址。 除了IP包,网络...
**知识点:** 根据实验数据,IP包头的大小为20字节,这是标准未选项扩展的IP头的大小。整个IP数据包的总长度为56字节。由此可以推断出负载的有效数据长度为36字节(即总长度减去头部长度)。 **应用场景:** 在实际...
* Header Length=20 Bytes,表示 IP 包头的总长度为 20 个字节 * Type of Service=00,表示服务类型为 0 * Total Length=48Bytes,表示该 IP 包的总长度为 48 个字节 * Identification=363,表示 IP 包识别号为 363 ...
- **首部长度**:指示了 IP 包头的长度,使用4位比特表示,表示范围为 [0, 15],每个单位代表 4 字节。 - **服务类型 (Type of Service, TOS)**:8位比特,包括优先级、延迟、吞吐量、可靠性和费用标志。 - **总长度...
在无线网络中,IP包头、UDP包头以及RTP包头总共可以达到40到60字节,而语音有效载荷往往只有15至20字节。这种不成比例的大小使得语音数据包头消耗了大量宝贵的带宽资源。ROHC通过压缩技术,能够将包头压缩到极小的...
- Header Checksum:包头校验和,用于检测包头错误。 - Source Address:源地址。 - Destination Address:目的地址。 7. IPv6与IPv4的技术差异: - IPv6的地址长度从32位扩展到128位,提供了极大的地址空间。 ...
当IP包在NAT过程中被转换时,必须更新包头中的校验和字段,以确保数据包的正确性。这个过程涉及快速算法,用于高效计算新地址和端口转换后的校验和。 5. **ALGs和安全影响**: NAT的使用会破坏IP地址的点对点意义...
Linux TCP/IP 协议栈分析 ...* skb_checksum:计算数据包的校验和。 sk_buff 结构是 Linux TCP/IP 协议栈分析的核心数据结构,它提供了丰富的成员变量和函数,以便描述和管理数据包的传输和处理过程。
通过WireShark,我们可以看到每个数据包的详细信息,包括源/目标IP地址、端口号、协议类型、数据包头信息等。 **三、实验步骤** 1. 使用ping命令:在命令提示符下输入`ping -n 10 hostname`,向指定主机发送10个...
- ICMP报文在IP数据报内部传输,报文中包括类型(type)、代码(code)和校验和(checksum)等字段。 - 根据描述,该程序关注了ICMP_ECHO(8)和ICMP_ECHO_REPLY(0)两种类型,这些对应于ping操作中的请求和应答报文。 ...
#### IP数据包头格式 IP协议位于网络层,负责将数据封装成数据包,并在不同的网络间进行路由。IP数据包由头部和数据部分组成。头部信息包括版本号、头部长度、服务类型、总长度、标识、标志、分片偏移、生存时间...