본문 바로가기

IT/SDN with Java Socket Programming

[Socket/SDN 기초] Socket Programming과 Software Defined Network(SDN)에 대한 사전 지식

Openflow를 이용한 SDN(Software Defined Network) ControllerGUI와 함께 구현하는 과제를 받았습니다. 이를 위하여 Java Socket Programming을 이용하려고 합니다. GUI(Graphic User Interface)와 더불어 AgentSDN Controller에서 Openflow를 이용해 조작하기 위해서는 Fox라는 단순화(Simplified)SDN Controller를 이용하여 구현합니다.

FOXC언어 기반으로 구현되어 있기 때문에 GUI가 좋지 않습니다. C에서 그럴싸하게 GUI 구현하는 것은 매우 어렵다고 합니다. 하지만 Java에서는 AWTSwing이라는 GUI를 제공하기 때문에 편하게 구현이 가능합니다.

 

SDN 컨트롤러 구현에 앞서 제가 항상 헷갈려했던 포트와 소켓에 대해 다시 정리하겠습니다.

포트(Port)?

- 인터넷 프로토콜 스위치에서 포트는 운영 체제 통신의 종단점이다. 소프트웨어에서는 네트워크 서비스나 특정 프로세스를 식별하는 논리 단위이다. 주로 포트를 사용하는 프로토콜은 전송 계층 프로토콜이라 하며, 예를 들어 TCP(Transmission Control Protocol)UDP(User Datagram Protocol)가 있다. 각 포트는 번호로 구별되며 이 번호를 포트번호라고 한다. 포트 번호는 IP 주소와 함께 쓰여 해당하는 프로토콜에 의해 사용된다.
출처 : 위키백과(포트, 컴퓨터 네트워킹)
https://ko.wikipedia.org/wiki/%ED%8F%AC%ED%8A%B8_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9)

 

포트 (컴퓨터 네트워킹) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 인터넷 프로토콜 스위트에서 포트(port)는 운영 체제 통신의 종단점이다. 이 용어는 하드웨어 장치에도 사용되지만, 소프트웨어에서는 네트워크 서비스나 특정

ko.wikipedia.org

대표적인 포트 번호는

FTP(File Transfer Protocol,데이터 보낼 때) : 20

SSH(Secured-SHell) : 22

DNS(Domain Name Service) :53

HTTP(Hyper Text Transfer Protocol, ) : 80

TLS/SSL 방식의 HTTP :443

 

소켓(Socket)이란?

- 소켓은 기본적으로 네트워킹을 위한 I/O(입력, 출력)
출처 : 정보통신기술용어해설
http://www.ktword.co.kr/test/search/srch.php

- 두 프로그램이 네트워크를 통해 서로 통신을 수행할 수 있도록 양쪽에 생성되는 링크의 단자입니다

- 두 소켓이 연결되면 서로 다른 프로세스끼리 데이터 전달이 가능합니다

- 네트워크 상에서 돌아가는 두 개의 프로그램 사이의 식별을 가능하게 합니다

 

개인적으로 포트와 소켓은 다음과 같은 예시로 구분합니다.

데이터 통신 시 데이터를 식당 예약을 한 손님이라고 가정하면 포트는 식당의 출입구이고 소켓은 해당 손님이 예약한 방으로 안내해주는 길이라고 생각합니다.

 

TCP에서의 소켓

1) 동기 모드(Block) - 데이터가 올 때까지 대기

동기 모드는 말 그대로 통신이 끊어지기 전까지는 계속 프로세스 점유합니다.

(시간에 민감한 데이터 통신, 혹은 중요도가 높은 통신 시 사용)

 

2) 비동기 모드(non-Block) - 수신된 데이터가 없음을 알리고 넘김

비동기 모드는 통신 데이터가 없으면 프로세스 실행권한을 넘깁니다.

(, 프로세서를 효율적으로 사용하게 함)

 

다음은 SDN에 대하여 간단하게 알아보고, 기존 네트워크 스위치(Network Switch)와 어떤 부분이 다른지를 알아보고자 합니다.

 

기존 네트워크 스위치 구조(Traditional Network Switch Architecture)

<기존 네트워크 스위치 구조>

- 포트를 통해서 데이터가 들어오면 Control Plane에서 어떻게 데이터를 전송할지 경로를 정합니다. 대학교 때 배운 Routing Algorithm(라우팅 알고리즘, ex : 디피-헬만 알고리즘, 다익스트라 알고리즘 등)을 이용해 최적 경로를 설정하면 Data Plane에서 포워딩(데이터를 전송)합니다.

- 기존 네트워크 스위치는 경로 설정(Routing)과 데이터 전송(Forwarding)을 모두 처리합니다.

- 네트워크 스위치는 단일로 동작하기 때문에 설정 변경이 필요할 시 기사님이 일일이 가서 직접 변경해야 하는 불편함이 있습니다. 또한 이로 인한 비용이 드는 단점도 존재합니다.

- 벤더(Bender) 종속성을 가집니다. 벤더란 네트워크 스위치를 제작하는 회사를 의미하는데 해당 회사 제품을 사용하면 그 회사에 종속성을 가지게 된다는 의미입니다.

 

SDN(Software Defined Network) Architecture

SDN은 크게 3가지 구조로 나뉘어져 있습니다.

<SDN의 계층 3가지>

- SDN은 총 3가지 Layer로 구분이 됩니다. Application Layer는 응용 프로그램 계층을 의미하며 사용자가 사용하는 어플리케이션을 의미합니다.

- Control Layer에서는 기존 네트워크 스위치가 담당하던 라우팅 관련 기능을 Controller에서 따로 관리합니다. SDN ControllerControl Layer에서 Flow Rule(어떻게 라우팅 할지)을 정하여 Infrastructure Layer에 있는 Network Device(네트워크 스위치)에 전달합니다.

- Network Device들은 Controller가 정해준대로 Forwarding만 합니다.

- Application LayerControl Layer APINorthBound Interface 라고 합니다. NorthBound Interface는 표준화가 되어 있지 않기 때문에 어떤 어플리케이션을 사용하느냐에 따라 각각 다릅니다.

- Control LayerInfrastructure Layer 간의 InterfaceSouthBound Interface 라고 합니다. SouthBound Interface는 표준화 되어있는 Interface가 몇 개 있는데 대표적으로 ‘Openflow'가 있습니다.

 

SDN을 사용하면 여러 장단점이 있지만 가장 큰 장점은 비용입니다.

중앙에서 모든 네트워크 트래픽을 모니터링하고 소프트웨어를 이용해 Flow Rule을 정하기 때문에 Configuration(설정)이 한번에 가능하다는 점입니다.

또한 벤더 종속성도 기존 네트워크 구조보다 덜하다는 특징이 있습니다.