这更像是一个好奇的问题。我一直在浏览 linux 网络内核,并注意到sk_buff在单独的联合中有两个指向 ipv4 标头的指针。这背后的原因是什么?是否存在数据包可能具有多个 IP 标头的事件?
编辑这是我看到它的链接。我在其他地方也见过这个。sk_buff
00202 union {
00203 struct tcphdr *th;
00204 struct udphdr *uh;
00205 struct icmphdr *icmph;
00206 struct igmphdr *igmph;
00207 struct iphdr *ipiph;
00208 struct ipv6hdr *ipv6h;
00209 unsigned char *raw;
00210 } h;
00211
00212 union {
00213 struct iphdr *iph;
00214 struct ipv6hdr *ipv6h;
00215 struct arphdr *arph;
00216 unsigned char *raw;
00217 } nh;
提前致谢
h
是传输层的标头。 nh
是网络层的标头。
但在原始套接字中,没有传输协议,因此标头是网络层标头。