高级 IPv4 路由技术解析
1. 多播路由中的数据包转发
在多播路由中,数据包转发时会对 TTL(Time To Live)进行处理。转发数据包时,TTL 会减 1,同时会重新计算 IPv4 头部校验和,因为 TTL 是 IPv4 头部的一个字段。单播数据包在 ip_forward() 方法中也会进行相同的处理:
ip_decrease_ttl(ip_hdr(skb));
若虚拟接口(vif)的标志位包含 VIFF_TUNNEL ,则会对数据包进行封装:
if (vif->flags & VIFF_TUNNEL) {
ip_encap(skb, vif->local, vif->remote);
vif->dev->stats.tx_packets++;
vif->dev->stats.tx_bytes += skb->len;
}
设置数据包的转发标志:
IPCB(skb)->flags |= IPSKB_FORWARDED;
最后会调用 NF_INET_FORWARD 钩子:
NF_HOOK(NFPROTO_IPV4, NF_INET_FORWA
超级会员免费看
订阅专栏 解锁全文
384

被折叠的 条评论
为什么被折叠?



