SDN網(wǎng)絡與傳統(tǒng)網(wǎng)絡對比
SDN相比傳統(tǒng)網(wǎng)絡具有很多優(yōu)點,比如控制與轉發(fā)分離,這種思想打破了傳統(tǒng)設備供應商的綁定,提高了新業(yè)務的部署速度,可以從整個網(wǎng)絡層面對流量進行優(yōu)化等等。在SDN網(wǎng)絡中,不管是開發(fā)人員還是用戶,都可以更多的發(fā)揮自己的想象,而不用再受各種RFC的強力約束。
一、傳統(tǒng)網(wǎng)絡發(fā)展及特點
從1969年ARPA NET運行算起,傳統(tǒng)網(wǎng)絡已經(jīng)發(fā)展了半個世紀,網(wǎng)絡按照OSI的模型分成7層,通常所見最多的是二層和三層。二層就是二層交換機構成的網(wǎng)絡,在這個網(wǎng)絡中交換機學習mac地址和端口的對應關系,通過匹配二層報文的mac地址決定如何轉發(fā)。一般在一個二層網(wǎng)絡中,由于廣播風暴的原因,管理的設備不應超過百臺,否則會導致網(wǎng)路不穩(wěn)定和網(wǎng)絡性能的下降。三層就是由路由設備連接不同網(wǎng)段構成的網(wǎng)絡,跨網(wǎng)段的通信都需要路由,而路由器就通過記錄IP地址和端口的對應關系連通不同的網(wǎng)段。不管是IPv4還是IPv6,我們能夠在世界范圍內使用internet,底層都是由二層網(wǎng)絡和三層網(wǎng)絡構成的堅實基礎。
傳統(tǒng)網(wǎng)絡從一開始就是一個分布式的網(wǎng)絡,沒有中心的控制節(jié)點,網(wǎng)路中的各個設備之間通過口口相傳的方式學習網(wǎng)絡的可達信息,由每臺設備自己決定要如何轉發(fā),這直接導致了沒有整體觀念,不能從整個網(wǎng)絡的角度對流量進行調控。由于是口口相傳,就必須使用大家都會的語言,這就是網(wǎng)絡協(xié)議。各個設備供應商不能自己隨便開發(fā)協(xié)議,否則不同廠商各執(zhí)己見,網(wǎng)絡還是不通。這樣全球性的組織就誕生了,比如IETF,而RFC就是網(wǎng)絡協(xié)議的法律,相當于國際法,各個設備供應商遵從國際法行事,就基本保證了整個網(wǎng)絡世界的正常運行。設備提供商就相當于不同的國家,與現(xiàn)實中一樣,法律為了適應時代的發(fā)展也在不斷的修訂補充,而各個國家基于自己利益的考慮,不斷搶占對自己更有利的山頭,想盡辦法規(guī)避其他國家主導的法律對自己的約束,傳統(tǒng)網(wǎng)絡就在博弈中不斷前進。這種由通用法律約束的發(fā)展方式,就限制了網(wǎng)絡運營商新業(yè)務的部署速度。網(wǎng)絡運營商負責對用戶提供網(wǎng)絡接入功能,用戶的需求千差萬別,一旦原有基礎網(wǎng)絡無法滿足新需求,就需要上升到協(xié)議制定修改的層面,各個設備提供商開始提出各種方案交由IETF裁決,形成新的法律,再由設備提供商實現(xiàn),重新升級基礎網(wǎng)絡內的所有設備以支持新業(yè)務的部署。這個過程想想就覺得漫長,一般都要經(jīng)過至少半年,甚至幾年的時間。
從傳統(tǒng)網(wǎng)絡的部署方式能看出來,傳統(tǒng)網(wǎng)絡新業(yè)務部署是補丁式的,因為網(wǎng)絡中新老設備并存,新業(yè)務必須兼容老業(yè)務,新的協(xié)議基本上都是在原有協(xié)議上進行擴展,這就大大限制的設備提供商的想象力。
傳統(tǒng)網(wǎng)絡的協(xié)議為了適應各種不同的需求場景,發(fā)展也越來越復雜,想必有傳統(tǒng)網(wǎng)絡開發(fā)和維護經(jīng)驗的同學都有深刻體會吧。單說部署一個傳統(tǒng)的網(wǎng)絡,就涉及到ARP、STP、OSPF、ISIS、RIP、BGP、組播等多種協(xié)議,如果涉及VPN,又有L2VPN、L3VPN,其中又會有VPLS、PWE3、VLL、MPLS、LDP、BGP VPN擴展,而部署方式又有Martini、Kompella、Option A、Option B、Option C、跨域C&C.....,是不是看著就暈?并且由于法律的不完善,RFC中常常存在一些沒有明確的地方,這導致了各提供商的實現(xiàn)中存在些許差異,而如果你將要部署的網(wǎng)路中存在多個提供商的設備,那么這些差異很可能在將來某個時候爆發(fā)網(wǎng)絡問題。傳統(tǒng)網(wǎng)絡的運維工程師都是經(jīng)過長年累月的學習和經(jīng)驗積累成長起來的。
雖然數(shù)量眾多并且復雜,但是傳統(tǒng)網(wǎng)絡協(xié)議也有他的優(yōu)點,協(xié)議本身做到了和設備提供商無關,如果理解了一個協(xié)議,那么運維工程師之間交流不會有問題,運用此協(xié)議構建的網(wǎng)絡都可以維護。各設備提供商的最大的差異主要集中在操作界面上。
二、SDN網(wǎng)絡的發(fā)展及特點
當前的SDN網(wǎng)絡一般都是如下形式:有一個控制器(或集群),他負責收集整個網(wǎng)絡的拓撲、流量等信息,計算流量轉發(fā)路徑,通過openflow協(xié)議將轉發(fā)表項下發(fā)給交換機,交換機按照表項執(zhí)行轉發(fā)動作。和控制器對應,執(zhí)行轉發(fā)動作的交換機一般稱為轉發(fā)器??刂泼鎻膫鹘y(tǒng)網(wǎng)絡的單個設備上剝離,集中到了控制器上,轉發(fā)面由轉發(fā)器構成。
網(wǎng)絡部署有兩種形式:一種是underlay的網(wǎng)絡,這種網(wǎng)絡中,所有的轉發(fā)行為都由控制器決定,控制器通過OpenFlow協(xié)議或者定制的BGP協(xié)議將轉發(fā)表項下發(fā)給轉發(fā)器,轉發(fā)器僅僅執(zhí)行動作,沒有單獨的控制面。另一種是overlay的網(wǎng)絡,這種網(wǎng)絡的轉發(fā)器一般都是傳統(tǒng)設備,不支持OpenFlow,或者私有定制協(xié)議不能部署。這時就要用到隧道技術,基礎網(wǎng)絡還是傳統(tǒng)網(wǎng)絡形式,通過路由協(xié)議打通各個節(jié)點,但是在服務器接入點,采用隧道技術將數(shù)據(jù)報文進行封裝或者解封裝。對傳統(tǒng)網(wǎng)絡來說見到的就是普通的數(shù)據(jù)報文,轉發(fā)即可。隧道技術實際上就是報文的馬甲,迷惑網(wǎng)絡設備,讓設備以為是自己人,但是實際上報文的心是虛擬化的心?,F(xiàn)在一般采用VxLan、GRE、NVGRE等隧道技術。而這些也是新增的協(xié)議,也需要升級現(xiàn)有網(wǎng)絡設備才能支持。穿馬甲雖然能夠在不進行大的改造的情況下增加新的功能,但無疑會降低網(wǎng)路性能,underlay方式一定是SDN網(wǎng)絡的終極形式。
SDN網(wǎng)絡的控制面,不再是口口相傳,而是集中智能,從更高的層次看整個網(wǎng)絡,通過軟件來控制網(wǎng)絡行為。這里的軟件已經(jīng)不再由設備供應商綁定設備提供,而是用戶可以自己實現(xiàn)。SDN網(wǎng)絡唯一標準化的是控制器與轉發(fā)器的通信接口,就是OpenFlow,不是傳統(tǒng)意義上的網(wǎng)絡控制協(xié)議,只是一個接口,控制器和轉發(fā)器按接口實現(xiàn)即可,至于控制器要如何控制,轉發(fā)器要如何轉發(fā),都是一片空白。SDN打開了一扇通往奇境的大門。
ovs已經(jīng)成為轉發(fā)器實現(xiàn)事實上的標準,而控制器則是百家爭鳴,有ODL、ONOS、AC、Ryu等。各種控制器的實現(xiàn)也有不小的差異,控制原理也都不同,這就對運維人員帶來了挑戰(zhàn)。在傳統(tǒng)網(wǎng)絡時代懂得了協(xié)議就懂得了網(wǎng)絡,而在SDN時代,控制器才是網(wǎng)絡的核心,只有弄懂控制器實現(xiàn)原理,才能懂得網(wǎng)絡。
在現(xiàn)階段,OpenFlow作為接口,網(wǎng)絡上傳遞的報文還是按照傳統(tǒng)網(wǎng)絡時代定義的格式進行封裝,而控制器現(xiàn)階段能做的也僅是對報文封裝的字段進行修改。而下一階段,當P4或者華為的POF作為接口時,網(wǎng)絡將徹底變革,用戶不僅可以控制轉發(fā)行為,還能按需定義報文封裝格式,而不再局限于mac、ip等等。雖然更靈活,但是各個局域網(wǎng)絡的實現(xiàn)可能都不相同,對網(wǎng)絡運維人員來說可能會更困難,換一個網(wǎng)絡可能就需要學習一套新的規(guī)則。但是這也真正體現(xiàn)軟件定義的魅力,控制器的控制形式勢必會更加多種多樣,網(wǎng)絡也會進入一個新的輪回。
三、從ping的流程看傳統(tǒng)網(wǎng)絡與SDN網(wǎng)絡:
1.傳統(tǒng)網(wǎng)絡
如上圖拓撲,網(wǎng)絡中間有三臺設備構成基礎網(wǎng)絡,兩個客戶端屬于不同的網(wǎng)絡,兩個客戶端要互訪
基礎網(wǎng)絡構建步驟如下:
1)由于客戶端處于不同網(wǎng)段,因此需要路由設備,可以用CE2作為路由設備,或者CE1、2、3均作為路由設備,這里將三臺均作為路由設備,CE1、2、3之間三層通信
2)CE1作為CLIENT1的網(wǎng)關設備;CE3作為CLIENT2的網(wǎng)關設備,網(wǎng)關代答ARP
3)CE1、CE2、CE3之間通過靜態(tài)路由或者路由協(xié)議學習 192.168.10 和192.168.20 網(wǎng)段的路由
路由通路的建立主要關注兩個字段:路由前綴和下一跳。在傳統(tǒng)路由器上,通過命令行可以很直觀的看到各種信息之間的關聯(lián)
- [~CE1]display ip interface brief
 - *down: administratively down
 - !down: FIB overload down
 - (l): loopback
 - (s): spoofing
 - (d): Dampening Suppressed
 - The number of Physical UP interfaces: 4
 - The number of Physical DOWN interfaces: 0
 - The number of Protocol UP interfaces: 3
 - The number of Protocol DOWN interfaces: 1
 - Interface IP Address/Mask Physical Protocol VPN
 - GE1/0/0 192.168.10.1/24 up up -
 - GE1/0/1 10.1.1.1/24 up up -
 - MEth0/0/0 unassigned up down -
 - NULL0 unassigned up up(s) -
 
上面是典型的接口信息表顯示,可以看到接口以及接口IP、狀態(tài)信息Shell
- [~CE1]display ip routing-table
 - Proto: Protocol Pre: Preference
 - Route Flags: R - relay, D - download to fib
 - ------------------------------------------------------------------------------
 - Routing Table : _public_
 - Destinations : 11 Routes : 11
 - Destination/Mask Proto Pre Cost Flags NextHop Interface
 - 10.1.1.0/24 Direct 0 0 D 10.1.1.1 GE1/0/1
 - 10.1.1.1/32 Direct 0 0 D 127.0.0.1 GE1/0/1
 - 10.1.1.255/32 Direct 0 0 D 127.0.0.1 GE1/0/1
 - 127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
 - 127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0
 - 127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
 - 192.168.10.0/24 Direct 0 0 D 192.168.10.1 GE1/0/0
 - 192.168.10.1/32 Direct 0 0 D 127.0.0.1 GE1/0/0
 - 192.168.10.255/32 Direct 0 0 D 127.0.0.1 GE1/0/0
 - 192.168.20.0/24 Static 60 0 D 10.1.1.1 GE1/0/1
 - 255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
 
上面是典型的路由表結構,從路由表中可以看到路由匹配項及下一跳、出接口信息。要構建192.168.10.2 到192.168.20.2的通路,實際上需要讓CE1知道20網(wǎng)段的下一跳是10.1.1.2,CE2要知道20網(wǎng)段的下一跳是20.1.1.2,這樣單向通路就建立起來了,再建反向通路即可。
傳統(tǒng)網(wǎng)絡的打通,需要在途經(jīng)的每一臺設備上進行配置,需要自己規(guī)劃整個網(wǎng)絡的拓撲、端口的IP地址、路由協(xié)議等等,在網(wǎng)絡構建和維護過程中都需要人工持續(xù)不斷的干預。雖然如此,但是傳統(tǒng)網(wǎng)絡中仍然有一定的智能,路由協(xié)議在配置好后,一定程度上不再需要做過多的干預。比如CE1、2、3組成的骨干網(wǎng)在配置好動態(tài)協(xié)議后,后續(xù)再增加同網(wǎng)段的新客戶端,是不需要修改配置的。但是如果要部署新業(yè)務,如VPN等,就需要對整網(wǎng)配置進行修改。在傳統(tǒng)網(wǎng)絡中,ping的處理流程如下:
1)在CLIENT1上ping CLIENT2
2)CLIENT1在通過ARP獲取到網(wǎng)關MAC后,構造ICMP request報文發(fā)往CE1
3)在CE1上解析ICMP報文,通過目的IP地址在路由表查找匹配表項,找到出接口發(fā)往CE2
4)CE2做同樣的事情,將報文發(fā)往CE3,CE3發(fā)往CLIENT2
5)CLIENT2構造應答報文發(fā)往,目的IP填192.168.10.2,發(fā)往CE3,通過路由查找過程,報文到達CLIENT1在這個過程中,接收->查找->轉發(fā)的一系列動作是設備的內部實現(xiàn),對用戶來說是黑盒,實際上“查找”就是IP的在路由表中的匹配過程。
2.SDN網(wǎng)絡
以純underlay的SDN網(wǎng)絡舉例,如下圖所示拓撲
控制器通過ovs上報的packetin消息觸發(fā)處理流程,計算好路徑后,通過openflow下發(fā)給所有轉發(fā)器,打通鏈路,主機之間能夠互通。轉發(fā)器上沒有控制面,之間也沒有交互,轉發(fā)器最基本動作就是對收到的報文上報控制器,一切的邏輯行為都由控制器負責。
在轉發(fā)器上,需要把物理口綁定到OVS上,OVS才能進行管理,所以在OVS上查看接口信息如下:
- Shell
 - root@ck:~# ovs-vsctl show
 - c0e6f272-485a-4e30-b1ed-518b0ade9cc7
 - Bridge "s2"
 - Controller "ptcp:6635"
 - Controller "tcp:127.0.0.1:6633"
 - is_connected: true
 - fail_mode: secure
 - Port "s2"
 - Interface "s2"
 - type: internal
 - Port "s2-eth3"
 - Interface "s2-eth3"
 - Port "s2-eth1"
 - Interface "s2-eth1"
 - Port "s2-eth2"
 - Interface "s2-eth2"
 
- Shell
 - 123root@ck:~# ovs-ofctl dump-flows s1
 - NXST_FLOW reply (xid=0x4):
 - cookie=0x0, duration=383.313s, table=0, n_packets=32, n_bytes=2544, idle_age=373, priority=0 actions=CONTROLLER:65535
 
這條流表是用來將報文上送控制器的。在主機v1之間ping v2后,查看流表信息:
- Shell
 - root@ck:~# ovs-ofctl dump-flows s1
 - NXST_FLOW reply (xid=0x4):
 - cookie=0x0, duration=2.876s, table=0, n_packets=4, n_bytes=336, idle_age=0, priority=1,in_port=2,dl_dst=00:00:00:00:00:01 actions=output:1
 - cookie=0x0, duration=2.875s, table=0, n_packets=3, n_bytes=294, idle_age=0, priority=1,in_port=1,dl_dst=00:00:00:00:00:03 actions=output:2
 - cookie=0x0, duration=516.728s, table=0, n_packets=35, n_bytes=2726, idle_age=2, priority=0 actions=CONTROLLER:65535
 
多了兩條流表,第一條是匹配從2口進入ovs的報文,如果報文的目的mac是v2,從ovs 1口出;第二條是匹配從1口進入ovs的報文,如果報文的目的mac是v1,從ovs 2口出。可以看到這里的port已經(jīng)變成了數(shù)字,要查看編號和名字的對應關系,需要通過其他的表:
- Shell
 - root@ck:~# ovs-ofctl show s1
 - OFPT_FEATURES_REPLY (xid=0x2): dpid:0000000000000001
 - n_tables:254, n_buffers:256
 - 1(s1-eth1): addr:0e:c0:36:94:3c:be
 - config: 0
 - state: 0
 - current: 10GB-FD COPPER
 - speed: 10000 Mbps now, 0 Mbps max
 - 2(s1-eth2): addr:1a:a0:81:52:ec:b5
 - config: 0
 - state: 0
 - current: 10GB-FD COPPER
 - speed: 10000 Mbps now, 0 Mbps max
 - LOCAL(s1): addr:92:0d:a5:20:e0:4c
 - config: PORT_DOWN
 - state: LINK_DOWN
 - speed: 0 Mbps now, 0 Mbps max
 
可以看到在SDN網(wǎng)絡中的匹配和動作行為比傳統(tǒng)網(wǎng)絡要豐富的多,不僅僅是匹配前綴,轉發(fā)下一跳那么簡單了。但是SDN網(wǎng)絡設備的用戶界面信息表現(xiàn)不直觀,相比傳統(tǒng)網(wǎng)絡還有很大的提升空間。在此網(wǎng)絡中,ping的處理流程如下:
1) 在V1上ping V2
2) V1通過ARP獲取請求網(wǎng)關MAC
3) ARP報文在OVS1上匹配流表,上送控制器
4) 控制器進行ARP代答,構造ARP應答報文通過OVS1發(fā)給V1
5) V1在獲取到mac后,構造ICMP request報文發(fā)往V2
6) OVS1在收到ICMP報文后,依然不知道如何處理,繼續(xù)上送控制器
7) 控制器根據(jù)報文信息,計算轉發(fā)路徑,向轉發(fā)路徑上的所有轉發(fā)器下發(fā)流表
8) 控制器將首包通過OVS1發(fā)給OVS2,由于OVS2、OVS3上已經(jīng)有可以匹配的流表,因此報文會一直送到V2上
9) V2的應答流程如上類似,差別在于反向的流表已經(jīng)提前下發(fā),V2的應答報文不會再上送控制器在SDN網(wǎng)絡中,對于控制器如何計算、下發(fā)什么樣的流表是沒有統(tǒng)一標準的,只要能正確處理主機之間的報文即可。在上面的例子中,所實現(xiàn)的控制器與通常的不同,由于僅存在兩臺主機,因此對于三層報文,沒有通過匹配IP的方式進行轉發(fā),ARP的應答也并不是應答的網(wǎng)關mac,而是直接將目的主機的mac進行了應答,因此,雖然是三層互通,但是通過控制器,也可以做到流表直接匹配mac轉發(fā),而不需要IP。從這也可以看到SDN的靈活性。
四、總結
傳統(tǒng)網(wǎng)絡已經(jīng)經(jīng)過半個世紀的發(fā)展,凝聚了無數(shù)人的智慧和心血,但是由于天生的缺陷,導致在很多場景上心有余而力不足,并且越來越復雜。SDN雖然誕生沒多久,但是已經(jīng)表現(xiàn)出非常強的生命力。傳統(tǒng)網(wǎng)絡在安全、可靠性、可維護性和性能上還有很大的優(yōu)勢,但是隨著SDN相關設備的發(fā)展,這種優(yōu)勢必然會越來越弱,而SDN依靠自己的優(yōu)勢,一定會不斷占領傳統(tǒng)網(wǎng)絡的領地。而在SDN內部,overlay網(wǎng)絡相比underlay網(wǎng)絡,簡化不足,復雜有余,在傳統(tǒng)網(wǎng)絡的基礎上疊加虛擬化,比傳統(tǒng)網(wǎng)絡更復雜。overlay之于underlay,就好比ipv4之于ipv6,要從根本上解決問題,underlay必然是最終的選擇。
















 
 
 



 
 
 
 