• 路由器开发知识汇总


    1 路由器RoC
    1.1 基本概念
    路由器RoC(Router on a Chip)一般都会集成多口以太网switch。

    1.2 MT7628K eCos写MAC地址
    ra0的MAC是读取0x0004、0x0006和0x0008三个寄存器。
    假设MAC地址:00:0C:43:76:20:58
    用USB2UART线进入eCos命令行后。
    cd net
    iwpriv ra0 e2p 04=0C00
    iwpriv ra0 e2p 06=7643
    iwpriv ra0 e2p 08=5820

    1.3 MT7620
    1)集成了6口以太网交换机(MT7530)。
    2)MT7628K类似于MT7620,运行eCos,其中的WLAN模块,可以实现桥接功能,即AP-Client。
    3)switch不支持为每一个port配置PVID,而是几个port配置为一个组,然后为这个组内的端口配置公用的PVID,PVID的默认值为1。
    4)片上总线包括Pbus (Peripheral bus) 和Rbus (Ralink bus)。
    5)USB设备IP使用CAST CUSB2,CAST 8051 and USB core come from Poland Evatronix SA(OTG 3.0 spec),Evatronix SA was acquired by Cadence in 2013。
    6)MT7620的OHCI和EHCI配置时二选一。

    2 无线路由器当无线交换机使用方法
    2.1 交换芯片对应的网络节点
    1)eth0.1是VLAN1分出的LAN口
    2)eth0.2是VLAN2分出的WAN口
    3)无线路由器的br-lan = eth0.1 + ra0,即将有线LAN口和WLAN桥接组成一个新的LAN

    2.2 无线路由器配置成无线交换机
    1)外部网线连到4个LAN口中的一个,IE登陆路由器后,禁止DHCP服务
    2)其它设备搜索WLAN信号,输入用户名密码

    3 Linux DSA
    Linux交换机驱动目录:
    drivers/net/dsa
    net/dsa/slave.c
    dsa_slave_create()

    4 NAT
    4.1 iptables static NAT
    PREROUTING:DNAT专用。
    POSTROUTING:SNAT专用。
    MASQUERADE:SNAT转换时,如果--to-source的地址经常变化,那么就无法在iptables命令中固定,譬如路由器WAN口上的IP地址,内网设备通过WAN口访问外网时,只要指定使用MASQUERADE参数,iptables就会统一将内网设备的IP地址替换为路由器WAN口的IP地址。
    Figure 4-1 NAT chain

    eth0: 192.168.0.99
    eth1: 192.168.5.99

    # client -> eth1 -> eth0 -> server
    iptables -t nat -A PREROUTING -d 192.168.5.99 -i eth1 -j DNAT --to-destination 192.168.0.99
    # client -> eth0 -> eth1 -> server
    iptables -t nat -A POSTROUTING -s 192.168.0.99 -o eth1 -j SNAT --to-source 192.168.5.99
    echo 1 > /proc/sys/net/ipv4/ip_forward

    Android TCP Server: busybox nc -lvz -s 192.168.0.99 -p 8001
    Windows SocketTool

    4.2 硬件NAT
    参考AR8327N(N表示支持硬件NAT)page 50的NAT Entry Table,NAT有32个entries,每个entry的长度是80 bits。表编辑控制寄存器是Entry Edit Control Register。

    iptables FORWARD对接net_device_ops中的函数指针ndo_flow_offload实现HNAT。

    AR8327N的VLAN Table访问控制寄存器是VTU_FUNC_REG0和VTU_FUNC_REG1。

    4.3 Cone NAT and Symmetric NAT
    4.3.1 NAT - NAPT - Cone NAT
    只要是从同一个内部IP和port出来的包,无论目的地址是否相同,NAT都将它转换成同一个外部IP1和port1。同一个外部IP1和port1与无论目的地址是否相同形成了一个类似锥形的网络结构,也是这一名称的由来。

    P2P原理:
    [12th-May-2022]
    1)2个局域网客户端连接公网服务器,服务器将client1的公网IP和port发送给客户端client2,同样服务器也将client2的公网IP和port发送给客户端client1。
    2)然后client1发送数据给client2对应的公网IP和port,会失败,但是client1所在路由器的Cone NAT中包含了client1到client2公网IP和port的NAT session,接着client2也发送数据给client1对应的公网IP和port,因为client1所在路由器的Cone NAT已经包含了client1到client2公网IP和port的NAT session,所以这次client1可以收到client2的数据。
    3)以上client1所在路由器的Cone NAT包含了2条NAT session,一条是client1到服务器,另外一条是client1到client2;同样client2所在路由器的Cone NAT也包含了2条NAT session,一条是client2到服务器,另外一条是client2到client1。
    4)根据3的分析,client1或者client2访问2个外部地址,使用了同一个NAT源地址,所以这里的NAT类型是Cone NAT。
    5) Linux NAT session numbers
    /proc/net/ip_conntrack
    /proc/sys/net/netfilter/nf_conntrack_max

    4.3.2 NAT - NAPT - Symmetric NAT
    Linux MASQUERADE在进行NAT转换时,会遵循两个原则:
    尽量不去修改源端口,也就是说,IP伪装后的源端口尽可能保持不变。
    更为重要的是,IP伪装后必须保证伪装后的源地址/端口与目标地址/端口(即所谓的socket)唯一。

    5 Switch VLAN原理
    5.1 VLAN Mode
    Tag-based VLANs are the industry standard 802.1Q VLANs (dot1q) , while the port-based VLANs are more akin to private VLANs.

    trunk:VLAN ID多于一个的port口,基于Tag-based,使用IEEE 802.1Q VID
    access:untagged port,基于Tag-based,使用IEEE 802.1Q PVID,一个port最多有一个untagged的VLAN

    5.2 VLAN帧格式
    Linux内核代码:net/8021q/vlan_dev.c
    eth0:VLAN母设备
    eth0.VID:VLAN子设备,其IP地址的一般形式是aaa.bbb.VID.ccc,除了VID之外,IP地址的其它3个字段与母设备保持一致
    VLAN PCP:IEEE 802.1Q中没有定义,在IEEE 802.1p中定义,p表示priority;3 bit,表示帧的优先级,取值范围为0~7,值越大优先级越高
    VLAN DEI:Drop eligible indicator,丢弃适当性指示符,局域网中取0;1 bit
    VLAN ID:12 bit,0保留
    2个字节EtherType:
    - 0x0800 表示IPv4
    - 0x0806 表示ARP
    - 0x86dd 表示IPv6
    - 0x809B 表示AppleTalk协议数据
    - 0x8138 表示Novell类型协议数据
    - 0x88F7 表示gPTP协议数据

    5.3 VLAN entry SRAM
    VLAN entry有4096个,每个entry占用4个字节,开机后需要将使能的VLAN信息配置在交换机的SRAM中,有效的VLAN entry就以12bit的VLAN ID为索引,定位到SRAM中对应的位置。

    5.4 PVID默认值
    1)PVID属于IEEE 802.1Q,不属于Port-based VLAN
    2)PVID寄存器IEEE 802.1Q Default Tag Register Block 0x0B00, Page 34h: Adress 10h-21h;默认值是1;参考Kendin KSZ8995M/MA
    3)当端口被分配到多个VLAN中时,PVID通过寄存器设置为最小的VLAN ID
    4)AN-135
    802.1Q Tag Based and Port Based VLAN Function and Setting in KSZ8995M/MA
    5)例子
    VLAN ID CPU (eth0) LAN1 LAN2 LAN3 WAN
    1                T                U        U        U      X
    2                T                X        X        X      U
    51                X               T        T        T       T
    85                X               T        T        T       T

    5.5 IEEE 802.1p
    在该规范中定义了PCP的值。
    PCP    Priority    Acronym    Traffic types
    1        0 (lowest)        BK        Background
    0        1 (default)       BE        Best effort
    2        2                     EE        Excellent effort
    3        3                     CA        Critical applications
    4        4                     VI        Video, < 100 ms latency and jitter
    5        5                    VO        Voice, < 10 ms latency and jitter
    6        6                    IC        Internetwork control
    7        7 (highest)     NC        Network control

    5.6 QinQ
    1)802.1Q in 802.1Q:VLAN双Tag,是基于IEEE 802.1Q技术的一种比较简单的二层虚拟专用网络协议
    2)3个重要寄存器
    PVID寄存器:IEEE 802.1Q Default Tag Register,16位寄存器,默认值是1,这个是多用途寄存器,untagged Port口的内部和外部的VID都用PVID
    ISP TPID寄存器:16位TPID值,常规的customer TPID的值为0x8100
    ISP Tag Port映射寄存器:指明哪些Port口支持双Tag

    6 MT7620 WiFi
    6.1 物理层的组成
    PLCP:Physical Layer Convergence Procedure,物理层汇聚子层
    PMD:Physical Medium Dependent,物理媒介相关层;调制解调就是这一层

    6.2 MRMC Concurrency
    1)MRMC是multi-role multi-channel operation的缩写。
    2)The WiLink8.0 supports the multi-channel operation as time division multiplexing (TDM)-based concurrency. Each role gets a portion of the air time. The core of the multi-role operation is the scheduler that decides on each given time what role should be activated, and protects the role that should be suspended before moving to a new role.
    3)TI WLAN+SoftAP是单信道TDM并发。
    4)Cypress WLAN+P2P采用不同的信道实现TDM并发。
    5)Linux中每一个role叫做vif。

    6.3 SRAM Table
    1)WiFi AP MAC Search Table
    - MT7620有256个entry,每个entry占用8个字节,保存一个Client的MAC地址和2个字节的属性。
    - 256个entry保存256个Wireless Client MAC地址。
    - 256个entry保存128个Wireless Client MAC地址和128个WCIDn_TX_RATE(仅仅占用每个entry的2个字节,高6个字节未使用)。
    2)WiFi AP Beacon Table
    - Linux kernel中每创建一个带有AP功能的vif(Multi BSSID Mode),驱动就会在Beacon Table中增加一个entry。
    - 包括Beacon在内的管理帧通过3个发送队列之一的Tx0Q发送。

    6.4 RT3070 4-way handshake
    ap/ap_auth.c
    ap/ap_assoc.c
    ap/ap_wpa.c
    1)AP和STA计算各自的PTK(Pairwise Transient Key),GTK(Group Temporal Key)由AP计算,并发送给STA。
    2)AP和STA双方使用PTK对单播进行加密,使用GTK对组播进行加密。
    3)PTK保存在Pairwise Key Table(offset 0x4000)中,GTK保存在Shared Key Table(offset 0x6C00)中。

    6.5 MT7628K AP-Client
    0) AP-Client is similar to an ethernet switch, without DHCP enabled.
    [7th-May-2022]
    DA/SA/BSSID, AP-Client + AP MAT core will do MAC Address Translation for DA, SA and BSSID, there are two BSSID, one is repeater, another is main router. MAT is an AP-Client core technology.
    无线终端像手机、笔记本类的如果是通过中继设备(也可以叫副路由器)上网,他们的地址都会被中继设备替换为自身的MAC。
    Refer to zhihu 消失的MAC地址。
    Beacon packet has three MAC DA/SA/BSSID, DA is FF:FF:FF:FF:FF:FF, SA and BSSID are equal to AP BSSID.

    1)APCLI模式保持了无线网络名称(SSID)的一致性,在公司园区或者其它公共场所,都需要保持无线网络名称的一致性。
    2)APCLI使用了软件网桥功能,ra0和apcli0都attach到网桥br0上。
    3)apcli0的MAC地址是在ra0的MAC地址基础上加1,并且ra0的MAC地址第6个字节也即是最右边那个字节必须是4的倍数。
    4)Secondary router需要禁止DHCP功能,IP地址由上级路由器分配。

    6.6 WDS
    1)WDS模式保持了无线网络名称(SSID)的一致性,在公司园区或者其它公共场所,都需要保持无线网络名称的一致性。
    2)Secondary router需要禁止DHCP功能,IP地址由上级路由器分配。
    3)
    WDS: DA/SA/TA/RA
    Normal: DA/SA/BSSID

    6.7 WiFi mesh
    [14th-May-2022]
    Role decision is based on BSSID and RSSI.
    WiFi mesh不改变WiFi原来的3地址(DA/SA/BSSID)或者4地址(DA/SA/TA/RA)结构,而是将mesh header放置于WiFi Frame Body帧体的最前面,mesh payload is an ethernet frame。

    7 debug
    7.1 switch port mirror
    Read my blog “以太网交换机EtherSwitch”。

    7.2 iptables port mirror
    1) Linux iptables TEE
    CONFIG_NF_DUP_IPV4=m
    CONFIG_NF_DUP_IPV6=m
    CONFIG_NETFILTER_XT_TARGET_TEE=m

    # eth0 -> USB eth1 (192.168.2.5) -> Windows NIC (192.168.2.100)
    iptables -A PREROUTING -t mangle -i eth0 -j TEE --gateway 192.168.2.100
    iptables -A POSTROUTING -t mangle -o eth0 -j TEE --gateway 192.168.2.100

    TEE复制报文时,同时替换复制报文的源和目的MAC地址分别到USB eth1和Windows NIC的MAC地址(组播MAC地址也被替换成了Windows NIC的MAC),IP地址不做替换,所以没有路由功能,报文止步于Windows NIC。其缺点是阻碍了原始数据包的快速通过。

    2) Windows Tools
    Netmon: uses LWF (Light-Weight Filter) NDIS driver
    Wireshark: uses NPcap

    Windows 10上,Netmon可以抓取所有TEE后的报文,而Wireshark不可以,必须要用SocketTool或者其它工具监听对应的IP和port,才能够抓到相应的报文。

    8 Abbreviations
    DSA:Linux Distributed Switch Architecture
    gsw:Mediatek Gigabit Switch
    IOS: Cisco Internetwork Operating System, Apple iOS got Cisco IOS authorization
    IPQ:Internet Processor Qualcomm,采用Snapdragon ARM架构的路由器SoC
    LuCI: OpenWRT Lua Configuration Interface
    MIPS 24KEc:K表示1000,E表示expanded-precision,也即是具有DSP指令,c表示core
    mtk_esw:Ralink Fast Ethernet Embedded Switch
    NAPT:Network Address and Port Translation
    nftables: netfilter tables
    OpenWRT:Wireless RouTer
    promiscuous: sniff mode
    QCA:Qualcomm Atheros,一般都是MIPS架构
    RTMP: Ralink Technology Miniport
    vif:Linux WLAN Virtual Interface

  • 相关阅读:
    Hystrix 服务熔断
    多线程知识汇总
    在c++中cout相比于printf更加方便!!!数据类型:实型、字符型、转义字符、字符串型、布尔数据类型、数据的输入。
    Window 脚本 - Powershell 使用
    PMP_第2章章节试题
    日语基础复习 Day 16
    GZ038 物联网应用开发赛题第2套
    2021年全国职业院校技能大赛-ruijie网络模块-命令解析-脚本配置
    vue3后台管理框架之集成sass
    计算机视觉代码学习
  • 原文地址:https://blog.csdn.net/zoosenpin/article/details/125569513