网络工程与规划 第08章RYU交换机课件_第1页
网络工程与规划 第08章RYU交换机课件_第2页
网络工程与规划 第08章RYU交换机课件_第3页
网络工程与规划 第08章RYU交换机课件_第4页
网络工程与规划 第08章RYU交换机课件_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

RYU交换机南华大学网络工程系RYU交换机南华大学网络工程系1简单功能交换机自学习,生成交换表接受帧,若该帧目的MAC地址在交换表中,按该表指定的接口转发否则,Flooding.简单功能交换机自学习,生成交换表2OpenFlow交换机OpenFlow交換机接受來自于controller的指令並达到以下功能:接收帧,修改帧,按流表转发。接收到的帧转发给Controller(Packet-In)

接收到來自Controller的帧转发到指定的接口(Packet-Out)

OpenFlow交换机OpenFlow交換机接受來自于c3OpenFlow交换机数据转发过程1.初始状态Flowtable为空白。hostA接到接口1,hostB接到接口4,hostC接到接口3

OpenFlow交换机数据转发过程1.初始状态42.hostAhostBPacket-In:Packet-Out:

in-port:1action:OUTPUT:Flooding

eth-dst:hostB

eth-src:hostA

2.hostAhostB53.hostB

hostAPacket-In:Packet-Out:

in-port:4action:OUTPUT:port1

eth-dst:hostA

eth-src:hostB

3.hostBhostA64.hostA

hostB

Packet-In:Packet-Out:

in-port:1action:OUTPUT:port4

eth-dst:hostB

eth-src:hostA

4.hostAhostB7RYU交换机源码分析ryu/app/simple_switch_13.py1.类定义和初始化

RYU交换机源码分析ryu/app/simple_switc82.事件处理(Eventhandler)對於Ryu來說,接受到任何一個OpenFlow訊息即會產生一個相對應的事件

事件管理(EventHandler)是一個擁有事件物件(EventObject)做為參數,並且使用``ryu.controller.handler.set_ev_cls``修飾(Decorator)的函數。

set_ev_cls則指定事件類別得以接受訊息和交換器狀態作為參數。

事件類別名稱的規則為ryu.controller.ofp_event.EventOFP+<OpenFlow訊息名稱>,例如:

在Packet-In訊息的狀態下的事件名稱為EventOFPPacketIn。對於狀態來說,請指定下面列表的其中一項。

2.事件处理(Eventhandler)92.1新增Table-missFlowEntryOpenFlow交換器的握手協議完成之後,新增Table-missFlowEntry到Flowtable中為接收Packet-In訊息做準備。具體來說,接收到Switchfeatures(Featuresreply)訊息後就會新增Table-missFlowEntry。

2.1新增Table-missFlowEntry10DataPath主要属性和方法方法:send_msg(msg)属性:

DataPath主要属性和方法11新增Table-missFlowEntry

Table-missFlowEntry的優先權為0即最低的優先權,而且此Entry可以match所有的封包。這個Entry的Instruction通常指定為outputaction,並且輸出的連接埠將指向Controller。因此當封包沒有match任何一個普通FlowEntry時,則觸發Packet-In。

新增Table-missFlowEntry12Packet-in訊息為了接收處理未知目的地的封包,需要Packet-In事件管理OFPPacketIn類別經常使用的屬性如下列所示

Packet-in訊息13更新MAC位址表

更新MAC位址表

14判斷轉送封包的連接埠目的MAC位址若存在于MAC位址表,則判斷該連接埠的號碼為輸出。反之若不存在于MAC位

址表則OUTPUTaction類別的實體並生成flooding(OFPP_FLOOD)給目的連接埠使用

判斷轉送封包的連接埠15新增FlowEntry的處理ApplyActions是用來設定那些必須立即執行的action所使用

新增FlowEntry的處理16DatapathOpenFlow交換器以及Flowtable的操作都是透過Datapath類別的實體來進行。在一般的情況下,會由事件傳遞給事件管理的訊息中取得,例如:Packet-In訊息。cookie(0)Controller所設定儲存的資料,在Entry的更新或者刪除的時所需要使用的資料都會放

在這邊,當做過濾器使用,而且不可以作為封包處理的參數。cookie_mask(0)Entry的更新或刪除時,若是該值為非零,則做為指定Entry的cookie使用。table_id(0)指定FlowEntry的TableID。

OFPFlowMod類別的建構子參數

DatapathOFPFlowMod類別的建構子參數

17对流表的操作:对流表的操作:18idle_timeout(0)FlowEntry的有效期限,以秒為單位。FlowEntry如果未被參照而且超過了指定的時間之後,該FlowEntry將會被刪除。如果FlowEntry有被參照,則超過時間之後會重新歸零計算。

在FlowEntry被刪除之後就會發出FlowRemoved訊息通知Controller。hard_timeout(0)FlowEntry的有效期限,以秒為單位。跟idle_timeout不同的地方是,hard_timeout在超過時限後並不會重新歸零計算。也就是說跟FlowEntry與有沒有被參照無關,只要超過指定的時間就會被刪除。

跟idle_timeout一樣,當FlowEntry被刪除時,FlowRemoved訊息將會被發送來通知

Controller。priority(0)FlowEntry的優先權。數值越大表示權限越高。

idle_timeout(0)19buffer_id(ofproto_v1_3.OFP_NO_BUFFER)指定OpenFlow交換器上用來儲存封包的緩衝區ID。緩衝區ID會放在通知Controller

的Packet-In訊息中,並且和接下來的OFPP_TABLE所指定的輸出埠和FlowMod訊息處理時可以被參照。當發送的命令訊息為OFPFC_DELETE或OFPFC_DELETE_STRICT時,會忽略本數值。

如果不指定緩衝區ID的時候,必須使用OFP_NO_BUFFER作為其設定值。out_port(0)OFPFC_DELETE和OFPFC_DELETE_STRICT命令用來指定輸出埠的參數。命令為OFPFC_ADD、

OFPFC_MODIFY、OFPFC_MODIFY_STRICT時則可以忽略。out_group(0)跟out_port一樣,作為一個輸出埠,但是轉到特定的group。

若要使其無效,則指定為OFPG_ANY。match(None)設定match。instructions([])設定instruction。

buffer_id(ofproto_v1_3.OFP_NO20flags(0)下列的flags可以被組合使用

flags(0)21轉送封包在MAC位址表中找尋目的MAC位址,若是有找到則發送Packet-Out訊息,並且轉送封包。

轉送封包22執行Mininet

1.启动RYU執行Mininet1.启动RYU23配置网卡配置网卡24启动xmingPutty登录大写X启动xming大写X25网络工程与规划第08章RYU交换机课件26使用mn指令啟動Mininet環境。

要建構的是host3台,交換器1台的簡單環境

使用mn指令啟動Mininet環境。

要建構的是h27查看OpenvSwitch的狀態

查看OpenvSwitch的狀態

28設定OpenFlow的版本為1.3

檢查空白的Flowtable

設定OpenFlow的版本為1.329執行Ryu應用程式

執行Ryu應用程式

30現在OVS已經連接,handshake已經執行完畢,Table-missFlowEntry已經加入,正處於等待Packet-In的狀態。確認Table-missFlowEntry已經被加入優先權為0,沒有matcth,action為CONTROLLER,重送的資料大小為65535(0xffff=OFPCML_NO_BUFFER)

現在OVS已經連接,handshake已經執行完畢,T31確認操作

從host1向host2發送ping打开嗅探器

確認操作

從host1向host2發送ping32從host1向host2發送ping。1.ARPrequest此時host1並不知道host2的MAC位址,原則上ICMPechorequest之前的ARPrequest是用廣播的方式發送。這樣的廣播方式會讓host2和host3都同樣接受到訊息。2.ARPreplyhost2使用ARPreply回覆host1要求。3.ICMPechorequest現在host1知道了host2的MAC位址,因此發送echorequest給host2。4.ICMPechoreplyhost2此時也知道了host1的MAC位址,因此發送echoreply給host1。

從host1向host2發送ping。33在終端機執行mn命令,並從host1發送ping到host2

在終端機執行mn命令,並從host1發送ping34确认流表确认流表35Table-missFlowEntry以外,另外加入兩個優先權為1的FlowEntry。1.接收埠(in_port):2,目的MAC位址(dl_dst):host1!actions:host1轉送2.接收埠(in_port):1,目的MAC位址(dl_dst):host2!actions:host2轉送(1)的FlowEntry會被match2次(n_packets)、(2)的FlowEntry則被match1次。因為(1)用來讓host

2向host1傳送封包用,ARPreply和ICMPechoreply都會發生match。(2)是用來從host1向host2

發送訊息,由於ARPrequest是採用廣播的方式,原則上透過ICMPechorequest完成。

Table-missFlowEntry以外,另外加入兩36檢查一下simple_switch_13log的輸出

檢查一下simple_switch_13log的輸出37第一個Packet-In是由host1發送的ARPrequest,因為透過廣播的方式所以沒有FlowEntry存在,

故發送Packet-Out。第二個是從host2回覆的ARPreply,目的MAC位址為host1因此前述的FlowEntry(1)被新增。第三個是從host1向host2發送的ICMPechorequest,因此新增FlowEntry(2)。host2向host1回覆的ICMPechoreply則會和FlowEntry(1)發生match,故直接轉送封包至host1

而不需要發送Packet-In。

第一個Packet-In是由host1發送的AR38最後讓我們看看每一個host上的tcpdump所呈現的結果

最後讓我們看看每一個host上的tcpdump所呈現39RYU交换机南华大学网络工程系RYU交换机南华大学网络工程系40简单功能交换机自学习,生成交换表接受帧,若该帧目的MAC地址在交换表中,按该表指定的接口转发否则,Flooding.简单功能交换机自学习,生成交换表41OpenFlow交换机OpenFlow交換机接受來自于controller的指令並达到以下功能:接收帧,修改帧,按流表转发。接收到的帧转发给Controller(Packet-In)

接收到來自Controller的帧转发到指定的接口(Packet-Out)

OpenFlow交换机OpenFlow交換机接受來自于c42OpenFlow交换机数据转发过程1.初始状态Flowtable为空白。hostA接到接口1,hostB接到接口4,hostC接到接口3

OpenFlow交换机数据转发过程1.初始状态432.hostAhostBPacket-In:Packet-Out:

in-port:1action:OUTPUT:Flooding

eth-dst:hostB

eth-src:hostA

2.hostAhostB443.hostB

hostAPacket-In:Packet-Out:

in-port:4action:OUTPUT:port1

eth-dst:hostA

eth-src:hostB

3.hostBhostA454.hostA

hostB

Packet-In:Packet-Out:

in-port:1action:OUTPUT:port4

eth-dst:hostB

eth-src:hostA

4.hostAhostB46RYU交换机源码分析ryu/app/simple_switch_13.py1.类定义和初始化

RYU交换机源码分析ryu/app/simple_switc472.事件处理(Eventhandler)對於Ryu來說,接受到任何一個OpenFlow訊息即會產生一個相對應的事件

事件管理(EventHandler)是一個擁有事件物件(EventObject)做為參數,並且使用``ryu.controller.handler.set_ev_cls``修飾(Decorator)的函數。

set_ev_cls則指定事件類別得以接受訊息和交換器狀態作為參數。

事件類別名稱的規則為ryu.controller.ofp_event.EventOFP+<OpenFlow訊息名稱>,例如:

在Packet-In訊息的狀態下的事件名稱為EventOFPPacketIn。對於狀態來說,請指定下面列表的其中一項。

2.事件处理(Eventhandler)482.1新增Table-missFlowEntryOpenFlow交換器的握手協議完成之後,新增Table-missFlowEntry到Flowtable中為接收Packet-In訊息做準備。具體來說,接收到Switchfeatures(Featuresreply)訊息後就會新增Table-missFlowEntry。

2.1新增Table-missFlowEntry49DataPath主要属性和方法方法:send_msg(msg)属性:

DataPath主要属性和方法50新增Table-missFlowEntry

Table-missFlowEntry的優先權為0即最低的優先權,而且此Entry可以match所有的封包。這個Entry的Instruction通常指定為outputaction,並且輸出的連接埠將指向Controller。因此當封包沒有match任何一個普通FlowEntry時,則觸發Packet-In。

新增Table-missFlowEntry51Packet-in訊息為了接收處理未知目的地的封包,需要Packet-In事件管理OFPPacketIn類別經常使用的屬性如下列所示

Packet-in訊息52更新MAC位址表

更新MAC位址表

53判斷轉送封包的連接埠目的MAC位址若存在于MAC位址表,則判斷該連接埠的號碼為輸出。反之若不存在于MAC位

址表則OUTPUTaction類別的實體並生成flooding(OFPP_FLOOD)給目的連接埠使用

判斷轉送封包的連接埠54新增FlowEntry的處理ApplyActions是用來設定那些必須立即執行的action所使用

新增FlowEntry的處理55DatapathOpenFlow交換器以及Flowtable的操作都是透過Datapath類別的實體來進行。在一般的情況下,會由事件傳遞給事件管理的訊息中取得,例如:Packet-In訊息。cookie(0)Controller所設定儲存的資料,在Entry的更新或者刪除的時所需要使用的資料都會放

在這邊,當做過濾器使用,而且不可以作為封包處理的參數。cookie_mask(0)Entry的更新或刪除時,若是該值為非零,則做為指定Entry的cookie使用。table_id(0)指定FlowEntry的TableID。

OFPFlowMod類別的建構子參數

DatapathOFPFlowMod類別的建構子參數

56对流表的操作:对流表的操作:57idle_timeout(0)FlowEntry的有效期限,以秒為單位。FlowEntry如果未被參照而且超過了指定的時間之後,該FlowEntry將會被刪除。如果FlowEntry有被參照,則超過時間之後會重新歸零計算。

在FlowEntry被刪除之後就會發出FlowRemoved訊息通知Controller。hard_timeout(0)FlowEntry的有效期限,以秒為單位。跟idle_timeout不同的地方是,hard_timeout在超過時限後並不會重新歸零計算。也就是說跟FlowEntry與有沒有被參照無關,只要超過指定的時間就會被刪除。

跟idle_timeout一樣,當FlowEntry被刪除時,FlowRemoved訊息將會被發送來通知

Controller。priority(0)FlowEntry的優先權。數值越大表示權限越高。

idle_timeout(0)58buffer_id(ofproto_v1_3.OFP_NO_BUFFER)指定OpenFlow交換器上用來儲存封包的緩衝區ID。緩衝區ID會放在通知Controller

的Packet-In訊息中,並且和接下來的OFPP_TABLE所指定的輸出埠和FlowMod訊息處理時可以被參照。當發送的命令訊息為OFPFC_DELETE或OFPFC_DELETE_STRICT時,會忽略本數值。

如果不指定緩衝區ID的時候,必須使用OFP_NO_BUFFER作為其設定值。out_port(0)OFPFC_DELETE和OFPFC_DELETE_STRICT命令用來指定輸出埠的參數。命令為OFPFC_ADD、

OFPFC_MODIFY、OFPFC_MODIFY_STRICT時則可以忽略。out_group(0)跟out_port一樣,作為一個輸出埠,但是轉到特定的group。

若要使其無效,則指定為OFPG_ANY。match(None)設定match。instructions([])設定instruction。

buffer_id(ofproto_v1_3.OFP_NO59flags(0)下列的flags可以被組合使用

flags(0)60轉送封包在MAC位址表中找尋目的MAC位址,若是有找到則發送Packet-Out訊息,並且轉送封包。

轉送封包61執行Mininet

1.启动RYU執行Mininet1.启动RYU62配置网卡配置网卡63启动xmingPutty登录大写X启动xming大写X64网络工程与规划第08章RYU交换机课件65使用mn指令啟動Mininet環境。

要建構的是host3台,交換器1台的簡單環境

使用mn指令啟動Mininet環境。

要建構的是h66查看OpenvSwitch的狀態

查看OpenvSwitch的狀態

67設定OpenFlow的版本為1.3

檢查空白的Flowtable

設定OpenFlow的版本為1.368執行Ryu應用程式

執行Ryu應用程式

69現在OVS已經連接,handshake已經執行完畢,Table-missFlowEntry已經加入,正處於等待Packet-In的狀態。確認Table-missFlowEntry已經被加入優先權為0,沒有matcth,action為CONTROLLER,重送的資料大小為65535(0xffff=OFPCML_NO_BUFFER)

現在OVS已經連接,handshake已經執行完畢,T70確認操作

從host1向host2發送ping打开嗅探器

確認操作

從host1向host2發送ping71從host1向host2發送ping。1.ARPrequest此時host1並不知道host2的MAC位址,原則上ICMPechorequest之前的ARPrequest是用廣播的方式發送。這樣的廣播方式會讓host2和host3都同樣接受到訊息。2.ARPreplyhost2使用ARPreply回覆host1要求。3.ICMPechorequest現在host1知道了host2的MAC位址,因此發送echoreque

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论