# 네트워크 제어 영역

데이터 영역에서는 라우터간의 `포워딩`을 담당한 영역이었다면, 제어는 `라우팅`을 담당하는 영역으로 어떤 정책을 이용하여 라우팅 할지를 고민한다.

포워딩 테이블 / 플로우 테이블이 어떻게 만들어지고 유지, 설치하며 최단 경로를 어떻게 정하는 지 정의

\ <br>

## 라우팅 프로토콜의 목적

출발지부터 목적지 까지 갈 수 있는 최적의 경로를 선택하기 위함

경로는 라우터의 연속으로 라우터들의 순서 or 집합이다.

\ <br>

## 분류

### 경로 고정 유/무

* 정적 프로토콜 : 네트워크 관리자가 링크 비용,라우팅 테이블을 직접 결정하는 것으로 네트워크가 변동되거나 확장될 수 록 관리자의 관리 부담이 증가한다.
* 동적 프로토콜 : 라우터가 스스로 라우팅 경로를 선정하는 방식으로 네트워크 변화에 빠르게 대응이 가능하나 `경로 루프`, `경로 진동`문제 발생 소지가 있다. (RIP, IGRP, OSPF ...)

<br>

### 같은 네트워크 내부/외부에 존재

* 내부 게이트웨이 라우팅 프로토콜 : 같은 관리자 하(같은 AS)에 있는 라우터 집합 내부에서 담당 ( RIP, OSPF )
* 외부 게이트웨이 라우팅 프로토콜 : 기관 외(다른 AS)에 있는 라우터 끼리 라우팅 ( BGP, EGP )

<br>

### 부하에 민감한가

* 부하에 민감한 라우팅 알고리즘 : 현재 혼잡한 링크에 높은 비용을 부가하여 동적으로 변경하는 알고리즘 ( ARPNet )
* 부하에 민감하지 않은 라우팅 알고리즘 : 현재 혼잡을 반영하지 않는 알고리즘 ( RIP, OSPF, BGP )

<br>

### 라우팅 테이플을 누가 관리하는가

* 중앙 집중형 라우팅 알고리즘 (`링크 상태 알고리즘`) : 중앙 관리자가 연결된 링크 상태들의 정보를 알고 있어 중앙에서 관리 (OSPF)
  * Dijkstra's 알고리즘 이용
  * 목적지까지 가는 경로의 모든 정보를 라우팅 테이블에 기록 ( 네트워크 전체 지도를 알아야 가능 하기 때문에 중앙 집중형 )
  * 네트워크 토폴리지와 비용이 모든 노드에 알려지며, `링크 상태 브로드 캐스트 알고리즘`이라고도 한다.

    > 네트워크 토폴리지란? 네트워크가 연결된 방식
  * 단점 : 양방향으로 트래픽이 몰릴 경우 링크비용이 한쪽방향으로 흐르게 바뀌고, 바뀔때마다 알고리즘이 동작하며 링크방향이 시계/반시계방향으로 계속 바뀌며 흐르는 `경로 진동`문제 발생
    * 해결 방법 : 트래픽에 의존하지 않고 알고리즘 수행 ( 라우팅 알고리즘 목적에 벗어나는 방식 )

      -> 모든 라우터가 동시에 상태 알고리즘을 수행하지 않게 한다. ( 결국 스스로 동기를 맞추게 된다. `Floyd Synchronization` )

      -> 랜덤으로 상태 정보 전송 시각을 결정하는 방식 사용
* 분산 라우팅 알고리즘 (`거리 벡터 알고리즘`) : 라우터간의 인접한 라우터의 정보만 가지고 반복 계산과 정보 교환으로 경로 선택

  라우팅 테이블에는 목적지까지 가는데 필요한 방향과 거리만 기록 ( RIP, GRP )

  * 정보 교환을 안할때까지 프로세스를 반복하기에 `반복적`이고 모든 노드가 서로 정확히 맞물려 같은 정보를 갖지 않기 때문에 `비동기적`이고 계산된 결과를 이웃에게 전달하기 때문에 `분산적`이다.
  * Bellman-Ford 알고리즘 이용
  * 단점 : 링크 비용 변경시 변경된 노드만 그 상태를 인지하고 다른 노드들은 상태를 알지 못해 나쁜 소식은 느리게 전파되어 `경로 루프`가 발생하여 `무한계수`문제가 생긴다.

    > 무한 계수문제란? 해당 노드까지의 거리값을 변경된 링크비용만큼 도달하는데 1씩 update되며 천천히 증가하며 프로세스를 반복하는 것

    * 해결 방법 : 포이즌 리버스 추가

      > 포이즌 리버스란?
      >
      > route posioning을 받은 인접 라우터는 다운된 네트워크에 연결된 대체 경로가 없을 시 정보를 보낸 라우터에게 Posion Reverse전송으로 Update 시간을 기다릴 필요가 없어 수렴속도 증가와 루프 방지효과 (rout posioning은 특정 네트워크가 다운되면 인접 라우터들에게 매트릭값을 16,무한대를 보내 상태를 알리는 것)
      >
      > z->x의 경로 중 y를 경유하는 경로가 있다면, y에게 z->x의 경로비용을 무한대로 알리는 것

      -> 세개 이상의 노드를 포함한 루프는 감지가 불가능 하다.

`수렴 시간` : 각 라우터들이 똑같은 테이블을 갖는데 걸리는 시간

<br>

* LS와 DV 비교
  * 메세지 복잡성
    * LS : O(|V||E|)개의 메시지 필요
    * DV : 수렴시간은 다양하다
  * 수렴 속도
    * LS : O(E+VlgV)
    * DV : 천천히 수렴하고 라우팅 루프와 무한계수 문제
  * 강인성(견고한가)
    * LS : 잘못된 링크 비용을 이웃 라우터들에게 broadcast하며 새롭게 계산
    * DV : 잘못된 링크 비용을 모든 라우터들에게 broadcast하며 오류가 네트워크를 타고 전파된다.

### 지금까지는 이상적인 네트워크, 현실은 많은 라우터들이 존재하고 평면적이 아닌 계층적 구조를 갖는다.

-> `AS` 등장

\ <br>

## AS (Autonomous System, 자율 시스템)

라우터들을 지역별로 묶어 개개인이 관리

<br>

### 나온 배경

* 확장 : 라우터들 수가 증가함에 따라 위의 알고리즘들은 절때 수렴하지 않고 시간복잡도가 기하급수적으로 증가하며, 모든 목적지를 테이블에 보관이 불가능하다.

  또한, 테이블 교환도 링크 대역폭을 소진하는 것
* 자율적 관리 : 네트워크는 ISP들로 구성되어 있으며 각 ISP들 관리자는 네트워크 내부 구성을 외부에 감추기를 원하고 자기들만의 정책으로 라우팅 되기를 원한다.

<br>

### 분류

* AS내의 라우팅 : 내부 게이트웨이 프로토콜로 OSPF, RIP등 존재
  * `OSPF` 특징
    * 링크 상태 알고리즘
    * 상태 정보를 플러딩한다. (라우터간에 연결 안 된 라우터들에게도 상태를 broadcast한다.)
    * 공개된 프로토콜이다.
    * `RIP`를 개선
      * 보안 : MD5, 단순 인증을 사용하여 모든 패킷을 인증한다.
      * 복수 동일 비용 경로 : 하나의 목적지에 동일한 비용의 다른경로가 존재하면 이를 사용한다.
      * 유니 캐스트/멀티 캐스트 라우팅의 통합 지원
      * 단일 AS내에서 계층 지원
        * 백본 영역과 지역 영역으로 나눌 수 있으며,백본영역은 AS내 지역 영역간 트래픽을 라우팅하는 영역이고 지역영역은 백본 영역이 아닌 영역들의 그룹이다.
        * 경계라우터 : 다른 AS와 연결되는 라우터
        * 백본라우터 : 이 백본라우터들에서 OSPF 수행
        * 영역 경계라우터 : 백본과 지역영역을 연결하는 라우터

`게이트 웨이` : 서로 다른 통신망,프로토콜을 사용하는 네트워크 간 통신을 가능하게 하는 장치나 s/w

<br>

* AS외부 라우팅 : 경계 게이트웨이 프로토콜로 AS끼리 라우팅 프로토콜을 수행 (패킷의 특정한 목적지 주소를 가지고 라우팅수행이 아닌 CIDR형식의 앞쪽 `prefix(네트워크 주소)`를 향해 포워딩)
  * BGP : 대표적인 AS끼리의 프로토콜

    이웃 AS로부터 도달가능한 서브넷 prefix 정보를 broadcast방법을 이용하여 얻는다.

    포트번호는 179를 사용하며 반영구적인 TCP연결을 통해 라우팅 정보를 교환

    * 종류
      * eBGP : 두개의 AS에 걸친 BGP (외부 BGP 연결)
      * iBGP : AS라우터간 BGP 연결 (내부 BGP 연결)
    * BGP 경로 구조

      NEXT-HOP;AS-PATH;목적지 주소 prefix

      > NEXT-HOP : AS-PATH를 시작하는 라우터 인터페이스의 IP주소로 출발지의 AS와 연결된 외부 AS 게이트 웨이 라우터 주소
      >
      > AS-PATH : 알림 메시지가 통과하는 AS 리스트 (루프 감지하고 방지하는 효과)
    * 경로 결정 방법
      1. 지역 선호도를 사용하여 결정 ( 지역 선호도는 같은 AS내의 다른 라우터로 부터 학습되거나 설정 된 것)
      2. 지역선호도가 같다면 최단 `AS-PATH` 경로 선택 -> DV 알고리즘 이용 (이때, 거리는 라우터의 홉수가 아닌 AS의 홉수)
      3. 위의 방법으로 선택된 경로중 같은 비용의 경로가 있다면 `뜨거운 감자 라우팅(hot potato routing)` 수행

         > 뜨거운 감자 라우팅?
         >
         > 목적지까지의 경로중 외부 AS내의 경로 비용을 고려하지 않고 가능한 한 빨리 출발지 AS에서 내보내는 라우터(경로)선택
      4. 그래도 많은 경로가 남았다면 BGP 식별자를 사용하여 경로 선택
    * `애니캐스트(임의 캐스트)`서비스 구현에 이용
      * 요청이 들어오면 송신자로부터 경로가 될 수 있는 잠재적인 수신자 그룹 안에서 가장 가까운 노드로 연결 시키는 라우팅 방식 (멀티 캐스트를 더욱 효율적으로 구현)
      * CDN : BGP라우팅이 변경되면 하나의 TCP연결에 속한 패킷들이 웹 서버의 다른 복제본으로 도착 할 수 있기 때문에 사용하지 않는다.
      * DNS : 주로 사용되며 복제된 루트 DNS서버중 가장 가까운 DNS루트 서버로의 질의를 위해 사용

<br>

### AS내/외부 프로토콜의 차이점

1. 정책 : AS간의 라우팅은 정책 이슈가 지배한다. (한 AS가 다른 특정 AS를 통과 할 수 없을 수 있다.)

   AS내부의 라우팅은 동일한 관리자 통제하에 있어 정책 문제는 경로 선택에 중요하지 않다.
2. 확장성 : AS간의 라우팅에서 성능과 확장 문제는 매우 중요하나 같은 AS내의 라우팅에서는 중요하지 않다. (하나의 ISP가 커지면 두개의 AS로 분리할 수 있고, 하나의 AS를 OSPF를 통해 여러개의 영역으로 나눌 수 있기 때문)
3. 성능 : AS간의 라우팅은 정책 지향형이므로 성능같은 라우터의 품질은 부수적인 관심사이다. (더 경로비용이 크더라도 정책 기준을 만족하는 경로 선택)

   AS내에서는 이러한 정책의 고려가 중요하지 않으므로 경로의 성능 수준에 초점을 두고 라우팅

## 라우팅 프로토콜은 단순 라우팅 뿐 만 아닌 보안/계층구조 등 많은 것을 정의한 규칙

\ <br>

## SDN : Software Defined Network

네트워크 장비를 중앙에서 프로그램 처럼 자유롭게 제어하고 관리

원격에 존재하는 제어장치가 포워딩 테이블을 생성 후 라우터내의 Control Agent와 상호작용

<br>

### 등장 배경

인터넷 초기에는 분산된 라우터단위의 접근 방식으로 일체형 라우터는 전용 OS로 동작,구현 되며 라우터 기업들은 가격이 매우 비싸고 수직적이고 폐쇄적이고 독자적인 소규모의 시장이었다.

이런 분산된 라우팅 프로토콜은 정적 방식으로 `로드 밸런싱`이 불가능 하다.

<br>

### 특징

* OpenFlow같이 Flow 기반 포워딩 : 플로우 테이블 항목들을 모두 계산하고 관리,설치가 가능하다.

  Flow : 패킷을 처리해주는 규칙의 단위

  > OpenFlow?
  >
  > 원격 컨트롤러(제어장치)와 라우터(스위치)간의 플로우 테이블을 전달하는 프로토콜
  >
  > 구성
  >
  > * match : 규칙의 조건 같은 것. (일치 할 수 있는 11개의 패킷 헤더 필드와 수신 포트 ID로 구성)
  >
  >   Ingress Port | Src Mac | Dest Mac | Eth type | VLAN type | VLAN ID | VLAN Pi | IP Src | IP Dest | IP Proto | Tcp/Udp Src Port | TCP/UDP Dest Port
  > * action
  >   * forward : 다른 라우터로 전달
  >   * drop : 라우터에서 강제로 패킷을 버리는 것
  >   * Modify field(수정 필드) : IP프로토콜 제외 10개의 헤더 필드 값 수정
  >
  > -> 라우터,방화벽,스위치,NAT등 다양한 기능을 S/W적으로 수행 할 수 있게 해준다.
  >
  > 특징 : TCP를 사용
  >
  > 제어기 -> 스위치 메시지 종류 : 설정, 상태 수정, 상태 읽기, 패킷 전송
  >
  > 스위치 -> 제어기 메시지 종류 : 패킷 전송, 포트 상태, 플로우 제거
* 제어 / 데이터 영역 분리
* 데이터 영역 외부(라우터)에 네트워크 제어 기능 존재
* 프로그램이 가능한 네트워크

<br>

### SDN 상호동작 과정

1. 라우터는 장애확인 후 제어기에 OpenFlow 포트 상태 메시지 전달
2. SDN제어기는 OpenFlow 수신 후 링크 상태 정보 수정
3. 링크 변경시 라우팅 알고리즘이 동작하게 등록 시켜놓고, 링크 상태 정보가 수정된다면 그래프 정보와 링크 상태 정보 이용하여 경로 계산
4. 새로운 Flwo 테이블을 계산하고 스위치들에게 새로운 테이블 설치

-> 종속적이고, 신뢰성이 높으며, 성능 확장적이면서 안전한 분산 시스템

\ <br>

## ICMP

호스트와 라우터간에 네트워크 계층 정보를 주고 받기 위해 사용하는 프로토콜로 주료 오류보고가 목적이다.

IP데이터 그램에 담겨 전송되므로 구조적으로 IP바로위에 존재한다.

<br>

### 구조

* 타입
* 코드
* IP 데이터 그램 처음 8바이트

<br>

### 메세지 종류

| Type | Code |               설명               |
| :--: | :--: | :----------------------------: |
|   0  |   0  |        Echo Reply (ping)       |
|   3  |   0  |  Destination Unreachable(네트워크) |
|   3  |   1  |  Destination Unreachable(호스트)  |
|   3  |   2  |  Destination Unreachable(프로토콜) |
|   3  |   3  |   Destination Unreachable(포트)  |
|   3  |   6  | Destination Unresearched(네트워크) |
|   3  |   7  |  Destination Unresearched(호스트) |
|   4  |   0  |  Source-Quench(출발지 억제\[혼잡제어])  |
|   8  |   0  |       Echo Request (ping)      |
|   9  |   0  |             라우터 알림             |
|  10  |   0  |             라우터 발견             |
|  11  |   0  |           TTL Expired          |
|  12  |   0  |             IP헤더 불량            |

<br>

### Traceroute 동작 과정

1. TTL값을 1부터 1씩 증가하는 ICMP Request 전송(8/0)
2. TTL이 0이 되면 TTL Expired 전송(11/0)
3. 도착하면 응답 메시지 전송
   1. window : Echo Reply(0/0) 전송
   2. linux : port Unreachable (3/3) 전송

      리눅스에서 tracroute는 udp헤더에 포함되어 전송되며, 안쓸것 같은 port로 request를 보내기 때문에 `포트 도달 불가능 메시지`가 돌아온다.

-> 윈도우는 ICMP 레벨(네트워크 계층)만 체크하며, 리눅스에서는 전송계층의 UDP레벨까지 체크

\ <br>

## 네트워크 관리

적절한 비용으로 요구사항을 만족하기 위해 네트워크 구성요소와 자원들을 제어하고 통합 조정하는 것

* 관리 모듈 : 네트워크 운영센터의 중앙 집중화된 네트워크 관리 스테이션으로 네트워크 관리 정보 수집,처리,분석,게시를 제어
* 피관리 모듈 : 관리 대상 네트워크에 존재하는 네트워크들 ( 호스트, 라우터, 스위치, 미들박스 등)
  * 구성
    * Agent : 장치의 상태 정보를 수집 후 관리 컴퓨터가 요청시 전달하는 프로그램
    * Data : 장치의 상태 정보이며 MIB에 저장,수집

      > Management Inforamtion Base로 일종의 상태 DB

<br>

### SNMP : Simple Network Management Protocol

Agent와 관리자 사이에서 네트워크 제어, 정보를 전달 하기 위한 프로토콜

MIB 정보 전달하기 위한 2가지 명령어

* Request/Response : MIB데이터 요청 / 응답
* Trap : 관리자에게 예외적인 이벤트 발생을 알림
