当前位置:网站首页>路由器开发知识汇总
路由器开发知识汇总
2022-07-07 08:23:00 【SEP5010】
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
边栏推荐
- 【华为机试真题详解】高矮个子排队
- Chris Lattner, père de llvm: Pourquoi reconstruire le logiciel d'infrastructure ai
- [email protected]能帮助我们快速拿到日志对象
- Study summary of postgraduate entrance examination in September
- Download Text, pictures and ab packages used by unitywebrequest Foundation
- 施努卡:机器人视觉抓取工作原理 机器视觉抓取
- A small problem of bit field and symbol expansion
- leetcode-304:二维区域和检索 - 矩阵不可变
- LLVM之父Chris Lattner:為什麼我們要重建AI基礎設施軟件
- Inno setup packaging and signing Guide
猜你喜欢
Serial communication relay Modbus communication host computer debugging software tool project development case
The story of Plato and his three disciples: how to find happiness? How to find the ideal partner?
【acwing】786. 第k个数
P2788 数学1(math1)- 加减算式
Leetcode-304: two dimensional area and retrieval - matrix immutable
XML configuration file parsing and modeling
555电路详解
Weekly recommended short videos: what are the functions of L2 that we often use in daily life?
原型与原型链
P1031 [NOIP2002 提高组] 均分纸牌
随机推荐
Guid primary key
1323:【例6.5】活动选择
Easyexcel read write simple to use
HAL库配置通用定时器TIM触发ADC采样,然后DMA搬运到内存空间。
Programming features of ISP, IAP, ICP, JTAG and SWD
对存储过程进行加密和解密(SQL 2008/SQL 2012)
[sword finger offer] 42 Stack push in and pop-up sequence
[higherhrnet] higherhrnet detailed heat map regression code of higherhrnet
PDF文档签名指南
IDA中常见快捷键
How embedded engineers improve work efficiency
Chris LATTNER, the father of llvm: why should we rebuild AI infrastructure software
SolidWorks工程图中添加中心线和中心符号线的办法
【华为机试真题详解】高矮个子排队
求最大公约数与最小公倍数(C语言)
Why is the reflection efficiency low?
IPv4套接字地址结构
leetcode-560:和为 K 的子数组
Postman interface test III
Prototype object in ES6