当前位置:网站首页>路由器开发知识汇总
路由器开发知识汇总
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
边栏推荐
- Postman interface test VII
- Study summary of postgraduate entrance examination in September
- Inno setup packaging and signing Guide
- 宁愿把简单的问题说一百遍,也不把复杂的问题做一遍
- LLVM之父Chris Lattner:为什么我们要重建AI基础设施软件
- Leetcode-304: two dimensional area and retrieval - matrix immutable
- openinstall与虎扑达成合作,挖掘体育文化产业数据价值
- Factorial implementation of large integer classes
- High number_ Chapter 1 space analytic geometry and vector algebra_ Quantity product of vectors
- Review of the losers in the postgraduate entrance examination
猜你喜欢
Chris LATTNER, the father of llvm: why should we rebuild AI infrastructure software
The method of word automatically generating directory
[STM32] solution to the problem that SWD cannot recognize devices after STM32 burning program
Review of the losers in the postgraduate entrance examination
原型与原型链
Programming features of ISP, IAP, ICP, JTAG and SWD
P2788 数学1(math1)- 加减算式
STM32 ADC和DMA
Programming features of ISP, IAP, ICP, JTAG and SWD
ArcGIS operation: converting DWG data to SHP data
随机推荐
Easyexcel read write simple to use
5个chrome简单实用的日常开发功能详解,赶快解锁让你提升更多效率!
对word2vec的一些浅层理解
Appx代碼簽名指南
Kotlin realizes wechat interface switching (fragment exercise)
搭建物联网硬件通信技术几种方案
优雅的 Controller 层代码
Yarn的基础介绍以及job的提交流程
The mobile terminal automatically adjusts the page content and font size by setting rem
[email protected]能帮助我们快速拿到日志对象
IIC基本知识
Download Text, pictures and ab packages used by unitywebrequest Foundation
Guid主键
ThreadLocal会用可不够
C logging method
Leetcode-304: two dimensional area and retrieval - matrix immutable
XML configuration file parsing and modeling
table宽度比tbody宽度大4px
The width of table is 4PX larger than that of tbody
Word自动生成目录的方法