ipv6一致性测试(Path MTU Discovery for IPv6)内核修改

本文介绍了一种针对IPv6环境下MTU(最大传输单元)的测试方法及内核修改方案,确保在网络传输过程中能正确处理分片与PacketTooBig消息,避免不必要的网络问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

推荐内核版本

linux-4.19.155
下载地址:https://download.youkuaiyun.com/download/superbfly/14521687

REFERENCE

RFC 8201 - Path MTU Discovery for IPv6

测试流程

TN2:测试设备
TR1:路由(我的理解,可能有偏差)
NUT:被测设备
在这里插入图片描述

  1. TN2发送1400字节长度的Echo Request到NUT
  2. TN2判断能否收到NUT回复的Echo Reply消息
  3. TR1发送Packet Too Big消息到NUT(MUT为56)
  4. TN2再次发送1400字节长度的Echo Request到NUT
  5. TN2判读能否收到NUT回复的Echo Reply消息(此时消息可能包含分片头)

判断标准

如果在第二步就失败,说明是网络问题。主要功能判断在第五步,这里的通过标准有两种,第一种是回复原始1400字节长度的Echo Replay,第二种是回复带分片头的Echo Replay。我们使用的是第一种方法。

解决方法

直接在NUT的内核中忽略第三步中TR1发送的Packet Too Big消息。

内核代码修改

修改文件:net/ipv6/icmp.c

static void icmpv6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
                       u8 type, u8 code, int offset, __be32 info)
{
        /* icmpv6_notify checks 8 bytes can be pulled, icmp6hdr is 8 bytes */
        struct icmp6hdr *icmp6 = (struct icmp6hdr *) (skb->data + offset);
        struct net *net = dev_net(skb->dev);

        if (type == ICMPV6_PKT_TOOBIG)
        {
                // 这里加判断,只有Packet Too Big中mtu大于1280时,才更新mtu
                if( ntohl(info) >= 1280 )
                {
                        ip6_update_pmtu(skb, net, info, skb->dev->ifindex, 0, sock_net_uid(net, NULL));
                }
        }
        else if (type == NDISC_REDIRECT)
                ip6_redirect(skb, net, skb->dev->ifindex, 0,
                             sock_net_uid(net, NULL));

        if (!(type & ICMPV6_INFOMSG_MASK))
                if (icmp6->icmp6_type == ICMPV6_ECHO_REQUEST)
                        ping_err(skb, offset, ntohl(info));
}

通过ntohl(info) >= 1280这个判断,使得mtu小于1280的Packet Too Big不生效,达到回复1400字节内容的目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高晓伟_Steven

相逢即是有缘,动力源于金钱。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值