[233] level 2 network programming using packet ngin rtos

84
Level 2 Network Programming using PacketNgin RTOS 김성민 ㈜구름네트웍스 대표이사

Upload: naver-d2

Post on 16-Apr-2017

7.663 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: [233] level 2 network programming using packet ngin rtos

Level 2 Network Programming using PacketNgin RTOS

김성민 ㈜구름네트웍스 대표이사

Page 2: [233] level 2 network programming using packet ngin rtos

contents

1. Introduction 2. Basic Network Concepts 3. Level 2 Network Applications 4. Wrap-up

Page 3: [233] level 2 network programming using packet ngin rtos

1. Introduction

Page 4: [233] level 2 network programming using packet ngin rtos

I have a dream

Page 5: [233] level 2 network programming using packet ngin rtos

I have a dream

Page 6: [233] level 2 network programming using packet ngin rtos

I have a dream

Source: http://www.embedded.com/print/4008802 http://blogs.it.ox.ac.uk/oxcert/2015/05/13/cve-2015-3456-venom/

S/W

H/W

Page 7: [233] level 2 network programming using packet ngin rtos

Who am I?

2009 ~ 2012 패킷엔진의 전신인 패킷바이저 개발 한국전자통신연구원

2013 ~ 2014 패킷엔진 프로토타입 개발 창의도전형SW R&D 프로그램/NIPA

2014 ~ 상용화를 위해 ㈜구름네트웍스 설립 창업선도대학/창업진흥원

2015. 9 패킷엔진 오픈소스 공개 글로벌오픈프론티어/NIPA

Page 8: [233] level 2 network programming using packet ngin rtos

Network Programming Host and network node (1/4)

• Host

• PC, smart phone, server

• IP address, TCP or UDP port

• Network node

• Switch, router, gateway

• MAC address, interface number

Source: https://en.wikipedia.org/wiki/Hop_(networking) https://www.nas.ewi.tudelft.nl/people/Piet/papers/hopcountmeasurementPAM.pdf

Page 9: [233] level 2 network programming using packet ngin rtos

Network Programming Host and network node (1/4)

Source: https://en.wikipedia.org/wiki/Computer_network

Page 10: [233] level 2 network programming using packet ngin rtos

Network Programming Host and network node (3/4)

Source address: Konkuk Univ. Destination address: naver.com

tcp://203.252.180.180:3087

tcp://202.179.177.22:80

• Host network

programming

• TCP, UDP

• Send data

• Receive data

Page 11: [233] level 2 network programming using packet ngin rtos

Network Programming Host and network node (4/4)

• Network node

programming

• MAC, ARP

ICMP, OSPF

• forwarding

• multicast

• encrypt/decrypt

• encapsulate/decapsulate

Network nodes

Page 12: [233] level 2 network programming using packet ngin rtos

PacketNgin RTOS Concept Network O/S vs General Purpose O/S (1/2)

• Ethernet Header

• LAN 안에서 Packet을 Switching할 때 사용하는 정보

• IP Header

• WAN 에서 Packet을 Routing할 때 사용하는 정보

• TCP/UDP Header

• Host 안에서 Packet을 Dispatch할 때 사용하는 부분

• TCP/UDP Payload

• Application에서 사용하는 데이터

Ethernet Header

IP Header

TCP/UDP Header

TCP/UDP Payload

Page 13: [233] level 2 network programming using packet ngin rtos

PacketNgin RTOS Concept Network O/S vs General Purpose O/S (2/2)

Eth IP TCP Payload Ether Block

IP Block

TCP Block

Web Browser

Kernel Space

User Space

NIC Eth IP TCP Payload

IP TCP Payload

TCP Payload

Payload

Eth IP TCP Payload Ether Block

Firewall

Kernel Space

User Space

NIC Eth IP TCP Payload

Eth IP TCP Payload

General Purpose O/S Network O/S

Page 14: [233] level 2 network programming using packet ngin rtos

PacketNgin RTOS Concept

Page 15: [233] level 2 network programming using packet ngin rtos

Programmability

Why Network O/S?

• Linux는 Host Network Programming 하기에 적합한 O/S

• PacketNgin은 Network Node Programming 하기에 적합한 O/S

• ARP, ICMP, IPsec 소스 코드의 양이 Linux에 비해 2/3 ~ 1/2 수준

Page 16: [233] level 2 network programming using packet ngin rtos

Why Network O/S? + Network H/W depedent code + deliver_skb() + ret = pt_prev->func(skb, skb->dev, pt_prev); + ip_rcv() + nf_hook() + ip_rcv_finish() + ip_route_input() + dst_input()->ip_forward() or ip_input() + ip_input // Remove the IPv4 header + ip_input_finish + ret = ipprot->handler(&skb, &nhoff); + xfrm4_rcv() + xfrm_input() + xfrm4_parse_spi() + xfrm_state_lookup() // lookup IPsec SA + xfrm_beet_input(skb, x) //To change to inner IP header. + nexthdr = x->type->input(x, xfrm.decap, skb) // == esp_input + esp_input() // process ESP based on inner address + returns 0 ; + /* beet handling in xfrm_rcv_spi */ + netif_rx() + // ip_input_finish returns 0 + // netif_receive_skb returns 0 +netif_receive_skb // Now we have an IPv4 packet. So the input flow is for v4 packet. + deliver_skb() + ret = pt_prev->func(skb, skb->dev, pt_prev); + ip_rcv() + nf_hook() //This calls ip_rcv_finish(skb) + ip_rcv_finish() // Here the skb->dst is NULL and so is filled for the input side. + ip6_route_input() + dst_input()->ip_forward() or ip_input() + ip_input // Remove the IPv4 header + ip_input_finish + …

+ Network H/W depedent code + nic_process_output() + fifo_push() + ni_input() + ipsec_inbound() + sad_get() + ipsec_decrypt() + spd_get() + ni_output()

Page 17: [233] level 2 network programming using packet ngin rtos

Performance

Why Network O/S?

Page 18: [233] level 2 network programming using packet ngin rtos

PacketNgin Network Application APIs

• thread_id(): int

• thread_barrior(): void

• malloc(size_t): void*

• free(void*): void

• gmalloc(size_t): void*

• gfree(void*): void

• ni_input(idx): Packet*

• ni_output(Packet*): bool

• ni_free(Packet*): void

• ni_create(size_t): Packet*

Page 19: [233] level 2 network programming using packet ngin rtos

Hello World

Page 20: [233] level 2 network programming using packet ngin rtos

1. 0번 Thread인 경우

2. Global memory 초기화 시행

3. 나머지 Thread는 기다림

Page 21: [233] level 2 network programming using packet ngin rtos

1. Local memory 초기화

2. 모든 Thread가 초기화를 마칠 때 까지

기다림

Page 22: [233] level 2 network programming using packet ngin rtos

1. 할당된 vNIC의 개수를 가져옴

2. vNIC을 round-robin 방식으로 선택

Page 23: [233] level 2 network programming using packet ngin rtos

1. i번째 vNIC을 가져옴

2. Packet이 있으면

3. process라는 함수를 실

Page 24: [233] level 2 network programming using packet ngin rtos

1. vNIC에서 Packet을 가져옴

Page 25: [233] level 2 network programming using packet ngin rtos

1. 모든 Packet은 Ehternet이기

때문에 Packet의 payload를

Ether 형태로 casting함

Page 26: [233] level 2 network programming using packet ngin rtos

1. Ether Type이 ARP인 경우

2. Ethernet의 payload를 ARP로

casting함

3. 기타등등 ARP 처리

Page 27: [233] level 2 network programming using packet ngin rtos

1. Ether Type이 IPv4인 경우

2. Ethernet의 payload를 IP로

casting함

Page 28: [233] level 2 network programming using packet ngin rtos

1. IP의 protocol이 ICMP이고, IP

의 목적지가 나 자신인 경우

2. IP의 payload를 ICMP로

casting함

3. 기타등등 ICMP에 관한 처리

Page 29: [233] level 2 network programming using packet ngin rtos

1. IP의 protocol이 UDP 경우

2. IP의 payload를 UDP로

casting함

3. 기타등등 UDP에 관한 처리

Page 30: [233] level 2 network programming using packet ngin rtos

1. 의미 없는 Packet인 경우

2. Packet을 drop 시킴

Page 31: [233] level 2 network programming using packet ngin rtos

2. Basic Network Concepts 2.1 Local Area Network

Page 32: [233] level 2 network programming using packet ngin rtos

LAN and WAN

Source: http://www.mysecurecyberspace.com/encyclopedia/index/local-area-network-lan.html

Page 33: [233] level 2 network programming using packet ngin rtos

Switch

Source: http://kr.gobizkorea.com/blog/kr_catalog_view.jsp?blog_id=iptime&co_lang=1&group_code=62373&obj_id=944135 http://www.dlink.com/us/en/business-solutions/switching/unmanaged-switches/rackmount/des-1026g-24-port-fast-ethernet-switch-plus-2-gigabit-ports

Page 34: [233] level 2 network programming using packet ngin rtos

Router

Source: http://www.cisco.com/en/US/products/ps10537/index.html http://www.cisco.com/en/US/products/ps5862/index.html

Page 35: [233] level 2 network programming using packet ngin rtos

Ethernet

Source: https://en.wikipedia.org/wiki/Ethernet_frame

Page 36: [233] level 2 network programming using packet ngin rtos

Address Resolution Protocol (1/5)

00:11:22:33:44:01

192.168.0.1

00:11:22:33:44:02

192.168.0.2

00:11:22:33:44:03

192.168.0.3

00:11:22:33:44:06

192.168.0.6

00:11:22:33:44:05

192.168.0.5

00:11:22:33:44:04

192.168.0.4

Page 37: [233] level 2 network programming using packet ngin rtos

Address Resolution Protocol (2/5)

00:11:22:33:44:01

192.168.0.1

00:11:22:33:44:02

192.168.0.2

00:11:22:33:44:03

192.168.0.3

00:11:22:33:44:06

192.168.0.6

00:11:22:33:44:05

192.168.0.5

00:11:22:33:44:04

192.168.0.4

Who has 192.168.0.3?

Page 38: [233] level 2 network programming using packet ngin rtos

Address Resolution Protocol (3/5)

00:11:22:33:44:01

192.168.0.1

00:11:22:33:44:02

192.168.0.2

00:11:22:33:44:03

192.168.0.3

00:11:22:33:44:06

192.168.0.6

00:11:22:33:44:05

192.168.0.5

00:11:22:33:44:04

192.168.0.4

192.168.0.3 is at 00:11:22:33:44:03

Page 39: [233] level 2 network programming using packet ngin rtos

Address Resolution Protocol (4/5)

Page 40: [233] level 2 network programming using packet ngin rtos

Address Resolution Protocol (5/5)

Page 41: [233] level 2 network programming using packet ngin rtos

Run PacketNgin RTOS

Page 42: [233] level 2 network programming using packet ngin rtos
Page 43: [233] level 2 network programming using packet ngin rtos

1. ARP request이고, 그 대상이 나

자신일 경우

Page 44: [233] level 2 network programming using packet ngin rtos

1. Ethernet의 Source와

Destination 주소를 서로 바꾸

어 상대방의 호스트에 패킷을 되

돌림

Page 45: [233] level 2 network programming using packet ngin rtos

1. ARP operation을 Response(2)로 바꿈

2. Source Hardware Address를 나의 MAC 주소로 설정함

Page 46: [233] level 2 network programming using packet ngin rtos

1. 새로 만든 패킷을 vNIC을 통해 출력함

Page 47: [233] level 2 network programming using packet ngin rtos

1. x86_64로 컴파일 함 2. glibc를 사용 안함 3. Stack Pointer를 사용 안함

1. glibc를 사용 안함

1. NewLib (Standard C lib) 2. libcore 3. libTLSF (Memory allocator)

Page 48: [233] level 2 network programming using packet ngin rtos

console 유틸리티로 실행

# bin/console run.psh

1. PacketNgin RTOS에 접속함

1. RTVM을 할당 받음 2. Core는 1개 3. Memory는 16MB 4. Storage는 2MB 5. vNIC은 2개

1. 컴파일된 이미지를 전송함 2. VM을 구동함

Page 49: [233] level 2 network programming using packet ngin rtos

Deploy Net App (Console)

Page 50: [233] level 2 network programming using packet ngin rtos

Deploy Net App (RTOS)

Page 51: [233] level 2 network programming using packet ngin rtos

ARPing

Page 52: [233] level 2 network programming using packet ngin rtos

2. Basic Network Concepts 2.2 Wide Area Network

Page 53: [233] level 2 network programming using packet ngin rtos

Wide Area Network

Page 54: [233] level 2 network programming using packet ngin rtos

Wide Area Network

203.252.180.180

8.8.8.8

Source: http://gallery.techarena.in/showphoto.php/photo/21765

Page 55: [233] level 2 network programming using packet ngin rtos

IP Routing

203.252.180.180

8.8.8.8

Source: http://gallery.techarena.in/showphoto.php/photo/21765

Page 56: [233] level 2 network programming using packet ngin rtos

Internet Protocol

Source: http://en.wikipedia.org/wiki/Ipv4

Page 57: [233] level 2 network programming using packet ngin rtos

Internet Control Message Protocol

Source: http://www.networkuptime.com/nmap/page4-2.shtml

• Echo

• Destination Unreachable

• Redirect Message

• Router Advertisement

• Router Solicitation

• Time Exceed

• Bad IP header

• Timestamp

Page 58: [233] level 2 network programming using packet ngin rtos

Internet Control Message Protocol

Source: http://en.wikipedia.org/wiki/Internet_Control_Message_Protocol

Page 59: [233] level 2 network programming using packet ngin rtos

Internet Control Message Protocol

Page 60: [233] level 2 network programming using packet ngin rtos

Debug

Page 61: [233] level 2 network programming using packet ngin rtos

2. Basic Network Concepts 2.3 Transmission Control Protocol

Page 62: [233] level 2 network programming using packet ngin rtos

Transmission Control Protocol

Source: http://en.wikipedia.org/wiki/Transmission_Control_Protocol

Page 63: [233] level 2 network programming using packet ngin rtos

Connection (3 way handshake)

Page 64: [233] level 2 network programming using packet ngin rtos

Transmission

Page 65: [233] level 2 network programming using packet ngin rtos

Sliding Window

Page 66: [233] level 2 network programming using packet ngin rtos

Congestion Control

Page 67: [233] level 2 network programming using packet ngin rtos

Congestion Control

Source: http://www.cisco.com/web/about/ac123/ac147/archived_issues/ipj_9-2/gigabit_tcp.html

Page 68: [233] level 2 network programming using packet ngin rtos

Implement

Page 69: [233] level 2 network programming using packet ngin rtos

Run

Page 70: [233] level 2 network programming using packet ngin rtos
Page 71: [233] level 2 network programming using packet ngin rtos

3. Level 2 Network Applications

Page 72: [233] level 2 network programming using packet ngin rtos

PacketNgin Loadbalancer • Load Balancing Methods

• NAT, SNAT, DR, Tunneling

• Scheduling Algorithms

• Round-Robin, Least-Connection,

Hashing, Shortest Expected Delay,

Never Queue

• Failover

• Watchdog, TCP Session Recover

글로벌 오픈프론티어/NIPA

Page 73: [233] level 2 network programming using packet ngin rtos

PacketNgin Loadbalancer

Page 74: [233] level 2 network programming using packet ngin rtos

PacketNgin Loadbalancer Throughput

VirtualBox + Virt I/O NIC +388%

Page 75: [233] level 2 network programming using packet ngin rtos

PacketNgin IPsec • Cryptography Algorithms

• DES, 3DES, BlowFish, Cast128,

Rijndael, Camelia, AES

• Hashing Algorithms

• MD5, SHA1/256/384/512,

Ripemd160

• Mode

• Transport, Tunnel

• IKE

Page 76: [233] level 2 network programming using packet ngin rtos

PacketNgin IPsec

Page 77: [233] level 2 network programming using packet ngin rtos

PacketNgin IPsec Throughput

Core i5 + NetFPGA NIC +420%

Page 78: [233] level 2 network programming using packet ngin rtos

PacketNgin Protocol Converter

철도기술연구원, 대아TI

Page 79: [233] level 2 network programming using packet ngin rtos

PacketNgin SCPS

군 위성 가속기

Page 80: [233] level 2 network programming using packet ngin rtos

PacketNgin IoT Gateway

건국대학교/중소기업청 Source: http://wirelessall.co.kr/goods_detail.php?goodsIdx=10231

Page 81: [233] level 2 network programming using packet ngin rtos

4. Wrap-up

Page 82: [233] level 2 network programming using packet ngin rtos

Summary

• Host network programming vs Network node programming

• OSI model level 2 network programming

• ARP, ICMP, TCP and DPI

• Level 2 Network Applications

Page 83: [233] level 2 network programming using packet ngin rtos

4.1 Summary

Page 84: [233] level 2 network programming using packet ngin rtos

What will you do if you can Program the network?

[email protected]

packetngin.org