Network Control Plane
컨트롤 플레인에는 전통적인 라우팅 알고리즘 (하지만 여전히 자주 쓰인다. 포워딩 테이블을 만드는데 사용한다.) 과 SDN 컨트롤러에 대한 내용을 다룬다.
또 network 관리와 설정하는 것도 control plane 영역에서 다룬다.
실제 인터넷에서 널리 사용하는 라우팅 프로토콜로 OSPF 와 BGP가 있다.
두 프로토콜이 적용되는 영역이 달라서 두 프로토콜 모두 중요하게 사용된다.
상술한 전통적인 라우팅 알고리즘 내용과 관련있다.
SDN 컨트롤러 개념을 구현한 프로토콜로는 OpenFlow, ODL, ONOS 컨트롤러 등이 있다.
각각은 모두 특정 브랜드 이름이고, OpenFlow는 지난 글에서 정리했듯 공개된 표준이고, ODL과 ONOS은 일종의 OS이다.
네트워크를 관리하는 프로토콜 중에 ICMP (Internet Control Management Protocol) 이 있다.
그 밖에도 SNMP, YANG/NETCONF 와 같은 프로토콜이 있다.
라우팅 알고리즘으로 사용되는 것 중 대표적인 것이 link state 와 distance vector 이다.
이 둘은 라우팅 프로토콜을 방법(알고리즘)으로 구분한 것이다.
라우팅 프로토콜의 방법으로 이 2가지가 있다는 것
(따라서 이 둘은 특정한 라우팅 프로토콜의 이름이고, 가장 널리 사용되는 알고리즘이라고 생각할 수 있다?)
이 특정한 방법을 채택한 특정한 프로토콜의 이름이 있다.
OSPF 는 link state 를 사용하는 대표적인 프로토콜이고,
RIP 는 distance vector를 사용하는 대표적인 프로토콜이다.
(수업 중에는 ls, dv 의 가장 대표적인 이름이 각각 OSPF, RIP 라고 설명하셨다.)
따라서 이 둘은 라우팅 프로토콜에 대한 '알고리즘 구분' 이라고 생각하면 된다.
OSPF는 intra-ISP 라우팅 프로토콜로, ISP 내부에서 사용하는 라우팅 프로토콜이다.
BGP 는 inter-ISP 라우팅 프로토콜로, ISP와 ISP 사이에서 사용하는 라우팅 프로토콜이다.
(Broad Gateway Protocol)
Network Layer의 주요 기능
네트워크 레이어에서 수행하는 주요 기능은 forwarding 과 routing 2가지로 구분된다.
포워딩은 라우터의 input port 에서 output port로 패킷이 들어오고 나가는 방법을 결정하는 과정이었다.
라우팅은 전체적인 라우터와 라우터 사이 경로를 설정하는 방법을 말한다.
그리고 이를 'control plane' 이라고 한다.
control plane을 구현하는데에는 2가지 방식이 있다.
첫번째는 기존의 전통적인 방식 (하지만 여전히 많이 사용하는 방식) 이다.
각 라우터마다 독자적으로 자신의 필요한 자료구조 (포워딩 테이블) 를 생성한다.
라우터끼리 정보를 주고 받은 뒤, 라우터도 컴퓨터니까 주고받은 정보를 토대로 최적의 경로를 라우팅 알고리즘에 따라 계산해서 포워딩 테이블을 만든다.
이때, 라우터마다 현재 네트워크 상황을 보는 관점이 다를 수 있다.
즉, 라우터 A가 생각하는 x까지의 최단 경로와 라우터 B가 생각하는 x까지의 최단 경로가 다를 수 있다.
이 방식은 각 라우팅 알고리즘의 컴포넌트가 모든 라우터에 존재한다.
각 라우터는 최소한 2가지의 라우팅 프로토콜을 돌려야한다.
첫번째는 inter-ISP 라우팅 프로토콜이고, 두번째는 intra-ISP 프로토콜이다.
라우터가 다른 ISP와 연결되는 지점이 아니라면 외부 ISP의 정보를 받기만 하고, 다른 ISP와의 연결지점에 있는 라우터들은 활발하게 다른 라우터와 정보를 교환한다.
어떤 라우터로 들어온 패킷을 다른 라우터로 보내려면, 위와 같이 포워딩 테이블이 필요하다.
이때 포워딩 테이블을 만들 때는 다른 라우터와 정보를 주고 받은 뒤, 이 정보를 input으로 넣고 라우팅 알고리즘을 돌려서 만든다. 이때 돌릴 수 있는 라우팅 알고리즘은 여러가지가 있어서 하나를 선택한다.
두번째는 SDN에 기반하는 방식이다.
이 방법은 클라우드에 컨트롤러라는 일종의 서버가 필요한 자료구조를 만들어 공급하기 때문에 centralized contorl 이 가능하고, consistency가 유지된다.
따라서 이때는 네트워크를 보는 관점이 컨트롤러가 보는 관점으로 모두 통일된다.
이렇게 라우터 위에 remote controller가 존재한다.
보통 클라우드 상에 존재하는 서버가 이 역할을 수행한다.
이 컨트롤러가 직접 계산해서 포어딩 테이블을 만든 뒤, 각 라우터에 뿌려준다.
이때 각각의 라우터는 컨트롤러와 통신하기 위해 agent가 존재한다. (CA)
Routing Protocol
라우팅 프로토콜의 목표는 '좋은' 경로를 찾는 것이다.
그렇다면 '좋은 경로' 란 뭘까?
기준은 여러가지가 있겠지만, 예를 들면 라우터를 최소로 거쳐가거나, 대역폭이 일정 대역폭 이상인 경로만 따라가는 것 등이 있다.
따라서 좋은 패스를 구하는 어떤 판단 기준이 필요한데, 이 기준은 ISP마다 다를 수 있다.
만약 대역폭을 좋은 패스의 기준으로 둔다면, 각 라우터 링크에 cost를 매길 때, 대역폭의 역수를 cost로 매길 수 있을 것이다.
이런식으로 링크에 cost를 매겨서 그 cost의 비용이 최소가 되는 경로를 찾으면 이를 좋은 경로라고 부를 수 있을 것이다.
대역폭 말고도 progapation time, router 개수 등을 cost로 넣을 수 있다.
(만약 라우터 개수를 넣는다면 모든 링크의 cost를 1로 설정하면 될 것이다.)
최단 경로를 찾기 위해 수학적으로 모델링을 하기 제일 좋은 방법은 그래프일 것이다.
위 그림과 같이 라우터와 링크를 그래프의 노드와 엣지로 보고 모델링한다.
그리고 각 엣지에 cost를 가중치로 매긴다. (라우터 개수, 대역폭, 혼잡 정도 등..)
cost는 ISP의 네트워크 관리 팀에서 적절하게 부여한다.
만약 임의 두 노드 사이에 직접 연결된 간선이 없다면 그 둘 사이의 비용은 무한대로 보면 된다.
엄밀하게는 간선에 방향성이 부여되는 것이 맞다.
가는 비용과 오는 비용이 실제로는 다를 수 있기 때문이다. 하지만 문제를 단순화시키기 위해서 무방향 그래프로 표현하였다.
라우팅 알고리즘은 위와 같은 기준으로 분류할 수 있다.
1. global vs decentralized
중앙집권적인지, 분산적인지를 보는 것이다.
global 하다면, 모든 라우터가 어떤 경로를 따라갈지를 계산하기 위해 전역적으로 공유하는 전체 네트워크 그림을 갖고 있다는 가정을 하는 것이다.
각자 서로 자신이 일고있는 link 정보를 주고받으면서 전체적인 그래프 맵을 먼저 그리고, 그 맵을 대상으로 최단경로 알고리즘 (다익스트라) 을 돌려서 최단 경로를 찾는다. link state (LS) 알고리즘이 이 쪽에 속한다. 요즘은 이 알고리즘을 사용하는 OFPF 프로토콜이 가장 많이 사용된다.
decentralized 하다면, 어떤 경로를 찾기 위해 내 이웃 노드에게 그 경로까지 가는 최단 경로를 물어보고, 그 이웃노드가 정보를 알려주면 그 정보를 신뢰한 뒤, 자신이 갖고 있는 링크 정보를 토대로 최단 경로를 찾는 방식이다.
그 이웃노드도 정보를 얻기 위해 다시 주변의 이웃노드에게 물어보는 것을 재귀적으로 반복하는 방식이다.
최단 경로 알고리즘으로는 벨만-포드 알고리즘과 동일하다.
distance vector (DV) 알고리즘이 이 분류에 속하며, RIP 라는 프로토콜이 이 알고리즘을 사용한다.
즉, 각 라우터가 독립적으로 계산하는 분산된 알고리즘이며, 각 라우터는 자신과 자신 주변의 정보 밖에 모른다.
DV 방식은 네트워크 혼잡이 발생해서 cost가 바뀌었을 때, 이를 주변 노드에 바로 알리면서 실시간으로 네트워크 상황을 공유하는데, 얼핏보면 더 좋아보여도 각 노드가 이를 업데이트하는 시점이 다르기 때문에, dynamic 한 것이 좋기만 하지는 않다.
2. staic vs dynamic
동적으로 cost 의 변경을 바로바로 변경하느냐, 아니면 cost 의 변경을 반영하는데 시간이 조금 걸리냐의 차이이다.
'CS > 컴퓨터 네트워크' 카테고리의 다른 글
[컴퓨터 네트워크] 34. Network Layer (10) : Distance Vector (0) | 2024.06.08 |
---|---|
[컴퓨터 네트워크] 33. Network Layer (9) : Link State (0) | 2024.06.08 |
[컴퓨터 네트워크] 31. Network Layer (7) : Middlebox (0) | 2024.06.07 |
[컴퓨터 네트워크] 30. Network Layer (6) : Generalized Forwarding (0) | 2024.06.06 |
[컴퓨터 네트워크] 29. Network Layer (5) : IPv6 (0) | 2024.06.06 |