SlideShare a Scribd company logo
1 of 21
Download to read offline
Open vSwitch 패킷 처리 구조
2015.03.20
㈜파이오링크
SDN개발실 백승훈 (sh.baek@piolink.com)
© PIOLINK, Inc. SDN No.1
목차
 Open vSwitch Overview
 Architecture Diagram
-Architecture Diagram
-Interface Diagram
 Packet Processing
-Slow Path & Fast Path
-Unknown Packet Processing
-Flow Rule Update
 References
© PIOLINK, Inc. SDN No.1
Open vSwitch Overview
 OVS(Open vSwitch)
-리눅스 기반의 가상 소프트웨어 스위치
-Open source Apache 2 License
-네트워크를 추상화하여 동적으로 자원을 제어할 수 있음
-OpenFlow를 지원하여 SDN Switch로 사용 가능
-OVSDB 프로토콜 지원
•OVS의 설정 값을 저장한 DB를 관리하기 위한 프로토콜
-터널링 프로토콜 지원 (GRE, VXLAN, IPsec 등)
-모니터링 기능 지원 (NetFlow, sFlow, IPFIX, SPAN, RSPAN 등)
-분산 가상 스위치 기능 제공
•다른 물리 서버에 위치한 가상 서버(VM)를 서로 연결
-최신 버전 : 2.3.1 (2014/12/3)
Network
VMVM …
Hypervisor Hypervisor
VMVM …
ETH ETH
Hypervisor
VMVM …
ETH
Physical Server Physical Server Physical Server
OVS OVS
© PIOLINK, Inc. SDN No.1
Open vSwitch Overview
 OVS 내부 구조
ovs-vswitchd(vswitchd)
openvswitch(datapath)
Network
ovsdb-server
ovsdb
ovs-dpctl ovs-appctl ovs-vsctl ovsdb-client ovsdb-tool
ovs-ofctl
Kernel space
User space
Remote
Network Device
OpenFlow를 이용한
OVS 관리 툴
© PIOLINK, Inc. SDN No.1
Open vSwitch Overview
 OVS 데몬 관리 툴
ovs-vswitchd(vswitchd)
openvswitch(datapath)
Network
ovsdb-server
ovsdb
ovs-dpctl ovs-appctl ovs-vsctl ovsdb-client ovsdb-tool
ovs-ofctl
Kernel space
User space
Remote
Network Device
datapath 관리 툴
OVS 데몬
vswitchd 제어를
위한 경량화된 툴
OVS 커널 모듈
ovsdb-server를 이용한
vswitchd 관리 툴
© PIOLINK, Inc. SDN No.1
Open vSwitch Overview
 OVS DB 관리 툴
ovs-vswitchd(vswitchd)
openvswitch(datapath)
Network
ovsdb-server
ovsdb
ovs-dpctl ovs-appctl ovs-vsctl ovsdb-client ovsdb-tool
ovs-ofctl
Kernel space
User space
Remote
Network Device
odvdb-server에 대한
CLI 제공
ovsdb 관리를 위한
CLI 제공
ovsdb를 관리하기 위한
RPC 인터페이스를 제공
© PIOLINK, Inc. SDN No.1
Architecture Diagram
Controller
vswitchd
(user space)
datapath
(kernel space)
Network
Open vSwitch
 Controller로부터 flow rule을 받아 flow
table을 업데이트하고 datapath에게 기존
flow rule을 삭제하도록 명령함
 datapath가 packet 처리를 위해 rule을
요청하면 flow rule을 제공함
 Network 장비와 packet을 교환함
 Packet은 갖고 있는 flow rule에 따라
처리됨
 입력된 packet과 매치(match)되는
flow rule을 갖고 있지 않은 경우 upcall
과정을 통해 flow rule을 가져옴
(Upcall : datapath에서 vswitchd에게 요청하는 작업)
© PIOLINK, Inc. SDN No.1
Interface Diagram
Controller
vswitchd
(user space)
datapath
(kernel space)
Network
Open vSwitch
Netlink를 이용해 정보를 교환함
(Netlink : Socket을 이용한 IPC)
Network device를 지원하는
커널 API를 사용함
OVS가 지원하는 network 제어
프로토콜을 이용함
(OpenFlow, OVSDB)
* 본 ppt는 OpenFlow를 기준으로 설명
© PIOLINK, Inc. SDN No.1
Slow Path & Fast Path
datapath의 packet 처리 방식에는
Slow Path와 Fast Path 두 가지가 존재함
1. Slow Path : vswitchd에게 flow
rule을 받아 packet을 처리함.
(datapath가 packet에 대한 flow
rule을 갖고 있지 않은 경우)
2. Fast Path : Slow Path를 통해
가져온 flow rule로 datapath에서
바로 packet을 처리함
Controller
vswitchd
(user space)
datapath
(kernel space)
Network
Open vSwitch
1. Slow Path
2. Fast Path
*뒷장의 unknown packet processing과 같음
© PIOLINK, Inc. SDN No.1
Unknown Packet Processing
datapath가 수신한 packet의 flow rule을
갖고 있지 않은 경우 vswitchd 로부터
flow rule을 가져오는 과정
1. Packet 수신을 위한 device 및
이벤트 핸들러 등록
2. Packet 수신 후 unknown packet을
판별해 upcall 처리
3. vswitchd가 unknown packet에
대한 flow rule 결정
4. Flow rule을 datapath에 전달
Controller
vswitchd
(user space)
datapath
(kernel space)
Network
Open vSwitch
1.
2.
3.
4.
*뒷장부터 위 순서를 OVS 함수로 정리
© PIOLINK, Inc. SDN No.1
Unknown Packet Processing
1. Packet 수신을 위한 device 및
이벤트 핸들러 등록Controller
vswitchd
(user space)
datapath
(kernel space)
Network
Open vSwitch
1.
2.
3.
4.
① ovs_dp_cmd_new() 또는 ovs_vport_cmd_new()
: vport(가상의 port)를 생성하는 과정 시작
② new_vport()
: vport 생성
③ ovs_vport_add()
: 요청에 대한 ops(ovs_netdev_vport_ops) 등록
④ netdev_create()
: vport에 대한 설정 및 수신 이벤트에 대한
핸들러 등록
⑤ netdev_frame_hook()
: packet 수신에 대한 이벤트 핸들러로
Network에서 오는 packet을 수신
함수
호출
© PIOLINK, Inc. SDN No.1
Unknown Packet Processing
2. Packet 수신 후 unknown packet을
판별해 upcall 처리Controller
vswitchd
(user space)
datapath
(kernel space)
Network
Open vSwitch
1.
2.
3.
4.
① netdev_frame_hook()
: packet 수신
② netdev_port_receive()
③ ovs_vport_receive()
④ ovs_dp_process_pacekt()
: flow table과 매치 후 unknown packet이면
upcall 동작을 수행
⑤ ovs_dp_upcall()
⑥ queue_userspace_packet()
⑦ genlmsg_unicast()
: user space로 메시지 전달
© PIOLINK, Inc. SDN No.1
Unknown Packet Processing
3. vswitchd가 unknown packet에 대한
flow rule 결정Controller
vswitchd
(user space)
datapath
(kernel space)
Network
Open vSwitch
1.
2.
3.
4.
① updif_upcall_handler()
: 폴링 방식으로 upcall을 대기하는 스레드
② recv_upcalls()
→ dpif_recv()
: datapath에서 data를 수신
→ process_upcall()
: unknown packet에 대한 upcall
인지 확인
③ handle_upcall()
: 새로운 flow rule을 datapath로 전달하기 위한
명령어 생성
④ dpif_operate()
: 새로운 flow rule을 datapath로 전달하는
작업 시작
© PIOLINK, Inc. SDN No.1
Unknown Packet Processing
4. Flow rule을 datapath에 전달
Controller
vswitchd
(user space)
datapath
(kernel space)
Network
Open vSwitch
1.
2.
3.
4.
① dpif_operate()
: Flow rule을 datapath로 전달하는 작업 시작
② dpif_netlink_operate()
= dpif->dpif_class->operate()
③ dpif_netlink_operate__()
→ dpif_netlink_init_flow_put()
: datapath로 전달할 메시지에 flow
추가 명령과 정보를 입력
④ nl_transact_multiple()
⑤ nl_sock_transact_multiple()
⑥ nl_sock_transact_multiple__()
: datapath에게 flow rule 전달
© PIOLINK, Inc. SDN No.1
Flow Rule Update
Controller
vswitchd
(user space)
datapath
(kernel space)
Network
Open vSwitch
1.
 vswitchd가 controller로부터 기존 flow
rule을 변경하는 제어 메시지를 수신해
datapath의 flow rule을 갱신하는 과정
1. OpenFlow Controller로 부터
제어 메시지를 수신
2. vswitchd의 flow table 갱신
3. Flow table 업데이트 정보 체크
4. datapath의 기존 flow rule을 삭제
5. flow rule을 삭제한 후에는
unknown packet으로 처리함
2.
3.
4.
5.
* 앞의 unknown packet processing과 같아 뒤에 설명은 생략함
© PIOLINK, Inc. SDN No.1
Flow Rule Update
Controller
vswitchd
(user space)
datapath
(kernel space)
Network
Open vSwitch
1.
1. OpenFlow Controller로 부터
제어 메시지를 수신
① ofproto_run()
② connmgr_run()
③ ofconn_run()
④ rconn_recv()
⑤ vconn_recv()
⑥ do_recv()
⑦ vconn_stream_recv__()
⑧ stream_recv()
⑨ fd_recv()
: controller로부터 메시지를 수신
2.
3.
4.
5.
© PIOLINK, Inc. SDN No.1
Flow Rule Update
Controller
vswitchd
(user space)
datapath
(kernel space)
Network
Open vSwitch
1.
2. vswitchd의 flow table 갱신
① ofconn_run()
② handle_openflow()
③ handle_openflow__()
④ handle_flow_mod()
⑤ handle_flow_mod__()
⑥ add_flow()
: vswitchd의 flow table에 controller로부터
받은 새로운 flow rule을 추가 또는 수정
2.
3.
4.
5.
© PIOLINK, Inc. SDN No.1
Flow Rule Update
Controller
vswitchd
(user space)
datapath
(kernel space)
Network
Open vSwitch
1.
3. Flow table 업데이트 정보 체크
① udpif_revalidator()
: 주기적으로 flow table을 체크하는 스레드
② revalidate()
: flow table 체크 시작
③ revalidate_ukey()
→ xlate_actions()
: flow table에서 정보 가져옴
④ ofpbuf_equal()
: flow table 업데이트 유무 확인
2.
3.
4.
5.
© PIOLINK, Inc. SDN No.1
Flow Rule Update
Controller
vswitchd
(user space)
datapath
(kernel space)
Network
Open vSwitch
1.
4. datapath의 기존 flow rule을 삭제
① revalidate()
→ delete_op_init()
② push_ukey_ops__()
③ dpif_operate()
④ dpif_netlink_operate()
= dpif->dpif_class->operate()
⑤ dpif_netlink_operate__()
→ dpif_netlink_init_flow_del()
: datapath에게 전달하는 메시지에
flow 삭제 명령과 필요한 정보를 입력
⑥ nl_transact_multiple()
⑦ nl_sock_transact_multiple()
⑧ nl_sock_transact_multiple__()
: datapath에게 삭제 명령 전달
2.
3.
4.
5.
© PIOLINK, Inc. SDN No.1
References
 http://www.openvswitch.org/
 https://github.com/openvswitch/ovs/
 http://en.wikipedia.org/wiki/Open_vSwitch
 http://www.slideshare.net/rajdeep/openvswitch-deep-dive
 http://dpdk.org/
 http://www.apache.org/
 http://www.xenproject.org/
 https://www.openstack.org/
 http://www.linux-kvm.org/page/Main_Page
 https://www.opennetworking.org/sdn-resources/openflow
감사합니다.
㈜파이오링크
서울시 금천구 가산디지털2로 98
(가산동 550-1) IT캐슬 1동 401호
TEL: 02-2025-6900
FAX: 02-2025-6901
www.PIOLINK.com

More Related Content

What's hot

Understanding Open vSwitch
Understanding Open vSwitch Understanding Open vSwitch
Understanding Open vSwitch YongKi Kim
 
Using eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in CiliumUsing eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in CiliumScyllaDB
 
Ceph Performance and Sizing Guide
Ceph Performance and Sizing GuideCeph Performance and Sizing Guide
Ceph Performance and Sizing GuideJose De La Rosa
 
EBPF and Linux Networking
EBPF and Linux NetworkingEBPF and Linux Networking
EBPF and Linux NetworkingPLUMgrid
 
[OpenStack 하반기 스터디] Interoperability with ML2: LinuxBridge, OVS and SDN
[OpenStack 하반기 스터디] Interoperability with ML2: LinuxBridge, OVS and SDN[OpenStack 하반기 스터디] Interoperability with ML2: LinuxBridge, OVS and SDN
[OpenStack 하반기 스터디] Interoperability with ML2: LinuxBridge, OVS and SDNOpenStack Korea Community
 
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-RegionJi-Woong Choi
 
OpenStack DevStack Install - 2부 (Multi-nodes)
OpenStack DevStack Install - 2부 (Multi-nodes)OpenStack DevStack Install - 2부 (Multi-nodes)
OpenStack DevStack Install - 2부 (Multi-nodes)Ian Choi
 
[OpenInfra Days Korea 2018] (Track 2) Neutron LBaaS 어디까지 왔니? - Octavia 소개
[OpenInfra Days Korea 2018] (Track 2) Neutron LBaaS 어디까지 왔니? - Octavia 소개[OpenInfra Days Korea 2018] (Track 2) Neutron LBaaS 어디까지 왔니? - Octavia 소개
[OpenInfra Days Korea 2018] (Track 2) Neutron LBaaS 어디까지 왔니? - Octavia 소개OpenStack Korea Community
 
The TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux KernelThe TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux KernelDivye Kapoor
 
LinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking WalkthroughLinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking WalkthroughThomas Graf
 
netfilter and iptables
netfilter and iptablesnetfilter and iptables
netfilter and iptablesKernel TLV
 
Vxlan deep dive session rev0.5 final
Vxlan deep dive session rev0.5   finalVxlan deep dive session rev0.5   final
Vxlan deep dive session rev0.5 finalKwonSun Bae
 
오픈스택 멀티노드 설치 후기
오픈스택 멀티노드 설치 후기오픈스택 멀티노드 설치 후기
오픈스택 멀티노드 설치 후기영우 김
 
Open vSwitch Introduction
Open vSwitch IntroductionOpen vSwitch Introduction
Open vSwitch IntroductionHungWei Chiu
 
[2018] 오픈스택 5년 운영의 경험
[2018] 오픈스택 5년 운영의 경험[2018] 오픈스택 5년 운영의 경험
[2018] 오픈스택 5년 운영의 경험NHN FORWARD
 
Open vSwitch - Stateful Connection Tracking & Stateful NAT
Open vSwitch - Stateful Connection Tracking & Stateful NATOpen vSwitch - Stateful Connection Tracking & Stateful NAT
Open vSwitch - Stateful Connection Tracking & Stateful NATThomas Graf
 
DevConf 2014 Kernel Networking Walkthrough
DevConf 2014   Kernel Networking WalkthroughDevConf 2014   Kernel Networking Walkthrough
DevConf 2014 Kernel Networking WalkthroughThomas Graf
 
Faster packet processing in Linux: XDP
Faster packet processing in Linux: XDPFaster packet processing in Linux: XDP
Faster packet processing in Linux: XDPDaniel T. Lee
 
Deploying IPv6 in OpenStack Environments
Deploying IPv6 in OpenStack EnvironmentsDeploying IPv6 in OpenStack Environments
Deploying IPv6 in OpenStack EnvironmentsShannon McFarland
 

What's hot (20)

Understanding Open vSwitch
Understanding Open vSwitch Understanding Open vSwitch
Understanding Open vSwitch
 
Using eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in CiliumUsing eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in Cilium
 
Ceph Performance and Sizing Guide
Ceph Performance and Sizing GuideCeph Performance and Sizing Guide
Ceph Performance and Sizing Guide
 
EBPF and Linux Networking
EBPF and Linux NetworkingEBPF and Linux Networking
EBPF and Linux Networking
 
Deploying IPv6 on OpenStack
Deploying IPv6 on OpenStackDeploying IPv6 on OpenStack
Deploying IPv6 on OpenStack
 
[OpenStack 하반기 스터디] Interoperability with ML2: LinuxBridge, OVS and SDN
[OpenStack 하반기 스터디] Interoperability with ML2: LinuxBridge, OVS and SDN[OpenStack 하반기 스터디] Interoperability with ML2: LinuxBridge, OVS and SDN
[OpenStack 하반기 스터디] Interoperability with ML2: LinuxBridge, OVS and SDN
 
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
 
OpenStack DevStack Install - 2부 (Multi-nodes)
OpenStack DevStack Install - 2부 (Multi-nodes)OpenStack DevStack Install - 2부 (Multi-nodes)
OpenStack DevStack Install - 2부 (Multi-nodes)
 
[OpenInfra Days Korea 2018] (Track 2) Neutron LBaaS 어디까지 왔니? - Octavia 소개
[OpenInfra Days Korea 2018] (Track 2) Neutron LBaaS 어디까지 왔니? - Octavia 소개[OpenInfra Days Korea 2018] (Track 2) Neutron LBaaS 어디까지 왔니? - Octavia 소개
[OpenInfra Days Korea 2018] (Track 2) Neutron LBaaS 어디까지 왔니? - Octavia 소개
 
The TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux KernelThe TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux Kernel
 
LinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking WalkthroughLinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking Walkthrough
 
netfilter and iptables
netfilter and iptablesnetfilter and iptables
netfilter and iptables
 
Vxlan deep dive session rev0.5 final
Vxlan deep dive session rev0.5   finalVxlan deep dive session rev0.5   final
Vxlan deep dive session rev0.5 final
 
오픈스택 멀티노드 설치 후기
오픈스택 멀티노드 설치 후기오픈스택 멀티노드 설치 후기
오픈스택 멀티노드 설치 후기
 
Open vSwitch Introduction
Open vSwitch IntroductionOpen vSwitch Introduction
Open vSwitch Introduction
 
[2018] 오픈스택 5년 운영의 경험
[2018] 오픈스택 5년 운영의 경험[2018] 오픈스택 5년 운영의 경험
[2018] 오픈스택 5년 운영의 경험
 
Open vSwitch - Stateful Connection Tracking & Stateful NAT
Open vSwitch - Stateful Connection Tracking & Stateful NATOpen vSwitch - Stateful Connection Tracking & Stateful NAT
Open vSwitch - Stateful Connection Tracking & Stateful NAT
 
DevConf 2014 Kernel Networking Walkthrough
DevConf 2014   Kernel Networking WalkthroughDevConf 2014   Kernel Networking Walkthrough
DevConf 2014 Kernel Networking Walkthrough
 
Faster packet processing in Linux: XDP
Faster packet processing in Linux: XDPFaster packet processing in Linux: XDP
Faster packet processing in Linux: XDP
 
Deploying IPv6 in OpenStack Environments
Deploying IPv6 in OpenStack EnvironmentsDeploying IPv6 in OpenStack Environments
Deploying IPv6 in OpenStack Environments
 

Viewers also liked

SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)
SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)
SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)정명훈 Jerry Jeong
 
Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험
Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험
Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험Seung-Hoon Baek
 
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)Laehyoung Kim
 
NFV Architectural Framework
NFV Architectural FrameworkNFV Architectural Framework
NFV Architectural FrameworkSeung-Hoon Baek
 
NFV Management and Orchestration 분석
NFV Management and Orchestration 분석NFV Management and Orchestration 분석
NFV Management and Orchestration 분석rootfs32
 

Viewers also liked (6)

OpenDaylight 소개
OpenDaylight 소개OpenDaylight 소개
OpenDaylight 소개
 
SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)
SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)
SDDC(software defined data center)에서 NFV의 역할과 관리도구 (세미나 발표 자료)
 
Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험
Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험
Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험
 
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
 
NFV Architectural Framework
NFV Architectural FrameworkNFV Architectural Framework
NFV Architectural Framework
 
NFV Management and Orchestration 분석
NFV Management and Orchestration 분석NFV Management and Orchestration 분석
NFV Management and Orchestration 분석
 

Similar to Open vSwitch 패킷 처리 구조

2nd SDN Interest Group Seminar-Session3 (121218)
2nd SDN Interest Group Seminar-Session3 (121218)2nd SDN Interest Group Seminar-Session3 (121218)
2nd SDN Interest Group Seminar-Session3 (121218)NAIM Networks, Inc.
 
1st SDN Interest Group Seminar - Session1 (121017)
1st SDN Interest Group Seminar - Session1 (121017)1st SDN Interest Group Seminar - Session1 (121017)
1st SDN Interest Group Seminar - Session1 (121017)NAIM Networks, Inc.
 
Opendaylight beryllium
Opendaylight berylliumOpendaylight beryllium
Opendaylight berylliumCheolmin Lee
 
ACI Netflow 구성 가이드
ACI Netflow 구성 가이드ACI Netflow 구성 가이드
ACI Netflow 구성 가이드Woo Hyung Choi
 
SDN - 2018 Zeropage Devil's Camp
SDN - 2018 Zeropage Devil's CampSDN - 2018 Zeropage Devil's Camp
SDN - 2018 Zeropage Devil's CampMookeunJi
 
Private cloud network architecture (2018)
Private cloud network architecture (2018)Private cloud network architecture (2018)
Private cloud network architecture (2018)Gasida Seo
 
3rd SDN Interest Group Seminar-Session 3 (130123)
3rd SDN Interest Group Seminar-Session 3 (130123)3rd SDN Interest Group Seminar-Session 3 (130123)
3rd SDN Interest Group Seminar-Session 3 (130123)NAIM Networks, Inc.
 
20150511 jun lee_openstack neutron 분석 (최종)
20150511 jun lee_openstack neutron 분석 (최종)20150511 jun lee_openstack neutron 분석 (최종)
20150511 jun lee_openstack neutron 분석 (최종)rootfs32
 
150416 OpenStack Networking with Neutron Jieun, Kim
150416 OpenStack Networking with Neutron Jieun, Kim150416 OpenStack Networking with Neutron Jieun, Kim
150416 OpenStack Networking with Neutron Jieun, Kimjieun kim
 
웹기반원격감시제어 2010 CPD
웹기반원격감시제어 2010 CPD웹기반원격감시제어 2010 CPD
웹기반원격감시제어 2010 CPD활 김
 
Dragon flow and tricircle
Dragon flow and tricircleDragon flow and tricircle
Dragon flow and tricircleYongyoon Shin
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석Tommy Lee
 
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은jieun kim
 
DPDK (Data Plane Development Kit)
DPDK (Data Plane Development Kit) DPDK (Data Plane Development Kit)
DPDK (Data Plane Development Kit) ymtech
 
KT 안재석 박사 - 오픈 소스 기반 클라우드 컴퓨팅 솔루션 open stack 이야기 (2011Y05M28D)
KT 안재석 박사 - 오픈 소스 기반 클라우드 컴퓨팅 솔루션 open stack 이야기 (2011Y05M28D)KT 안재석 박사 - 오픈 소스 기반 클라우드 컴퓨팅 솔루션 open stack 이야기 (2011Y05M28D)
KT 안재석 박사 - 오픈 소스 기반 클라우드 컴퓨팅 솔루션 open stack 이야기 (2011Y05M28D)Ubuntu Korea Community
 
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0Ji-Woong Choi
 
CEIC 2016 테스트베드 구축
CEIC 2016 테스트베드 구축CEIC 2016 테스트베드 구축
CEIC 2016 테스트베드 구축BoanLabDKU
 
1st SDN Interest Group Seminar - Session2 (121017)
1st SDN Interest Group Seminar - Session2 (121017)1st SDN Interest Group Seminar - Session2 (121017)
1st SDN Interest Group Seminar - Session2 (121017)NAIM Networks, Inc.
 

Similar to Open vSwitch 패킷 처리 구조 (20)

L4교육자료
L4교육자료L4교육자료
L4교육자료
 
2nd SDN Interest Group Seminar-Session3 (121218)
2nd SDN Interest Group Seminar-Session3 (121218)2nd SDN Interest Group Seminar-Session3 (121218)
2nd SDN Interest Group Seminar-Session3 (121218)
 
1st SDN Interest Group Seminar - Session1 (121017)
1st SDN Interest Group Seminar - Session1 (121017)1st SDN Interest Group Seminar - Session1 (121017)
1st SDN Interest Group Seminar - Session1 (121017)
 
Opendaylight beryllium
Opendaylight berylliumOpendaylight beryllium
Opendaylight beryllium
 
ACI Netflow 구성 가이드
ACI Netflow 구성 가이드ACI Netflow 구성 가이드
ACI Netflow 구성 가이드
 
SDN - 2018 Zeropage Devil's Camp
SDN - 2018 Zeropage Devil's CampSDN - 2018 Zeropage Devil's Camp
SDN - 2018 Zeropage Devil's Camp
 
Private cloud network architecture (2018)
Private cloud network architecture (2018)Private cloud network architecture (2018)
Private cloud network architecture (2018)
 
3rd SDN Interest Group Seminar-Session 3 (130123)
3rd SDN Interest Group Seminar-Session 3 (130123)3rd SDN Interest Group Seminar-Session 3 (130123)
3rd SDN Interest Group Seminar-Session 3 (130123)
 
20150511 jun lee_openstack neutron 분석 (최종)
20150511 jun lee_openstack neutron 분석 (최종)20150511 jun lee_openstack neutron 분석 (최종)
20150511 jun lee_openstack neutron 분석 (최종)
 
150416 OpenStack Networking with Neutron Jieun, Kim
150416 OpenStack Networking with Neutron Jieun, Kim150416 OpenStack Networking with Neutron Jieun, Kim
150416 OpenStack Networking with Neutron Jieun, Kim
 
웹기반원격감시제어 2010 CPD
웹기반원격감시제어 2010 CPD웹기반원격감시제어 2010 CPD
웹기반원격감시제어 2010 CPD
 
Dragon flow and tricircle
Dragon flow and tricircleDragon flow and tricircle
Dragon flow and tricircle
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
 
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은
 
DPDK (Data Plane Development Kit)
DPDK (Data Plane Development Kit) DPDK (Data Plane Development Kit)
DPDK (Data Plane Development Kit)
 
DPDK
DPDKDPDK
DPDK
 
KT 안재석 박사 - 오픈 소스 기반 클라우드 컴퓨팅 솔루션 open stack 이야기 (2011Y05M28D)
KT 안재석 박사 - 오픈 소스 기반 클라우드 컴퓨팅 솔루션 open stack 이야기 (2011Y05M28D)KT 안재석 박사 - 오픈 소스 기반 클라우드 컴퓨팅 솔루션 open stack 이야기 (2011Y05M28D)
KT 안재석 박사 - 오픈 소스 기반 클라우드 컴퓨팅 솔루션 open stack 이야기 (2011Y05M28D)
 
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
 
CEIC 2016 테스트베드 구축
CEIC 2016 테스트베드 구축CEIC 2016 테스트베드 구축
CEIC 2016 테스트베드 구축
 
1st SDN Interest Group Seminar - Session2 (121017)
1st SDN Interest Group Seminar - Session2 (121017)1st SDN Interest Group Seminar - Session2 (121017)
1st SDN Interest Group Seminar - Session2 (121017)
 

Open vSwitch 패킷 처리 구조

  • 1. Open vSwitch 패킷 처리 구조 2015.03.20 ㈜파이오링크 SDN개발실 백승훈 (sh.baek@piolink.com)
  • 2. © PIOLINK, Inc. SDN No.1 목차  Open vSwitch Overview  Architecture Diagram -Architecture Diagram -Interface Diagram  Packet Processing -Slow Path & Fast Path -Unknown Packet Processing -Flow Rule Update  References
  • 3. © PIOLINK, Inc. SDN No.1 Open vSwitch Overview  OVS(Open vSwitch) -리눅스 기반의 가상 소프트웨어 스위치 -Open source Apache 2 License -네트워크를 추상화하여 동적으로 자원을 제어할 수 있음 -OpenFlow를 지원하여 SDN Switch로 사용 가능 -OVSDB 프로토콜 지원 •OVS의 설정 값을 저장한 DB를 관리하기 위한 프로토콜 -터널링 프로토콜 지원 (GRE, VXLAN, IPsec 등) -모니터링 기능 지원 (NetFlow, sFlow, IPFIX, SPAN, RSPAN 등) -분산 가상 스위치 기능 제공 •다른 물리 서버에 위치한 가상 서버(VM)를 서로 연결 -최신 버전 : 2.3.1 (2014/12/3) Network VMVM … Hypervisor Hypervisor VMVM … ETH ETH Hypervisor VMVM … ETH Physical Server Physical Server Physical Server OVS OVS
  • 4. © PIOLINK, Inc. SDN No.1 Open vSwitch Overview  OVS 내부 구조 ovs-vswitchd(vswitchd) openvswitch(datapath) Network ovsdb-server ovsdb ovs-dpctl ovs-appctl ovs-vsctl ovsdb-client ovsdb-tool ovs-ofctl Kernel space User space Remote Network Device OpenFlow를 이용한 OVS 관리 툴
  • 5. © PIOLINK, Inc. SDN No.1 Open vSwitch Overview  OVS 데몬 관리 툴 ovs-vswitchd(vswitchd) openvswitch(datapath) Network ovsdb-server ovsdb ovs-dpctl ovs-appctl ovs-vsctl ovsdb-client ovsdb-tool ovs-ofctl Kernel space User space Remote Network Device datapath 관리 툴 OVS 데몬 vswitchd 제어를 위한 경량화된 툴 OVS 커널 모듈 ovsdb-server를 이용한 vswitchd 관리 툴
  • 6. © PIOLINK, Inc. SDN No.1 Open vSwitch Overview  OVS DB 관리 툴 ovs-vswitchd(vswitchd) openvswitch(datapath) Network ovsdb-server ovsdb ovs-dpctl ovs-appctl ovs-vsctl ovsdb-client ovsdb-tool ovs-ofctl Kernel space User space Remote Network Device odvdb-server에 대한 CLI 제공 ovsdb 관리를 위한 CLI 제공 ovsdb를 관리하기 위한 RPC 인터페이스를 제공
  • 7. © PIOLINK, Inc. SDN No.1 Architecture Diagram Controller vswitchd (user space) datapath (kernel space) Network Open vSwitch  Controller로부터 flow rule을 받아 flow table을 업데이트하고 datapath에게 기존 flow rule을 삭제하도록 명령함  datapath가 packet 처리를 위해 rule을 요청하면 flow rule을 제공함  Network 장비와 packet을 교환함  Packet은 갖고 있는 flow rule에 따라 처리됨  입력된 packet과 매치(match)되는 flow rule을 갖고 있지 않은 경우 upcall 과정을 통해 flow rule을 가져옴 (Upcall : datapath에서 vswitchd에게 요청하는 작업)
  • 8. © PIOLINK, Inc. SDN No.1 Interface Diagram Controller vswitchd (user space) datapath (kernel space) Network Open vSwitch Netlink를 이용해 정보를 교환함 (Netlink : Socket을 이용한 IPC) Network device를 지원하는 커널 API를 사용함 OVS가 지원하는 network 제어 프로토콜을 이용함 (OpenFlow, OVSDB) * 본 ppt는 OpenFlow를 기준으로 설명
  • 9. © PIOLINK, Inc. SDN No.1 Slow Path & Fast Path datapath의 packet 처리 방식에는 Slow Path와 Fast Path 두 가지가 존재함 1. Slow Path : vswitchd에게 flow rule을 받아 packet을 처리함. (datapath가 packet에 대한 flow rule을 갖고 있지 않은 경우) 2. Fast Path : Slow Path를 통해 가져온 flow rule로 datapath에서 바로 packet을 처리함 Controller vswitchd (user space) datapath (kernel space) Network Open vSwitch 1. Slow Path 2. Fast Path *뒷장의 unknown packet processing과 같음
  • 10. © PIOLINK, Inc. SDN No.1 Unknown Packet Processing datapath가 수신한 packet의 flow rule을 갖고 있지 않은 경우 vswitchd 로부터 flow rule을 가져오는 과정 1. Packet 수신을 위한 device 및 이벤트 핸들러 등록 2. Packet 수신 후 unknown packet을 판별해 upcall 처리 3. vswitchd가 unknown packet에 대한 flow rule 결정 4. Flow rule을 datapath에 전달 Controller vswitchd (user space) datapath (kernel space) Network Open vSwitch 1. 2. 3. 4. *뒷장부터 위 순서를 OVS 함수로 정리
  • 11. © PIOLINK, Inc. SDN No.1 Unknown Packet Processing 1. Packet 수신을 위한 device 및 이벤트 핸들러 등록Controller vswitchd (user space) datapath (kernel space) Network Open vSwitch 1. 2. 3. 4. ① ovs_dp_cmd_new() 또는 ovs_vport_cmd_new() : vport(가상의 port)를 생성하는 과정 시작 ② new_vport() : vport 생성 ③ ovs_vport_add() : 요청에 대한 ops(ovs_netdev_vport_ops) 등록 ④ netdev_create() : vport에 대한 설정 및 수신 이벤트에 대한 핸들러 등록 ⑤ netdev_frame_hook() : packet 수신에 대한 이벤트 핸들러로 Network에서 오는 packet을 수신 함수 호출
  • 12. © PIOLINK, Inc. SDN No.1 Unknown Packet Processing 2. Packet 수신 후 unknown packet을 판별해 upcall 처리Controller vswitchd (user space) datapath (kernel space) Network Open vSwitch 1. 2. 3. 4. ① netdev_frame_hook() : packet 수신 ② netdev_port_receive() ③ ovs_vport_receive() ④ ovs_dp_process_pacekt() : flow table과 매치 후 unknown packet이면 upcall 동작을 수행 ⑤ ovs_dp_upcall() ⑥ queue_userspace_packet() ⑦ genlmsg_unicast() : user space로 메시지 전달
  • 13. © PIOLINK, Inc. SDN No.1 Unknown Packet Processing 3. vswitchd가 unknown packet에 대한 flow rule 결정Controller vswitchd (user space) datapath (kernel space) Network Open vSwitch 1. 2. 3. 4. ① updif_upcall_handler() : 폴링 방식으로 upcall을 대기하는 스레드 ② recv_upcalls() → dpif_recv() : datapath에서 data를 수신 → process_upcall() : unknown packet에 대한 upcall 인지 확인 ③ handle_upcall() : 새로운 flow rule을 datapath로 전달하기 위한 명령어 생성 ④ dpif_operate() : 새로운 flow rule을 datapath로 전달하는 작업 시작
  • 14. © PIOLINK, Inc. SDN No.1 Unknown Packet Processing 4. Flow rule을 datapath에 전달 Controller vswitchd (user space) datapath (kernel space) Network Open vSwitch 1. 2. 3. 4. ① dpif_operate() : Flow rule을 datapath로 전달하는 작업 시작 ② dpif_netlink_operate() = dpif->dpif_class->operate() ③ dpif_netlink_operate__() → dpif_netlink_init_flow_put() : datapath로 전달할 메시지에 flow 추가 명령과 정보를 입력 ④ nl_transact_multiple() ⑤ nl_sock_transact_multiple() ⑥ nl_sock_transact_multiple__() : datapath에게 flow rule 전달
  • 15. © PIOLINK, Inc. SDN No.1 Flow Rule Update Controller vswitchd (user space) datapath (kernel space) Network Open vSwitch 1.  vswitchd가 controller로부터 기존 flow rule을 변경하는 제어 메시지를 수신해 datapath의 flow rule을 갱신하는 과정 1. OpenFlow Controller로 부터 제어 메시지를 수신 2. vswitchd의 flow table 갱신 3. Flow table 업데이트 정보 체크 4. datapath의 기존 flow rule을 삭제 5. flow rule을 삭제한 후에는 unknown packet으로 처리함 2. 3. 4. 5. * 앞의 unknown packet processing과 같아 뒤에 설명은 생략함
  • 16. © PIOLINK, Inc. SDN No.1 Flow Rule Update Controller vswitchd (user space) datapath (kernel space) Network Open vSwitch 1. 1. OpenFlow Controller로 부터 제어 메시지를 수신 ① ofproto_run() ② connmgr_run() ③ ofconn_run() ④ rconn_recv() ⑤ vconn_recv() ⑥ do_recv() ⑦ vconn_stream_recv__() ⑧ stream_recv() ⑨ fd_recv() : controller로부터 메시지를 수신 2. 3. 4. 5.
  • 17. © PIOLINK, Inc. SDN No.1 Flow Rule Update Controller vswitchd (user space) datapath (kernel space) Network Open vSwitch 1. 2. vswitchd의 flow table 갱신 ① ofconn_run() ② handle_openflow() ③ handle_openflow__() ④ handle_flow_mod() ⑤ handle_flow_mod__() ⑥ add_flow() : vswitchd의 flow table에 controller로부터 받은 새로운 flow rule을 추가 또는 수정 2. 3. 4. 5.
  • 18. © PIOLINK, Inc. SDN No.1 Flow Rule Update Controller vswitchd (user space) datapath (kernel space) Network Open vSwitch 1. 3. Flow table 업데이트 정보 체크 ① udpif_revalidator() : 주기적으로 flow table을 체크하는 스레드 ② revalidate() : flow table 체크 시작 ③ revalidate_ukey() → xlate_actions() : flow table에서 정보 가져옴 ④ ofpbuf_equal() : flow table 업데이트 유무 확인 2. 3. 4. 5.
  • 19. © PIOLINK, Inc. SDN No.1 Flow Rule Update Controller vswitchd (user space) datapath (kernel space) Network Open vSwitch 1. 4. datapath의 기존 flow rule을 삭제 ① revalidate() → delete_op_init() ② push_ukey_ops__() ③ dpif_operate() ④ dpif_netlink_operate() = dpif->dpif_class->operate() ⑤ dpif_netlink_operate__() → dpif_netlink_init_flow_del() : datapath에게 전달하는 메시지에 flow 삭제 명령과 필요한 정보를 입력 ⑥ nl_transact_multiple() ⑦ nl_sock_transact_multiple() ⑧ nl_sock_transact_multiple__() : datapath에게 삭제 명령 전달 2. 3. 4. 5.
  • 20. © PIOLINK, Inc. SDN No.1 References  http://www.openvswitch.org/  https://github.com/openvswitch/ovs/  http://en.wikipedia.org/wiki/Open_vSwitch  http://www.slideshare.net/rajdeep/openvswitch-deep-dive  http://dpdk.org/  http://www.apache.org/  http://www.xenproject.org/  https://www.openstack.org/  http://www.linux-kvm.org/page/Main_Page  https://www.opennetworking.org/sdn-resources/openflow
  • 21. 감사합니다. ㈜파이오링크 서울시 금천구 가산디지털2로 98 (가산동 550-1) IT캐슬 1동 401호 TEL: 02-2025-6900 FAX: 02-2025-6901 www.PIOLINK.com