전공수업

[컴퓨터네트워크2] 하향식접근 5장 (1) - Control plane, 라우팅 프로토콜

dayeonsheep 2025. 3. 11. 01:04

5장 들어가기 전에 용어 정리

  • Control plane(제어 평면) : 네트워크 전체를 아우르는 구성요소
    • 데이터그램이 출발지 호스트부터 목적지 호스트까지의 경로를 따라 전달하는 방법
      • 네트워크 계층 구성요소와 서비스의 설정방법, 관리방법 또한 제어
  • OSPF : 단일 ISP 네트워크 내에서 동작하는 라우팅 프로토콜
  • BGP : 인터넷의 모든 네트워크를 상호연결하는 역할을 하는 라우팅 프로토콜
    • ㄴ BGP는 흔히 인터넷을 한데 묶는 '접착제’로 간주
  • 전통적으로, 제어 평면 라우팅 프로토콜은 라우터 내에 데이터 평면의 패킷 전달 기능과 한 덩어리로 뭉쳐져 구현되어 있어서 융통성이 없었음
  • 소프트웨어 정의 네트워킹(software-defined networking, SDN)
    • 데이터 평면과 제어 평면을 명확히 분리
    • 제어 평면 기능을 자신이 관리하는 라우터의 전달 기능 요소와 분리된 별도의 원격‘ 컨트롤러’ 서비스에 구현

 

5.1.  개요

포워딩 테이블(목적지 기반 포워딩의 경우)과 플로우 테이블(일반화된 포워딩의 경우)이 네트워크 계층의 데이터 평면(data plane)과 제어 평면(control plane)을 연결하는 주요 요소였음

  • 이 테이블들이 라우터의 로컬 데이터 평면에서의 포워딩을 지정
  • 플로우 테이블은 라우터가 취하는 행동은 다양하다

 

network layer functions

data plane / control plane 으로 구성
(그 밑에는 data link layer, physical layer)

  • forwarding ⇒ data plane

→ 라우터의 입력에서 적절한 라우터 출력으로 패킷을 이동함

(우체국 아저씨가 지역별로 박스 분류하는거, 패킷이 오면 목적지 주소를 보고 어느 방향으로 갈지)

  • routing ⇒ control plane

→ 패킷이 소스에서 목적지로 이동하는 경로를 결정

전달하기 위한 테이블 → forwarding table,

목적지가 a면 출력이 2번이다, 목적지가 b면 출력이 3번이다, 이런 걸 미리 누가 만들어놓느냐,

⇒ 라우팅 전문으로 하는 파티에서 미리 만들어 놓는다

어떤 경로로 가면 가장 shortest path로 갈지

OSPF, BGP, intro-as 프로토콜 , inter-as 라우팅 프로토콜

두 개의 hireachical 하는 걸로 정의되어있다
여러 노드들이 연결되어 있는데 그걸 하나의 노드로 보고 as를 통해 통신을 하게 하는 거다

→ 그 때 사용하는 게 BGP라고 하는거고 as 내부에서 사용하는 것 중 하나가 OSPF라는 프로토콜

 

저 프로토콜들 뭔지 몰라서 물어봄 (AS, Intra-AS, Inter-AS)

더보기

Autonomous System (AS)

  • AS(자율 시스템)은 하나의 네트워크 관리 기관(ISP, 기업, 대학교 등)에 의해 운영되는 라우터들의 집합이다.
  • AS 내부에서는 자체적인 라우팅 정책을 따르고, 외부 AS와는 표준 프로토콜을 사용해 통신한다.

Intra-AS Routing (AS 내부 라우팅)

  • 같은 AS 내에서 사용하는 라우팅 방식이며, 일반적으로 링크 상태 라우팅을 사용한다.
  • 대표적인 프로토콜: OSPF(Open Shortest Path First)
    • 링크 상태 정보를 활용하여 최단 경로를 찾는 프로토콜
    • 빠른 수렴 속도와 계층적 라우팅 지원
    • 내부 라우팅에 최적화됨

Inter-AS Routing (AS 간 라우팅)

  • 서로 다른 AS 간의 통신을 위한 라우팅 방식
  • 일반적으로 경로 벡터 라우팅을 사용한다.
  • 대표적인 프로토콜: BGP(Border Gateway Protocol)
    • AS 간 최적 경로를 찾고, 정책 기반의 경로 선택 가능
    • 인터넷에서 사용되는 표준 라우팅 프로토콜
    • 경로 정보(AS 경로)를 기반으로 라우팅 결정

즉, OSPF는 AS 내부에서 사용하는 라우팅 프로토콜, BGP는 AS 간 라우팅을 담당하는 프로토콜이다.

 

 

  • network control plane 을 구조화하는 두 가지 접근 방식 (포워딩 테이블 or 플로우 테이블 생성하는 방법)
  1. per router control (traditional)
    1. 라우터 컨트롤마다 다 돌린다
    2. 모든 라우터 각각에서 라우팅 알고리즘이 동작하여 테이블을 제작
  2. centralized control (software defined networking)
    1. 논리적으로 집중된 컨트롤러가 테이블을 작성
    2. 서버가 여러개라도 마치 하나의 중앙 서비스 지점에 라우팅 서비스가 구현된 것처럼 서비스에 접근한다는 의미
    3. 누군가 정보를 다 계산해줘서 내가 중심이 돼서 계산을 해서 forwarding 정보를 준다, logically-논리적으로, 혼자 계산하는 놈이 혼자 하기 뭐하면 다른 사람들 도움 받아서, 분산시켜서 계산시킨다. 근데 여러사람 입장에서는 한 사람이 계산해서 주는 것 같이 보임

미들박스라는 여러 장비가 있는데 그것도 centralized control에서 처리할 수 있겠다, 라우터는 가벼운 역할만 하고 centralized에 서버같은 걸 둬서 처리하겠다 라는 것

 

per-router control plane

💡 개별 라우팅 알고리즘들이 제어 평면에서 상호작용한다.

 

모든 라우터 안에 라우팅 알고리즘 컴포넌트가 있다.

그런 애들이 control plane이라고하는 개념적인 범위에서 상호작용 한다

각자가 forwarding table을 만든다

헤더를 붙여가는 과정 = 캡슐화, encaptulation, 아래에서 위 계층으로 올라가면서는 디캡슐레이션

network layer에서는 3계층 헤더만 본다, destination 주소를 나타내고 있다

  • 포워딩과 라우팅 기능이 모두 개별 라우터에 포함되어 있다.
  • 각 라우터는 다른 라우터의 라우팅 구성요소와 통신하여 자신의 포워딩 테이블의값을 계산하는 라우팅 구성요소를 갖고 있다.
  • OSPF, BGP 프로토콜이 이 라우터별 제어 방식을 기반으로 한다.

 

Software-Defined Networking (SDN) control plane (logically centralized control)

💡 일반적으로 원격에 위치한 별개의 컨트롤러가 지역의 제어 에이전트(CA)와 상호작용한다.

 

라우터들이 쭉 있는데 직접 계산하는 게 아니고 control agent, agent => 대신해서 뭘 해준다

(미들박스의 NAT, firewall, load balancing 그런 게 여기에 애플리케이션으르 만들어서 여러 기능을 할 수 있는 게 하는거, 지금은 라우팅 기술에서만 집중)

4장에서 destination based forwarding, sw defined forwarding-generalized forwarding

라우팅 프로토콜을 사용한 라우팅 애플리케이션이 저기 있는거고 라우팅 안에 포워딩 테이블을 만들어서 각자 둔다

일반화된 ‘매치 플러스 액션(match plus action)’ 추상화를 통해 라우터는 기존에는 별도로 장치로 구현되었던 다양한 기능(부하 분산, 방화벽, NAT) 뿐만 아니라 전통적인 IP 포워딩을 수행 가능

컨트롤러는 프로토콜을 통해 각 라우터의 제어 에이전트(control agent, CA)와 상호작용하여 라우터의 플로우 테이블을 구성 및 관리한다.

  • 컨트롤러 : 잘 정의된 프로토콜을 통해 각 라우터의 제어 에이전트(CA)와 상호작용
  • → 라우터의 플로우 테이블을 구성 및 관리
  • 제어 에이전트(CA) : 일반적으로 컨트롤러와 통신하고 컨트롤러의 명령을 수행하는 최소한의 기능만 가짐

라우터별 제어 방식과는 다르게, CA는 서로 직접 상호작용하지 않으며, 포워딩 테이블을 계산하는 데도 적극적으로 참여하지 않는다. ⇒ 라우터별 제어와 논리적 중앙 집중형 제어의 주요 차이점

  • 성능 저하 문제(고장, 호스트 수의 증가)에 대응
  • SDN 은 논리적 중앙 집중형 제어를 채택
  • SDN 제어는 4G/5G 셀룰러 네트워킹에서도 핵심 기술

 

5.2.  라우팅 프로토콜

 

라우팅 프로토콜의 목적

  • 경로를 찾는 것
  • 송신자부터 수신자까지 라우터의 네트워크를 통과하는 최소 비용 경로(루트)를 결정하는 것
    • 목적지를 가기 위한 라우팅 (good path) good이라는 게 뭔가, 상황에 따라서 good path라는 게 달라질 수 있다(사람으로 치면 돈과 시간 중 뭐가 많은지에 따라 다른 것처럼…), 비용이 제일 적게 드는지 , 빠른지, 혼잡하지 않은지
    • 우체국: 집에서 집 앞에까지 편지 전달해준다 (host라는거, trnasportation layer에서는 host대신 process라는 용어를 썼음)
    • 이쪽 컴퓨터에서 이쪽 컴퓨터까지, network layer까지, 그 위에 올라가려면 process가 있다, 그 Process는 컴퓨터 안에 이메일, 웹서버 등등이 돌아가는데 여기에 뭐가 왔는데 어느 창에 줘야되는지 구별을 할 줄 알아야되는데 그걸 구별하기 위해 application을 나타내기 위한 port번호가 필요하다 (web은 80, email은 25, telnet은 23번 같은 등등)

 

그래프 추상화 : link costs

 

저 추상화 그림에서 노드가 라우터

  • Graph = (Node, Edge)
    • graph: G = (N,E)
  • Node = 라우터들의 집합
    • N: set of routers = { u, v, w, x, y, z }
  • Edge = 노드와 노드를 연결하는 link
    • E: set of links ={ (u,v), (u,x), (v,x), (v,w), (x,w), (x,y), (w,y), (w,z), (y,z) }

w와 z 사이의 cost는 5다, 직접 연결되어있는 거라 direct link,

u에서 z처럼 direct link가 없으면 무한대로 계산

cost는 network operator가 설정한다~

  • u에서 z에 가는 데 몇 개의 라우터가 제일 가까운지, 그런 걸 쓰는 게 RIP라고 하는 프로토콜이 있음, 3개를 거쳐가면 4, 2개 거치면 빠르지만 10, 어떤 기준이냐에 따라 달라질 수 있다.
  • 네트워크 운영자가 정의한 비용: 항상 1이거나, 대역폭과 반비례하거나, 혼잡과 반비례할 수 있다
    • bandwidth의 역이다. 100 cm 파이프와 1cm 파이프라고하면 1+ 1+ 1 가깝겠지만 cost라고 하는 값을 매길 때 1/100, 1/3 그걸 계산해서… 라우터를 설정할 때 bandwidth가 작으면 큰 값을 집어넣고, 반대면 반대. (이것까지 상세히 알 필요는 없다) 그냥 넽웤 오퍼레이터가 cost를 집어넣는구나~

혼잡이 적은데로 가야된다, 혼잡이 많은 것이 값이 큰 값이 되어야하고 적은 곳이 적은 값이 되어야 함

처음에, u는 x 랑 w랑 연결되어있으니까 나의 neighbor가 쟤네가 cost가 얼마다를 알음, 근데 그 이웃애들도 다른 애들이랑 연결되어있으니까 그 정보를 u한테 줌, 내가 정보 받았으면 그 정보 옆에 또 주고 주고

 

라우팅 알고리즘 분류

  1. global (중앙집중형 라우팅): 모든 라우터가 link cost info를 가지고 있다 (link state 알고리즘)
    1. 네트워크 전체에 대한 완전한 정보를 가지고 출발지와 목적지 사이의 최소 비용 경로를 계산, 즉 모든 노드 사이의 연결 상태와 링크 비용을 입력값
    2. 각 정보는 계산 전 미리 알고 있어야 함.
    3. 주요 특징 : 이 연결과 링크 비용에 대한 완전한 정보를 가짐
    4. 이전 추상 그래프에서 u는 x 랑 w랑 연결되어있으니까 나의 neighbor가 쟤네가 cost가 얼마다를 알음, 근데 그 이웃애들도 다른 애들이랑 연결되어있으니까 그 정보를 u한테 줌, 내가 정보 받았으면 그 정보 옆에 또 주고 주고
    -> flooding 한다고 함 -> 홍수가 나면 모든 게 다 흘러들어가는 것 같은 이미지
    1. link state라고 부른다. 그런 정보를 다 알려준다, 모든 놈들이 똑같은 정보를 가지고 스스로 계산을 해서 자기 라우팅 포워딩 테이블을 만든다
      → 그런 라우팅 알고리즘 중 하나가 OSPF
      ⇒ cost정보 주고받음
  2. decentralized (분산라우팅)
    1. 최소 비용 경로의 계산이 라우터들에 의해 반복적이고 분산된 방식으로 수행 됨
    2. 어떤 노드도 모든 링크 비용을 알지X, 대신 각 노드는 자신과 직접 연결된 링크에 대한 비용 정보만 가짐
      1. → 반복된 계산, 이웃 노드와의 정보 교환 ⇒ 최소 비용 경로 계산
    3. 각자가 중심이 돼서 목적을 이룬다, 자율적으로… 그렇게 하기 위해서는 여러 번의 계산을 반복하고, 정보의 교환을 반복해서 한다, neighbor하고
      여기서는 distance , 거리정보를 알려줌
    4. neighbor 들의 정보도 잘 갖고 있다가 끊기면 정보 꺼내서 활용… 라우터들은 처음엔 연결되어 있는 애들 정보만 알다가( 가다보면 더이상 아무도 neighbor들한테 정보를 안 전달해주는 평온한 상태가 되는데 그러면 자동으로 self termination 된다. 평행 상태가 된다. 히슨트? )
    5. distance vector와 유사한 BGP
      1. 각 노드가 네트워크 내 다른 모든 노드까지 비용(거리)의 추정값을 벡터 형태로 유지

상황을 시시각각 정보따라서 라우팅 경로를 바꾸는 방법도 있고, 한 번 정해놓고 1-2년마다 바꾸는 그런 방법 등이 있을거고
그게 dynamic vs static

  • 정적 라우팅 알고리즘(static routing algorithm)
    • 경로는 아주 느리게 변함 -> 종종 사람이 개입한 결과
  • 동적 라우팅 알고리즘(dynamic routing algorithm)
    • 네트워크 트래픽 부하(load)나 토폴로지(물리적 링크같은 것들) 변화에 따라 라우팅 경로를 변환
    • 주기적으로,혹은 토폴로지나 링크 비용의 변경에 직접적으로 응답하는 방식으로 수행
    • 장점 : 네트워크 변화에 빠르게 대응
    • 단점 : 경로의 루프(loop)나 경로 진동(oscillation) 같은 문제에 취약

 

다익스트라 link-state 라우팅 알고리즘

  • 어느 소스에서 다른 노드들까지의 최소 비용의 경로를 찾는 것, 내가 다른 넽웤이 어떻게 연결되어있는건지 정보를 수집해서 내가 계산하는 것 -> 이라서 centralized
  • network topology, link cost가 알려져 있다
    • 그걸 어떻게 알게 되느냐, link state advertisement (LSA), link state infromation을 플러딩이라는 방법을 써서 얘가 또 전달해주고 그래서 다 알게끔하는 거 -> 모든 노드가 같은 정보를 갖게 된다, 다른 노드와 똑같은 최소 비용 경로 집합을 계산 가능
    • 각 노드가 연결된 링크의 식별자와 비용 정보를 담은 링크 상태 패킷을 브로드캐스트하게 함으로써 가능
  • 몇 사람만 전달하는 건 multi-cast, 1:1로 하는 건 uni-cast

다른노드로 가는 least cost paths를 계산한다

그래서 자기자신 노드에 forwarding table을 만든다

이 알고리즘이 iterative, loop를 한 번, 두 번, 세 번 도는데

한 번 돌면 목적지 하나를 알게되고 한 바퀴 더 돌면 두 개의 목적지까지 거리를 알게되는거고 세 번돌면 세 번, → 이 그래프 안에 node가 n개 있으면 n번 돌아야됨
→ O(n), O(n^2), O(logn) 이런 복잡도를 그 n번 돌아야되는 거 가지고 계산을 함. n개의 목적지 노드에 대해 최소 비용 경로가 알려짐

  • c x,y = direct link, 직접 연결된 링크 코스트, direct link없으면 무한대
  • D(v) = v라는 곳까지의 거리, 확정된 게 아님, 현재 예상, 현재 5엿는데 나중엔 3이 될 수도 있음
  • p(v) = node v의 predecessor, v라고 하면 그 v의 앞의 노드, 그 노드가 보내준다, 소스에서 v로 가는 경로상에서 v노드의 앞의 노드가 누구냐
  • N’ = 노드가 n개가 있으면 처음엔 나 자신이니까 N’ 안에 들어가있을텐데 한 바퀴 돌면 노드 하나가 결정된다고 했는데, 나하고 연결된 애가 3개가 있는데 한 바퀴돌면 젤 가까운데가 1
    • 얘가 a라는 노드면 1이 제일 가까운데 뭐 2를 거쳐서 오면 더 길겠지. 그러면 a노드를 그 N’에다 집어넣고 계산해라
    • 확정된 노드 <-> D(v), 확정안된거
    • 모든 노드가 N’에 들어가게 되면 모든 노드들의 거리가 확정된다, 그럼 알고리즘이 끝난다.

1    Initialization:
2         N' = {u}
3         for all nodes v
4             if v is a neighbor of u /* u initially knows direct-path-cost only to  direct neighbors    */
5                 then D (v) = c (u, v)
6             else D(v) = ∞
7
8 Loop: 
9         find w not in N' such that D (w) is a minimum
10         add w to N'
11         update D (v) for each neighbor v of w and not in N’:
12             D (v) = min (D (v) , D (w) + c (w, v) )
13             /* new least-path-cost to v is either old least-cost-path to v or known least-cost-path to w plus direct-cost from w to v */
15     until all nodes in N'

초기화

2 : N’에 처음에 u 넣어놓음, u로부터 z까지 가는
3: v라는 노드가 아니라, 모든 노드 v,
4: v가 u의 neighbor이면
5: D(v)에 c u,v값을 넣어라
6: 아니면 무한대(neighbor 아니면)

 

loop

9: D(w)가 미니멈, 1이 제일 작음, 5개 노드가 있는데 그 중에서 값을 가지고 있는건 3개고 두개는 무한대임
그래서 1이 제일 작은 걸로 뽑힘,
w가 x가 뽑힘
10: 그놈을 N’에 넣어라 -> N’ = {u, x} 가 됨
11: D(v)를 업데이트해라, w, y, z, v 얘네가 안 속함. 업데이트 v를 하는데 w가 지금 x임. 그래서 x에 인제 neighbor들(v)를 업데이트해라, 아까가 5였으면 3으로 바꿔라

u부터 y가 무한대였는데, 2로 바뀜. 그런 업데이트다, D(y) = 2

15: 모든 노드가 N’ 들어갈때까지

 

 

참고