본문 바로가기

개발👩‍💻/네트워크

11-2:Network Layer: Generalized Forwarding

728x90

Network Layer: SDN

지금가지는 목적지 주소를 기반으로하는 포워딩 방식에 대해서 다뤄봤는데,

그것 말도고 generalized forwarding 은 어떻게 동작하고, 소프트웨어적 네트워크는 어떻게 동작하는지 알아보자

 

앞에서 살펴본 포워딩 방식을 목적지 IP 주소만 보고 포워딩 테이블에 맞춰 포워딩을 했다면

이 일반적인 포워딩은 이 IP 주소뿐아니라 헤더에 있는 다른 필드들을 가지고 어떤 액션을 할지를 결정한다.

 

그럼 이런 액션에 무슨 종류가 있냐면, 몇가지 대표적인것은

어떤 조건에 해당하는 애는 드랍 시킬수도 있고, 카피 시킬 수도 있고, 헤더의 특정 부분을 바꿔치기할 수있고, 패킷을 로깅하는 등의 액션을 취할 수 있다.

 

Flow table

플로우 테이블이라는 것은 라우팅 테이블과 비슷한데 조금 더 자세한 추가적인 정보들을 가지고 판단을 하는 테이블이다.

라우팅 테이블을 어떻게 보면 포함한다고 생각하면된다.

기본적으로 플로우 테이블이라고하면 매치, 어떤것과 매치가 되는지 조건을나타내는 부분과 ,그 조건에 맞을 때 어떤 액션을 해야할지 나타내는 부분이있다.

 

어떤 조건을 만족했을 때 어떤 액션을 취할지를 적어 놓은 테이블이다.

 

결국 플로우라는 것은 헤더에 있는 필드값들에 의해서 결정이된다.

링크레이어, 네트워크, 트랜스포트 레이어에 있는 필드들을 다 고려해서 액션을 취하게 된다.

 

일반적인 포워딩에서는 몇가지 방법을 사용하는데

일단은 매치,

매치는 헤더의 필드 값을 보고 이 값들이 실제로 패턴이 맞는지 보는 작업을 이야기한다.

액션은 어떤 조건이만족을했을때 드랍을 할것인지, 포워딩할것인지, 패킷의 헤더 일정부분을 수정해서 NAT에서 포트넘버랑 IP 주소를 수정하는 작업을 할 것인지, 패킷을 특정 컨트롤러로 보낼 수도 있다.

 

그리고 포워딩테이블에는 프라이오리티등도 표현되어야한다.

패턴이 겹치는 경우에는어떤게우선이 되어 실행이되어야하는지 정의되어있어야하고

 

그리고 카운터

이것은 statistics, 통계정보로 생각을 하면되는데, 어떤 조건에 만족하는 것에 대해서 어떤 액션을 취할 때마다 몇개의 패킷들이 어떤 조건을 만족해서 어떤 액션을 취했고 전체 바이트는 얼마나 되는지를 통계로 남겨두는 카운터들이 있다.

 

와일드카드(*)

그래서 예시를 보면 플로우테이블에는 위와 같이 어떤 소스가 데스티네이션과 같이 해당하는데이터그램이 들어오게 되면2번 포트로 포워딩을 해라,

그리고 밑에것에 만족하면 드랍,

그 밑에 것 만족하면 컨트롤러로 패킷을 보내라는 의미

 

앞에 것이 매치 조건이고 뒤에 것이 액션에 해당한다.

 

아까 매치랑 액션이 있고, 카운터 같은 것들이 있다고 했는데, 

매치는 헤더에 있는 값들을 확인해서 매치되는 것을 비교를 한다.

헤더 필드에는 무엇이 있냐하면,

위와 같이 링크레이어, 네트워크레이어, 트랜스포트레이어들을 모두 포함을 한다.

그래서 포트 넘버를 고려할 수 있고,

네트워크 레이어에서 서비스 타입, 소스, 데스티네이션 고려를하고, 

위와 같은 것들을 각각 고려할 수 있다.

 

그래서 이런 것에 대해서 4가지 정도로 액션을 취할 수 있다.

패킷을 어떤 포트로 포워딩을 할 수 있고,

패킷을 드랍할 수도 있고,

헤더에 있는 어떤 필드들을 수정할 수 있고 NAT

어떤 게 들어왔을 때 그것을 감싸고 컨트롤러로 보낼 수도있을 것이다.

 

스펙같은 경우, 해당 조건에 해당하는 매치가 됐고 어던 액션을 취했는지, 이 액션을 취한 패킷의 수, 바이트 수를 카운트를 해서 이 스펙 정보를 활용을 해서 라우팅 같은 것을 할 때 참조할 수 있다.

 

 

일반적인 포워딩은 목적지 기반의 포워딩 방법을 포함을 한다라고 생각하면 된다.

목적지 기반 포워딩도 구현할 수 있다.

예를 들어 IP destination만 참조해서 여기에 해당하는 데이터그램이 오면 해당되는 포트로 보낼 수있다.

 

파이어월 같은 경우도

TCP에 포트 22가 (22는 보통 시큐어 쉘, ssh에서 사용하는 포트) 들어왔을 때 드랍을 하여 접근을 막아버릴 수도 있겠다.

포트뿐만 아니라 특정 호스트(소스) 자체를 블럭할 수도 있다.

 

그리고 레이어 2: 링크계층에서 MAC 주소를 보고 어떤 포트로 포워딩을 할 것인지 선택할 수 있다.

링크계층에서 하는 이더넷 스위치의 기능도 할 수 있다.

 

오픈플로우를 추상화를 해보면

match + action을 통해서 많은 것들을 추상화 하고 있다.

우선 라우터의 기능을 할 수 있다

일반전인 라우터의 기능은 IP 주소를 활용해서 가장 긴 목적지 IP에 대한 프리픽스 매치를 확인하여 포워딩을 하는 라우터처럼 만들 수도 있다.

그리고 맥 어드레스가 맞으면 포워딩을 하라고 할 수도 있다.

파이어월 같은경우에는

아이피 주소나 TCP, UDP 포트가 맞으면 그에 맞는 것을 허용, 혹은 블락할 수도 있다.

NAT도 구현할 수 있다.

IP 주소와, 포트가 맞으면 그에 맞는 새로운 IP, 포트로 바꿔치기 할 수도 있을 것이다.

 

위 네개의 기능을 match+action으로 구현할 수가 있다.

 

네트워크 전체 관점에서도 오픈플로우를 다룰수 있다.

이런것들을 잘 세팅을 하면 전체적인 네트워크의 특정 경로의 트래픽이 몰리는 것을 방지할 수도 있을 것이다.

 

매치랑 액션을 잘활용해서 패킷의 헤더에 있는 값들을 비교, 액션할 수 있고,

이 포워딩은 네트워크, 링크, 트랜스포트 레이어를 다 확인을 한다.

네트워크 전체 관점에서 프로그래밍을 통해 네트워크 전체 효율을 높일 수도 있다.

 

P4 하드웨어적으로 매치랑 액션을 가능하게 해주는, 하드웨어가 있고 매치, 액션을 표현해줄수있는프로그램 랭귀지

이것으로 룰이랑 이런것들 구현해서

이 언어를 지원하는 하드웨어 장치가 있는데 여기다그펌웨어를 업로드하면 이 규칙이 적용된 것처럼 동작을 하는 것. 프로그램잉 가능한 스위치 라우터가 요즘에는 존재한다.

 

원래 네트워크가 만들어지기전에전화만있을때는 양끝에 전화만 있었다. 스마트한 기능 전혀 없고, 목소리만 들리는 상황

그리고 지금 같은인터넷 세상이 오면서 PC, 노트북, 서버들도 생기고 했다. 인터넷이라는 새로운 것이 만들어지면서, 네트워크 계층들은 단순한 역할만은 수행했다. 다만 그 엣지에 있는 부분들을 많은 부분들을 수행하게 됐다.

엣지가 점점 똑똑해졌고, 2005년 이후에는 점점 엣지에 있는 애들이 똑똑해지고 많아진다. 그러면서 가운데 라우터 같은 애들도 단순한 기능만으로 불가능해지므로 다른 프로그래밍 적인 부분도 늘어나고 있고, 얘네도 점점 스마트 해지고 있고, 모든 레이어가 똑똑해지고 있는 추세이다.

 

여기까지가 네트워크 계층 중 data plane 에 대한 설명

반응형