----------原創不易,歡迎點贊收藏。廣交嵌入式開發的朋友,討論技術和產品-------------
今天發一篇五年前的文章,不調單板。對以太網和交換片的較多理解,對系統級的優化。
大部分的網絡設備,都由多種單板組成,類似刀片服務器產品。一片單板基本上是一個獨立的系統,能夠處理不同的業務。有些單板的業務流要直接對外,其帶的IP/MAC地址要直接發送到業務網絡或者公網中。如圖1,該設備由四個單板組成,一個主控單板MPU,三個業務單板FXS。每個FXS要對外收發數據報文,那么每個業務單板要配置不同的IP和MAC地址
(圖1)
圖2是每個業務單板FXS的IP和MAC地址都對外,主控板不參與業務單板的IP/MAC替換,這是傳統的做法。
(圖2)
- 隨著業務單板的增加,所需要的IP和MAC地址會大量增加,對業務配置和網絡規劃帶來了挑戰,也增大了維護的難度。如果能夠一個設備,只需要配置一個對外的IP和MAC地址,將大大簡化產品的使用和維護難度。要實現這個功能,一般由設備的主控單板來對業務單板的報文進行IP和MAC地址替換,將業務單板的源IP和源MAC地址替換成設備對外的IP和MAC地址。
S1,軟件從網口收到業務單板發來的報文;
S2,將報文中的源IP替換成自己對外的IP;
S3,將報文中的源MAC替換成自己對外的MAC;
S4,將報文發送到外部網絡
主控板CPU對每個報文進行處理,隨著業務流量的增大,主控CPU的負荷大大增加,甚至可能處理不過來而丟包,常見的做法上用iptables等第三方軟件進行網絡地址轉換(NAT),圖3所示。
(圖3)
本文提出一種基于三層交換芯片,能迅速收斂IP和MAC地址,同時業務報文不經過設備主控板CPU,不增加主控板CPU負荷的方法。
(圖4)
如上圖4所示,交換芯片BCM 53347為一款三層交換芯片。其中,P1~P3接FXS單板網口,P0接主控板網口,P4接對外網口RJ45。
FXS1~FXS3每個單板的對外網口ETH0,配置帶VLAN TAG的子接口。FXS1的VLAN=100,FXS2的VLAN=200,FXS3的VLAN=300。同時配置每個FXS子接口的IP地址為主控板對外的IP 10.8.8.1,MAC地址也配置成主控板對外的MAC地址MAC0。
配置BCM53348 P1支持VLAN TAG 100/1000, P2支持VLAN TAG 200/1000, P3支持 VLAN TAG 300/1000。
新增FXS1子接口 eth0.1000 192.168.1.1 私有MAC1
新增FXS2子接口 eth0.1000 192.168.1.2 私有MAC2
新增FXS3子接口 eth0.1000 192.168.1.3 私有MAC3
新增MPU子接口 eth0.1000 192.168.1.254 私有MAC0
以上私有IP用于主控板MPU與每個FXS之間的內部通訊,IP和MAC地址不會對外。
關鍵配置P4端口發送屬性
對于P0/P1/P2/P3內部交換過來報文,剝離VLAN TAG并且發送到外部網絡。那么FXS1, FXS2, FXS3的報文源IP/MAC地址都變成10.8.8.1/MAC0,與主控板對外的MAC一致,如圖5
端口P4的接收轉發屬性配置
從P4外部網絡進來的報文,只有特定的RTP業務流才能轉發到FXS1 - FXS3,其他協議的報文全部轉發給主控板MPU。RTP報文上屬于UDP協議族,其自帶UDP端口號,規定FXS1所屬的UDP端口號10000 - 12000,FXS2的UDP端口號范圍12001 - 14000,FXS3的UDP端口號范圍14001 - 16000。P4端口檢測到從外部網絡接收的報文,如果是UDP報文,并且判斷端口號范圍,來確定報文轉發到P1 - P3哪個端。轉發給P1端口報文增加VLAN為100的tag,轉發給P1端口報文增加VLAN為200的tag,轉發給P3端口報文增加VLAN為300的tag。這樣不同的FXS就可以成功接收外部RTP報文。如圖6
主控板MPU與每個FXS單板之間采用私有IP通訊。如果FXS要對外發送報文,必須知道目的IP所對應的MAC地址,一般這是由ARP協議來實現。但是P4端口只能轉發UDP RTP報文給FXS,所以FXS發出去的ARP報文,是收不到ARP響應的。這樣,FXS發送私有命令給MPU,讓MPU發送ARP到外部網絡,獲取MAC成功后,MPU將MAC地址通過私有協議發送給FXS。如圖7
(圖5)
(圖6)
(圖7)