네트워크 계층의 기능

 

포워딩(Forwarding) : 데이터 영역(Data Plane)의 기능으로, 포워딩 테이블을 탐색(look up)하여 라우터 입력 버퍼에서 출력 버퍼로 패킷을 전달한다.

 

-포워딩은 크게 (1)목적지 기반의 포워딩-전통적인 방식, (2)일반화된 포워딩-SDN 방식으로 두 가지가 있다.

 

라우팅(Routing) : 제어 영역(Control Plane)의 기능으로, 출발지에서 목적지까지 패킷의 헤더를 보고 전체 경로를 설정한다.

 

아래는 앞서 기술한 데이터 영역에 대한 정보(원리)가 포함되어 있다.


http://movefast.tistory.com/40

http://movefast.tistory.com/52

http://movefast.tistory.com/53

http://movefast.tistory.com/54


 

여기서는 제어 영역을 구성하는 정보를 알아볼 것이며, 우선 제어 영역의 구조에는 (1)라우터당 제어(분산적, 전통적 방식), (2)논리적으로 중앙 집중화된 제어(중앙 관리 방식, SDN) 방식으로 접근할 수 있다.


- 아래는 두 구조를 기반으로 포워딩 테이블을 계산하는 원리이다.

 

 

 

라우팅 프로토콜(Routing Protocol)

 

인터넷(Internet)Hop-by-Hop 라우팅 방식이라 하여 각 라우터는 다음 목적지까지만 안내한다.

 

이 때, 각 라우터마다 수신 호스트(최종 목적지)로 안내해주기 위해 각 라우터의 다음 목적지까지의 경로를 라우팅 프로토콜이 모두 결정한다.

 

송신 호스트(source host)에서 수신 호스트(destination host)로 네트워크의 라우터를 지나가는데 있어 좋은 경로를 결정하는 것을 목표로 한다.

 

- 좋은“Good“을 직역한 것으로, 가장 빠르고 혼잡이 최소화되는 경로, 저렴한 비용 등 다른 일반적인 요소도 포함한다.

 

-경로“Path”를 직역한 것으로, 송신 호스트에서 수신 호스트로 가기 위해 지나갈 라우터들의 순서를 의미한다.

 

- Source Routing : 처음에 최종 목적지를 가기 위해 꼭 거쳐야 할 목적지(라우터)를 정해주는 기능이다.

 

아래는 네트워크의 경로를 그래프로 나타낸 것이다. 그래프 추상화는 네트워크 문맥 파악에 유용하게 사용된다.

 

[ 노란색은 라우터, 이어지는 선들은 경로이며, 숫자는 경로 비용(cost)이다. ]

  • graph : G = (N, E) -> G는 그래프를 나타낸다.

  • N : 라우터의 집합으로, 위의 그림은 N = { A, B, C, D, E, F, G } 이다.

  • E : 링크의 집합으로, 위의 그림은 E = { (A, B), (A, D), (B, C), (B, E), (B, F), (D, F), (D, G), (E, F), (F, G) } 이다.

  • c(x, y) : 라우터 x에서 라우터 y까지의 링크의 최소 비용으로, 비용이 적을수록 자료 전송율(bps)이 좋다. 혼잡이 많을수록 비용이 증가하며 이는 좋지 않다. 위의 그림에서 c(A, C) = 5 이다.

  • Cost of Path (a, b, c, ... , z) = c(a, b) + c(b, c) + c(c, d) + ... + c(y, z) : 경로 비용이란 링크 비용의 합이다.

 

라우팅 알고리즘은 최소 비용의 경로를 찾는다. 추가로, 라우팅 경로 설정 시 정보 수집이 미리 이루어져야 하는데 위의 경우는 미리 정보가 주어진 경우이다. 소프트웨어적인 구현에 있어서 최단 경로를 찾는 자료구조가 활용된다.

 

 

 

라우팅 프로토콜의 분류(Classification)

 

포워딩 테이블을 계산하는 것은 라우팅 알고리즘의 일이다. 이 라우팅 알고리즘은 어떤 정보를 가지느냐에 따라 두 가지로 나뉜다.

 

링크 상태(Link State, LS) 알고리즘 : 모든 라우터들이 완벽한 토폴로지, 링크 비용 정보 등 각 라우터의 모든 정보(Global Info)를 가진다.

 

거리 벡터(Distance Vector, DV) 알고리즘 : 모든 라우터는 물리적으로 연결된 이웃 라우터의 링크 비용 정보만 가진다. 반복적인 계산과정과 이웃간의 정보 교환이 이루어진다.

 

처음에 송신 호스트와 수신 호스트가 정해지더라도, 라우터 간의 경로가 혼잡해지게 되어 비용이 증가하면, 최소 비용의 경로를 찾기 위해 경로가 바뀌는상황이 생긴다.

 

경로가 시간이 지남에 따라 느리게 변하거나 거의 일정한 것을 “Static”하다고 표현하며, 노드(링크)가 고정되어 있음을 의미한다. 링크 상태 알고리즘(LS)은 정적인 상태에서 경로를 설정한다.

 

경로가 빠르게, 많이 변하는 것을 “Dynamic”하다고 표현하며, 주기적으로 라우터끼리 정보를 주고받으며 링크 비용 변화에 대응한다. 거리 벡터 알고리즘(DV)은 동적인 상태에서 경로를 설정한다.

 

 

 

링크 상태(Link State, LS) 알고리즘

 

- 1단계, 정보수집 : Flooding 방식으로 망(net) 토폴로지, 링크 비용이 모든 노드에게 알려진다. , 모든 노드들이 같은 정보를 가지게 된다.


- 2단계, 경로계산 : 출발지 노드에서 모든 다른 노드까지의 최소 경로 비용을 계산한다. 여기서 "다익스트라 알고리즘"(Dijkstra’s algorithm)이 사용된다.


- 3단계, 포워딩 테이블 생성 : 모든 라우터는 최단 경로 알고리즘(다익스트라)을 통해 생성된 다음 hop에 대한 테이블을 얻는다.

 

- Flooding 방식이란 링크 상태 브로드캐스트를 통해 홍수가 일어나듯 다른 라우터에서 받은 정보를 또 다른 라우터에게 알리는 방식이다. 중복된 정보가 수신되면 알아서 버린다.

 

- “링크 상태 브로드캐스트는 라우터마다 자신의 로컬 링크 비용(link cost) 정보를 가지는데 다른 라우터와 이 정보를 주고받으면서 다른 라우팅 정보를 수집하는 것을 의미한다. Flooding 방식과 유사한 의미이다.

 

다익스트라 알고리즘에 사용되는 표기법

  • c(x, y) : x에서 y까지의 링크 비용, 이웃 노드가 아닐 경우 무한대()로 표시된다.

  • D(v) : 출발지에서 목적지 v까지 경로의 현재 비용, 최소 비용을 발견하기까지의 비용을 현재 비용이라 한다. 현재 비용 중에 최소 비용을 찾는다.

  • p(v) : 출발지에서 목적지 v까지의 경로에서 v 이전 노드(목적지, 라우터)

  • N’ : 최소 비용 경로라고 명확하게 알려진 노드(목적지, 라우터)들의 집합

다익스트라 알고리즘의 코드


Initialization:

N’ = {u} //출발점이 u임을 의미.

for all nodes v //모든 노드 중 임의의 노드 v에 대하여

if v adjacent to u //노드 v가 노드 u에 이웃이라면,

then D(v) = c(u, v) //경로 계산

else D(v) = ∞ //이웃이 아니라면 무한대 표시

 

Loop //N’에 없는 노드 중 최소 비용의 노드 탐색

find w not in N’ such that D(w) is a minimum

add w to N’ //찾으면 N’에 추가

update D(v) for all v adjacent to w and not in N’ :

//찾은 노드의 이웃 노드들의 현재 비용을 갱신

D(v) = min(D(v), D(w) + c(w, v))

/* 노드 v에 대한 새로운 비용이 v에서 오래된 비용이거나 최단 경로로 알려진 비용이라면 노드 w에서 v까지의 비용을 추가한다. */

untill all nodes in N’ //N’을 채울 때까지 반복한다.

 



 

위의 이미지를 바탕으로, 출발지를 C라고 하고 목적지를 G라고 하였을 때의 C의 다익스트라 알고리즘 구현하기 

(실제로 위의 이미지 같은 자료는 라우팅 알고리즘에 제공되지 않습니다.)

 

  • STEP 0 : C에서의 이웃 노드는 B밖에 없으므로, 나머지는 로 표기합니다. B까지의 현재 비용은 그림과 같이 3입니다.

STEP

N'

 D(A), p(A)

 D(B), p(B) 

 D(D), p(D)

 D(E), p(E)

 D(F), p(F)

 D(G), p(G)

0

C

 

3, C


  • STEP 1 : [step 0]에서 최소 비용이 되는 경로가 노드 B이므로 N’B가 추가도비니다. 이제 알고 있는 노드들(N‘의 원소)로 갈 수 있는 노드는 A, E, F로 세 경로가 있습니다. B는 이미 있으므로 계산하지 않아도 되고, DG는 지금까지 알고 있는 노드들과 이웃이 아니므로 로 표기합니다.

STEP

N'

 D(A), p(A)

 D(B), p(B) 

 D(D), p(D)

 D(E), p(E)

 D(F), p(F)

 D(G), p(G)

0

C

3, C 

1

C, B

5, B

 

5, B

4, B


C->B

 

  • STEP 2 : [step 1]에서 현재 경로 중 최소 비용이 되는 경로는 노드 F이므로 N’F가 추가됩니다. 이제 알고 있는 노드들(N’의 원소)로 갈 수 있는 노드는 A, D, E, G로 네 경로가 있습니다. BF는 이미 추가한 노드이므로 표기하지 않습니다.

STEP

N'

 D(A), p(A)

 D(B), p(B) 

 D(D), p(D)

 D(E), p(E)

 D(F), p(F)

 D(G), p(G)

0

C

3, C 

1

C, B

5, B

 

5, B

4, B

2

C, B, F

5, B

 

8, F

5, B

 

11, F

C->B

C->B->F

 

  • STEP 3 : [step 2]에서 현재 경로 중 최소 비용이 되는 경로는 노드 AE가 있으므로 N’AE가 추가됩니다. 이제 알고 있는 노드들(N’의 원소)로 갈 수 있는 노드는 D, G로 두 경로가 있습니다. 나머지 노드는 이미 추가한 노드이므로 표기하지 않습니다.

STEP

N'

 D(A), p(A)

 D(B), p(B) 

 D(D), p(D)

 D(E), p(E)

 D(F), p(F)

 D(G), p(G)

0

C

3, C 

1

C, B

5, B

 

5, B

4, B

2

C, B, F

5, B

 

8, F

5, B

 

11, F

3

C, B, F, A, E

 

 

8, F

 

 

11, F


C->B

C->B->F

C->B->A

C->B->E

 

  • STEP 4 : [step 3]에서 현재 경로 중 최소 비용이 되는 경로는 노드 D가 있으므로 N’D가 추가됩니다. 이제 알고 있는 노드들(N’의 원소)로 갈 수 있는 노드는 G 하나만 있습니다. 나머지 노드는 이미 추가한 노드이므로 표기하지 않습니다.

STEP

N'

 D(A), p(A)

 D(B), p(B) 

 D(D), p(D)

 D(E), p(E)

 D(F), p(F)

 D(G), p(G)

0

C

3, C 

1

C, B

5, B

 

5, B

4, B

2

C, B, F

5, B

 

8, F

5, B

 

11, F

3

C, B, F, A, E

 

 

8, F

 

 

11, F

4

C, B, F, A, E, D

 

 

 

 

 

9, F


C->B

C->B->F

C->B->A

C->B->E

C->B->F->D

 

  • STEP 5 : [step 4]에서 현재 경로 중 최소 비용이 되는 경로는 노드 G가 있으므로 N’G가 추가됩니다. 모든 노드에 대하여 최소 비용 탐색이 끝났으므로 확장된 경로는 아래와 같습니다.

C->B

C->B->F

C->B->A

C->B->E

C->B->F->D

C->B->F->D->G


STEP

N'

 D(A), p(A)

 D(B), p(B) 

 D(D), p(D)

 D(E), p(E)

 D(F), p(F)

 D(G), p(G)

0

C

3, C 

1

C, B

5, B

 

5, B

4, B

2

C, B, F

5, B

 

8, F

5, B

 

11, F

3

C, B, F, A, E

 

 

8, F

 

 

11, F

4

C, B, F, A, E, D

 

 

 

 

 

9, F

5

C,B, F, A, E, D, G

 

 

 

 

 

 


  • 여기서 C에서 G까지의 최소 비용은 9가 되고, 아래는 C의 포워딩 테이블입니다.

 목적지

 Link(Next hop) 

 B

 (C, B)

 F

 (C, B)

 A

 (C, B)

 E 

 (C, B)

 D

 (C, B)

 G

 (C, B)

  • 어떤 목적지든 C에서는 다음 목적지가 B임을 알 수 있습니다.

 

다익스트라 알고리즘의 복잡도 : N‘에 없는 모든 노드들을 확인할 필요가 있으며, n개의 노드가 순서대로 살펴지기 때문에 n(n+1)/2 번의 비교횟수를 가진다. ->

 

- 더욱 효율적인 자료구조를 사용하여 복잡성을 감소할 수 있다. 위의 알고리즘 코드의 9번째 줄에서 w를 찾는데 "힙 자료구조"를 사용하는 것이다. 그 때의 복잡도는 O(nlogn) 가 된다.

 


 

거리 벡터(Distance Vector, DV) 알고리즘

 

벨만 포드 항등식(동적 프로그래밍에 자주 쓰임) : = min{c(x, v) +  }

  • : x에서 y까지의 최소 비용 경로의 값

  • c(x, v) : vx의 이웃노드이고, xv간의 경로 비용을 의미한다.

  • : 모든 이웃 v에 대한 y까지의 거리

  • min{ } : 괄호 안에 계산되어진 값들 중 최소값

  • (이 때 값은 vx에게 알려줌)

초기 상태에서 노드는 각 이웃들 간의 최소 거리 비용만 알고 있다.

 

 

-위의 그림에서 B에서 G까지의 거리를 벨만 포드 항등식을 사용하여 거리 벡터 알고리즘을 구현해보기


- B의 이웃노드는 A, E, F이므로(CG로 갈수 없으므로 제외한다.) 각 노드에서 G까지의 최소 비용 경로는 

 임을 노드 A, E, F는 알고 있다. 이 정보를 B에게 전달하면, B는 벨만 포드 항등식으로 계산한다.


node B :

 

-: x에서 네트워크 노드 중 임의의 노드 y까지의 최소 비용

 

거리벡터 값 (N : 네트워크 노드의 집합)


 

반복적, 비동기적 특성 : 로컬 링크 비용(c(x, v))이 변화가 생길 때마다 거리 벡터 값()이 갱신되며, 갱신된 노드는 이웃 노드에게 알리게 되고 따라서 다른 노드들도 거리 벡터 값을 갱신한다.(로컬 링크란 자신과 이웃간의 링크를 의미한다.)

 

분산적 특성 : 각 노드는 자신의 거리 벡터 값()의 변화가 있을 때만 이웃들에게 통지한다. 또는 이웃이 자신의 거리 벡터 값을 필요로 한다면 통지한다.

 

링크 비용 변화의 3단계

  • 1단계 : 각 노드는 로컬 링크 비용의 변화(c(x, v))나 이웃(v)들로부터 통지( )를 받을 때까지 기다린다.

  • 2단계 : 통지를 받으면 거리 벡터 값()을 다시 계산한다.

  • 3단계 : 어떤 목적지에 대한 거리 벡터 값()이 변경되었다면 이웃에게 알린다(, 어디를 경유했는지는 없고, 비용에 대한 정보만 준다.)

 

링크 비용이 감소한 경우 해당 정보는 네트워크 전역에 빠르게 전파된다.

 

링크 비용이 증가한 경우 해당 정보는 네트워크 전역에 느리게 전파된다. 따라서 기존의 정보(이웃노드의 변화 전 거리벡터 값)를 유지한 채 다른 목적지까지의 거리벡터 값이 변경되면 기존의 정보가 적용되는 상황이 발생하고, 해당 노드는 이웃노드의 변화를 알 때까지 자신의 거리 벡터 값을 잘못 계산할 수 있다. 보통 정보 전달이 느리면 서로 잘못된 정보를 전달하게 되어 무한 카운트 문제가 발생한다.

 

- 무한 카운트 문제 예시) 노드 A와 노드 B간에 다른 노드로 보내야하는데 최소 경로로 서로가 지정되어 A->B,  B->A로 정보를 전달하게 되면 라우팅 루프가 발생한다.

 

포이즌 리버스(Poison Reverse) : 어떤 노드가 이웃노드에게 임의의 노드까지 가짜 거리벡터 값으로 를 알려주는 것이다. , 임의의 노드까지 가는데 자신을 거치지 말라는 의미이다. 이 방법은 무한 카운트 문제를 해결하기 위해 사용되나 세 개 이상의 이웃 노드를 포함한 루프인 경우 감지하지 못한다.

 

 

 

 

오동작 하는 경우(Robustness)

 

링크 상태(Link State, LS) 알고리즘 : 노드는 적절하지 못한 링크 비용을 알릴 수 있는데, 그럴 때 각 노드는 자신의 포워딩 테이블만 다시 계산한다.

 

거리 벡터(Distance Vector, DV) 알고리즘 : 노드는 적절하지 못한 경로 비용을 알릴 수 있는데, 그럴 때 각 노드의 테이블은 이웃 노드에게 이용되어지며 에러가 네트워크 전역에 전파된다.

 

 






 

 

 

일반화된 포워딩

 

앞전에 목적지 기반의 포워딩(http://movefast.tistory.com/40)에 대해 알아보았는데, 이 포워딩 방법은 목적지 IP 주소만을 가지고 포워딩하는 방식으로, 제어 영역(Control Plane)에 의해 생성된 포워딩 테이블(Forwarding Table)”을 참고하여 패킷(데이터)이 전달되어진다.

 

지금부터 살펴볼 일반화된 포워딩기법은 제어 영역에 의해 생성되는 플로우 테이블(Flow Table)”을 참고하여 패킷(데이터)를 전달한다. 아래는 해당 포워딩 기법을 이해하기 위해 필요한 개념을 소개한다.

 

각각의 라우터는 중앙에 집중된 라우팅 컨트롤러(중앙 관리 방식)에 의해 계산되고 배포된 Flow Table을 포함한다.

 

 

 

소프트웨어 정의 네트워킹(Software Defined Network, SDN)

 

등장 배경

  • 네트워크 환경의 변화
  • 트래픽 패턴(방식) 변화 : 트래픽이 데이터 센터를 중심으로 전환되고 있다.

  • 가상화(VM)의 보편화로 호스트의 빈번한 이동
  • 네트워크 관리의 필요성

 

소프트웨어로 네트워크 경로를 설정 및 제어 그리고 운용 관리를 처리할 수 있다.

 

, 하나의 물리 네트워크 환경에서 다수의 가상 네트워크 환경을 구축할 수 있다.

 

- 원리 : 라우터의 제어 부분과 데이터 전송 부분을 분리하고 개방형 인터페이스를 외부에 제공한다.

 

- “분리라는 것은, 네트워크 장비가 포함된 인프라 계층은 단순히 패킷을 전달만 하는 역할을 하고, 소프트웨어 제어기(Controller)를 프로그래밍하여 데이터의 흐름을 제어하는 상황을 의미한다.

 

, 컨트롤러에서 데이터의 흐름을 제어하게 되면, 패킷이 발생했을 때 네트워크 장비는 패킷을 어디로 전달할지 컨트롤러에게 물어보고 결과를 반영한다.

 

 

 

OpenFlow

 

- SDN을 구현하기 위해 처음으로 제정된 표준 인터페이스이다.

 

- OpenFlow 스위치, OpenFlow 컨트롤러로 구성되며, 흐름(flow) 정보를 제어하여 패킷의 전달 경로 및 방식을 결정한다.

 

- “흐름이란 패킷의 출발지와 목적지 정보를 가진 데이터라고 볼 수 있다.

 

- OpenFlow 스위치 내부에는 "패킷 전달 경로와 방식에 대한 정보"를 가지고 있는 "Flow Table"이 존재한다.

 

기본 동작

1. 패킷 발생 시 Flow Table이 해당 패킷의 정보가 있는지 확인

-> 정보가 존재하면 패킷 바로 처리

-> 정보가 존재하지 않으면 OpenFlow 컨트롤러에게 해당 패킷에 대한 제어 정보를 요청

 

2. 스위치로부터 제어정보를 요청받은 컨트롤러는 내부에 존재하는 패킷 제어 정보를 확인하고, 해당 결과를 스위치에게 전달

 

3. 스위치는 받은 데이터를 Flow Table에 저장하고, 이후 동일 패킷 발생 시 Flow Table의 정보를 활용하여 패킷을 전달한다.

 

* FlowTable에 등록된 제어 정보는 영구적으로 저장하거나 정해진 시간 동안만 유지할 수 있다.

 

 

 

OpenFlow 데이터 영역

 

흐름(flow) : 헤더 필드에 의해 정의되어지는데, 프레임의 2~5계층 헤더 필드값이 동일한 경우 같은 flow로 본다. IPv6에서는 흐름 라벨(flow label)로 빠르게 판단가능하다.

 

기존의 목적지 기반의 포워딩은 앞서 언급했듯이 단순히 목적지 IP주소만 보고 포워딩을 했으나 일반화된 포워딩은 몇 가지 간단한 패킷 처리 규칙이 있다.

  • 패턴(Pattern) : 패킷의 헤더 필드값과 일치 여부를 결정
  • 패턴이 일치한 패킷의 처리(Actions) : 해당 패킷을 삭제(drop), 전달(forward), 수정(modify), 또는 컨트롤러에게 전송한다.

  • 우선순위(Priority) : 중첩되는 패턴을 구분한다.

  • 통계(Counters) : 트래픽 양을 패킷 수와 바이트 수로 표시한다.

 

제어기가 계산하고 배포한 라우터의 Flow Table에는 라우터의 “match+action rules“이 정의되어 있다.

 

 

 

match+action rules

 

- OpenFlow의 조건+처리 규칙(match+action rules)은 다양한 종류의 네트워크 장비에 통합적용된다.

 

조건처리 규칙은 match(해당 조건)를 만족한다면, action(처리) 할 것을 약속한 것이다.

 

라우터(Router)

  • match : 가장 긴 목적지 IP 주소의 접두사(prefix)

  • action : 링크로 전달

 

스위치(Switch)

  • match : 목적지 MAC 주소 (2계층 주소)

  • action : 포워딩(forwarding) 또는 브로드캐스팅(flooding, broadcasting) 한다.

* flood는 모든 네트워크 장비에게 알리는 것이다.

 

방화벽(Firewall)

  • match : IP주소와 TCP/UDP 포트 번호
  • action : 접근 허용 및 거부

 

네트워크 주소 변환(NAT)

  • match : IP주소와 포트 번호
  • action : 주소와 포트 번호를 재구성한다.

 

 

 

Flow Table Entry


- Action은 어디 포트로 포워딩을 할지 등을 결정한다.

 

- Data Link Layer(2계층) : VLAN ID, MAC src, MAC dst, Eth type

 

- Network Layer(3계층) : IP src, IP dst, IP port

 

- Transport Layer(4계층) : TCP src port, UDP dst port






 

 

IPv6

 

- 32비트 주소 체계인 IPv4의 고갈문제를 해결하고자 128비트 주소 체계의 IPv6가 나오게 되었다.

 

- IPv4의 고정 헤더 크기가 20bytes인 반면, IPv6의 고정 헤더크기는 40bytes이다. 헤더 크기는 커졌으나 기능을 간략화하였다.

 

단편화가 허용되지 않는다.


 

 

- version : IP 버전을 저장하는 필드이다. IPv66이므로 “0110”이 저장된다.


- priority : 데이터그램이 전달되는 동안 우선순위를 식별한다.


- Flow label : 동일한 어플리케이션에서 만들어진 일련의 번호로, 빠른 처리를 위한 별도의 데이터그램 식별자이다.


- payload length : data의 길이를 저장하는 필드이다.


- Next header : IPv4의 프로토콜 타입을 저장하는 필드와 유사한데, 고정헤더 다음의 헤더가 무엇인지 알려준다.


- Hop limit : TTL(Time To Live)를 의미한다. 최대 값은 255이며, 최종 목적지에 달했을 경우 0의 값을 가진다. 하나의 Hop을 지날 때마다 1씩 감소한다. 최종 목적지가 아닌 곳에서 0의 값을 가질 경우 오류로 보고, 오류발생지에서 출발지로 오류메시지를 보낸다.


- source IP address : IPv6 주소 체계의 128비트의 출발지 IP주소를 저장한다.


- destination IP address : IPv6 주소 체계의 128비트의 목적지 IP주소를 저장한다.


- Data : 위에 까지가 헤더 영역이며, 이 부분은 IP 데이터그램의 데이터 부분을 저장하는 필드이다.

 

 

 

IPv4 VS IPv6

 

- IPv4 헤더에 있던 체크섬 필드가 제거되었다. error을 검출하지 않는 이유는 매번 라우터마다 체크섬 계산을 비효율적이라 판단했기 때문이다. 따라서 각 hop에서 프로세싱 시간이 전체적으로 줄어든다.

 

헤더 내부에서 Option 필드가 사라지고 Extension Header가 추가되었다. , 헤더 외부에 있으며 Next header 필드에 의해 나타내어진다.

 

단편화가 되지 않는 것은 오버헤드가 커지는 것을 방지하기 위함이다.

 

- ICMP의 새로운 버전인 ICMPv6가 등장하는데, 기존의 ICMP보다 ARP, IGMP 등 기능을 확장하였다. IGMP는 멀티캐스트 그룹을 관리하는 기능으로 보면 된다.

 

 

 

Tunneling

 

모든 라우터가 동시에 업그레이드되어질 수 없어서 실제로 IPv6가 보편화되기에는 시간이 좀 걸린다고 한다.

 

그래서 터널링(tunneling) 기법을 통해 IPv4IPv6를 혼용하여 사용한다.

 

- Tunneling : IPv4를 사용하는 라우터들 사이에서 IPv6 데이터그램이 IPv4 데이터그램 안에 payload로써 이동되어지도록 IPv6IPv4로 캡슐화하는 기법이다.

 

- IPv4IPv6 모두 허용하는 라우터마다 IPv6IPv4로 캡슐화하고, 도착지에서 받은 데이터는 헤드가 벗겨지면서 IPv6로 받는다.


 

 

듀얼 스택 라우터(Dual-stack router)IPv6IPv4를 혼용하여 사용하는 라우터로, IPv4 터널을 다른 듀얼 스택 라우터와 연결하여 데이터를 전송한다. 이때 받는 측의 라우터는 헤더 버전 필드를 보고 IPv6가 올 경우 해당 데이터그램을 버린다. IPv6를 캡슐화한 IPv4만 받기 때문이다. 듀얼 스택 라우터는 Tunnel End Point(TEP)로 불린다.

 

듀얼 스택 라우터 전까지는 IPv6가 전송되다가 듀얼 스택라우터에 도착하면 IPv4로 캡슐화되어 다음 듀얼 스택라우터로 전송된다. 이 때 IPv4 데이터그램 헤더의 프로토콜 타입 필드에는 IPv6가 들어있다는 정보가 저장되어있다.

 

 

 

IPv6 사용 여부

 

구글은 클라이언트의 8%IPv6를 사용하여 서비스에 접근한다.

 

- NIST는 미국의 국가 도메인인 US3분의 1IPv6가 가능하도록 한다.

 

보편화되기까지 20년 정도가 예상된다고 한다. 현재는 IPv4 주소 체계가 부족한 자원임이 틀림없으나 NAT로 버티고 있다.






 

 

IP Datagram

 

[ IP Datagram ]

 

<왼쪽 위부터 오른쪽 방향으로 차례대로 보시면 됩니다.>

- TCP 헤더 + IP 헤더 = 20 bytes + 20 bytes = 최소 40 bytes의 헤더크기를 가진다

(세그먼트 헤더와 데이터그램 헤더를 합친 값)

 

- Version : IP 프로토콜 버전 번호 ex) IPv4, IPv6

 

- HLEN : Header Length, 세그먼트의 헤더는 제외한 IP데이터그램의 헤더 길이(크기)

 

- Type of Service : 제공하는 서비스의 코드값으로 라우터로부터 받아야할 서비스를 기재하는데 실제로는 거의 사용하지 않는다.

 

- Total Length : 데이터그램의 전체 바이트 길이로, MTU에 제한을 받으며 최대 216제곱 바이트까지 가질 수 있다.

 

- Identification : 패킷들로 분할하는 단편화와 재조합을 위한 16비트의 식별자

 

- Flags : 6종류의 플래그 비트(URG, PSH, RST, SYN, FIN)가 있으며, 각 플래그 비트는 1비트를 가진다. 대표적으로 연결 설정할 때 필요한 SYN, 연결 끊기에 필요한 RST, 연결 해제에 필요한 FIN이 있다.

 

- Fragment Offset : 단편화와 재조합에 필요한 필드이다.

 

- TTL : Time-To-Live의 약자로, 최대 초기화값은 255이다. TTL은 데이터 전달을 확인하고자 최종 목적지에 도착할 때는 TTL=0의 값을 가져야한다. 하나의 지점을 지나갈 때마다 TTL1씩 감소하며, 최종 목적지가 아닌데 0이 되면 오류발생지로부터 출발지에 오류를 보낸다.

 

- Protocol : (UDP인지 TCP인지) 어느 프로토콜인지 알려주는 코드값이다.

 

- Header Checksum : 헤더에 대한 오류검사를 위한 필드로, 검사합(Checksum)은 전체 데이터그램을 합한 값의 1의 보수값이 저장된다. 수신측에서는 검사합과 실제 데이터그램의 합한 값을 더해보고 숫자 0이 들어갔을 경우 오류로 간주한다.

 

- Source IP Address : 출발지 IP 주소(32비트)가 저장된다.

 

- Destination IP Address : 목적지 IP 주소(32비트)가 저장된다.

 

- IP Options (if any) : 옵션이 없으면 헤더값 20바이트로 고정되지만 있으면 헤더값이 가변적일 수 있으므로 헤더 길이를 기재한다. 방문한 라우터들의 리스트를 명시하거나 타임스탬프를 기록한다. 선택적 필드이므로, 옵션을 제외한 나머지 필드는 무조건 있어야 한다.

 

- Padding : 글자 그대로 여백

 

- Data : TCPUDP 세그먼트가 저장되어 있다.

 

 


 

IP 단편화 (Fragmentation), 재조합 (Reassembly)

 

- 네트워크 링크들은 최대 전송 단위(MTU)를 가지는데, MTUFrame(2계층 데이터 단위)의 최대 크기이다.

 

- 단편화(Fragmentation) : 크기가 큰 IP 데이터그램은 망 내부에서 다수의 작은 데이터그램들로 분할된다. 하나의 데이터그램에 딱 한 번만 가능하다.

 

- 분할된 데이터그램들은 각각 독립된 객체로 취급받으며 개별적으로 캡슐화된다. , 분할된 데이터그램들은 각각 별도의 오버헤드가 생긴다.

 

- 재조합(Reassembly) : 최종 목적지에서 분할된 데이터그램들이 재조합되어 하나의 데이터그램이 된다. 따라서 하나라도 순서가 어긋날 경우 나머지 분할된 데이터그램들은 대기해야 한다.

 

- IP 헤더 필드값(Identification)을 보고 분할된 데이터그램들을 식별하여 재조합한다. , 같은 IP 헤더값을 가진 데이터그램들만 재조합한다.

 

- 목적지에서 재조합을 위한 버퍼가 있는데, 분할된 데이터그램들을 저장해놨다가 하나가 손실될 경우 재조합 타이머(Reassembly timer)Time-Out 나면, 출발지에서 재전송한다.



 

 


IP 주소(Addressing)

 

- IP 주소는 32비트 크기로, 호스트와 라우터 인터페이스에 대한 식별자이다.

 

- 인터페이스(Interface) : 호스트 또는 라우터와 통신 링크 사이의 연결을 의미한다.

 

- 라우터는 일반적으로 다수의 인터페이스를 가진다. 여러 개의 서브넷(Subnet)을 연결하는 중심 매체 역할을 하기 때문이다.

 

- 호스트는 일반적으로 하나 또는 둘의 인터페이스를 가진다.

 

- IP 주소는 각 인터페이스와 연관된다.

 

- 인터넷 네트워킹은 많은 서브넷(부분적인 네트워크)이 모인 전체 네트워킹이다. 같은 서브넷에 속한 인터페이스의 IP 주소는 앞부분이 똑같다. 이 앞부분을 Subnet Prefix라고 한다.

 

- 같은 서브넷끼리는 라우터를 거치지 않는다. 라우터는 서로 다른 서브넷들을 연결하기 때문이다.

 


 

 

사이더(CIDR)

 

- Classless Inter Domain Routing의 약자로, 클래스 없는 도메인 간의 라우팅 기법이다.

 

- 기존의 도메인은 Class A, Class B, Class C, Class D, Class E 로 나누어져 각기 다른 형식을 가진 주소로 이루어져있는데, 클래스 A, B, C까지는 유니캐스트(unicast) 주소이고, 클래스 DE는 멀티캐스트(multicast) 주소이다. IP주소 중 n 비트까지는 network 주소가 들어가고 나머지는 다른 주소가 들어가는 등의 방식으로 주소가 다양하다.

 

- 사이더는 최신의 IP 주소 할당 방법으로 기존의 IP 주소 할당 방식인 네트워크 클래스를 대체한다.

 

- IP 주소의 영역을 여러 네트워크 영역으로 나눌 때 기존방식에 비해 유연성을 더한다. 특히 IPv4 주소가 급격히 부족해지고 있으므로 해당 버전보다 효율적으로 사용하게 해준다.

 

- 접두어(Subnet Prefix)를 이용한 주소 지정 방식을 가지는 계층적 구조(Host IP < Subnet < Internet)를 활용하여 인터넷 광역 라우팅의 부담을 줄여준다. 여기서 사용하는 접두어는 Subnet에 포함되는 호스트 IP들을 대표하는 역할을 한다. 개개의 IP주소들을 포워딩 테이블에 저장하게 되면 탐색시간이 너무 길어진다는 문제점(광역 라우팅)을 해결한다.

 

- CIDR은 IP 주소를 Subnet portion(네트워크 주소) 부분과 Host portion(특정 호스트 주소) 부분으로 나눈다

 

- 표기 방식은 a.b.c.d/x (실제로는 문자가 아닌 숫자) 인데, 여기서 x는 Subnet portion의 비트 수이다.






IP 주소 할당(DHCP)

 

- IP 주소를 할당하는 방식에는 WindowsUNIX에서 두 가지가 있다.

  • 직접 설정하여 고정된 IP 주소를 가지는 방법

  • DHCP를 통해 동적으로 할당받는 방법

- 직접 고정된 IP 주소를 설정할 경우 주소의 비효율적인 사용이 되기 때문에 대부분 동적할당방법을 선택한다.

 

- DHCP : Dynamic Host Configuration Protocol의 약자로, 동적 호스트 구성 프로토콜을 의미한다. 클라이언트가 네트워크 관리자(DHCP 서버)에게 주소가 필요하다는 요청을 보내면 DHCP 서버에서 중앙에 관리하던 IP 주소들 중 하나를 클라이언트에게 동적으로 할당해준다.

 

- DHCP는 사용자들이 자주 바뀌는 환경(학교나 기업 등)에서 유용하다.

 

- 동적으로 할당한다.”는 의미는 사용 가능한 IP주소보다 더 많은 호스트(클라이언트)가 있는 경우에 IP 주소의 할당시간을 짧게 하여 네트워크를 동적으로 재구성할 수 있음을 뜻한다.

 

- 웹서버와 같이 영구적인 IP주소를 필요로 할 경우 정적인 주소를 제공한다.

 

- DHCP를 사용하는 목적

  • 호스트가 네트워크에 접속할 때 서버로부터 IP 주소를 동적으로 획득한다.

  • 네트워크에 연결되었을 때만 주소를 가지므로 연결이 안되어있을 때, 다른 클라이언트가 주소를 재사용할 수 있다.

  • 짧은 시간 동안에 네트워크에 연결되는 모바일 사용자(스마트폰, 태블릿 등)를 지원한다.

- DHCP 동작

  • 호스트는 DHCP 서버 발견(DHCP discover) 메시지를 브로드캐스트(broadcast)방식으로 발송
  • DHCP 서버는 DHCP 제공(DHCP offer) 메시지로 호스트에게 응답
  • 호스트는 DHCP 요청(DHCP request) 메시지로 IP 주소를 서버에 요청
  • DHCP 서버는 DHCP ACK 메시지로 호스트가 사용할 IP 주소를 전송

 

- 브로드캐스트 방식으로 소통하는 이유 : 맨 처음에 서버가 하나 이상일 수 있어서 통신할 서버의 주소를 모르기 때문에 호스트는 목적지 IP주소란에 브로드캐스트 주소를 넣어 메시지(데이터)를 보낸다. 이후, 서버로부터 받은 메시지(데이터)에서 서버의 주소를 알게 된 후 그 주소로 메시지를 보내면 2계층에서 오버헤드(MAC주소추가) 되었을 때 ARP 프로토콜이 처음 소통했던 서버의 주소와 다른 것으로 인지하고 중간에 데이터를 버린다. 브로드캐스트가 아닌 다른 IP 주소의 MAC주소가 2계층에서 추가되므로 서버 발견 메시지를 보냈을 때와 DHCP 요청 메시지를 보낼 때의 목적지 IP주소가 달라지기 때문이다. , 브로드캐스트로 통신을 시작했기 때문에 시작할 때와 다른 주소를 사용하여 데이터를 보내면 데이터는 버려진다.





▶ 인터넷 서비스 제공자(ISP)


- 인터넷 서비스 제공자(Internet Service Provider, ISP)에 의해 계층적으로 IP주소가 관리되어 라우팅 정보를 효율적으로 알린다. 여기서 효율성이란 포워딩 테이블에서 주소를 검색하는 시간을 짧게 하는 것을 의미한다


- 서브넷(Subnet) : 어떤 기관에 소속되어 있지만 분리되어 하나로 인식될 수 있는 네트워크망을 의미한다. 범위는 근거리 통신망 내에 속하는 모든 호스트들이 될 수 있다.



- 포워딩 테이블에서 Entry 수는 서브넷(Subnet)을 대표하는 라우터의 개수인데개개의 호스트들의 IP주소를 엔트리로 하면, 포워딩 테이블에서 주소를 탐색하는 시간이 길어지기 때문에 대표 라우터의 IP주소로 테이블을 구성하여 테이블 크기를 줄여서 탐색시간을 짧게 한다.


- 즉ISP가 계층적으로 주소를 관리하므로, 해당 서브넷에 해당하는 IP주소를 알리면 인터넷(Internet)에 연결되어있을 때 해당 Subnet에 포함되는 IP주소의 호스트와 통신할 수 있게 된다.

 

- ISPSubnet을 알 수 있는 방법은 인터넷 관련 최상위 기관인 국제인터넷주소관리기구(Internet Corporation for Assigned Names and Numbers, ICANN)에 의해 정보를 제공받기 때문이다. ICANN은 인터넷 DNS의 기술적 관리, IP 주소공간 할당, 프로토콜 관리, 루트 서버 시스템 관리 등의 업무를 조정한다.

 

 


 

▶ 네트워크 주소 변환(NAT)

 

- 네트워크 주소 변환(Network Address Translation, NAT)은 수많은 Subnet으로 이루어진 광범위한 네트워크에서 통신하기 위해 사용된다.

 

- Subnet 내부 통신의 경우 : private 제한을 가지는 홈 네트워크 같은 로컬 네트워크에서 데이터를 주고받게 된다. 이 때 라우터를 거치지 않고 자신의 IP주소를 사용한다.

 

- Subnet 외부 통신의 경우 : 자신의 IP와 같은 IP주소가 다른 Subnet에 있을 수 있기 때문에 라우터를 거쳐 갈 때 단 하나의 NAT IP주소로 변환되어 통신을 하게 된다. 당연히 통신을 하는 상대의 IP주소도 NAT IP주소로 변환된 것이다.


[ 라우터를 기준으로 좌 외부 통신(Internet), 우 내부 통신 ]



[ 라우터(NAT)를 기준으로 좌 내부 통신, 우 외부 통신(Internet) ]


- NAT IP주소로 변환되는 과정에서 IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하게 되는데, 패킷에 변화가 생기는 것이므로 IPTCP/UDP의 체크섬도 다시 계산된다. 이는 호스트 간의 통신에 복잡성을 증가시키는 것으로 네트워크 성능에 영향을 준다.

 

- 그럼에도 NAT IP주소로 변환하는 이유는 위에서도 언급했듯이 광범위한 네트워크에서 쉽고 빠른 통신을 위해 여러 개의 호스트가 하나의 공인 IP주소를 사용하여 인터넷에 접속하기 위해서이다.

 

- 다시 말해, 복잡성이 증가함에도 공인 IP주소를 사용하는 것은 여러 호스트에서 하나의 IP 주소를 공유함으로서 라우터의 탐색 시간을 줄여 보다 빠르게 통신하기 위해서이다.


- NAT 전의 ISP는 Subnet에 포함되는 IP 주소들(사설 IP)의 시작주소(Subnet Prefix)를 알렸는데, 여기서는 NAT에 의해 변환된 단 하나의 공인 IP주소(NAT IP주소)를 사용함으로서 ISP로부터 호스트별 주소를 할당받지 않고 단 하나의 IP주소만을 할당받는다.

 

- 공인 IP주소는 Subnet 외부의 통신을 위해 할당받는 것이기 때문에 로컬 네트워크에서 호스트의 주소를 바꾸게 되어도 Subnet 외부에는 알려지지 않는다. 그 외 다른 정보도 외부로부터 숨겨질 수 있어서 보안성이 더해진다.

 

- 로컬 네트워크에서는 기기의 주소를 바꾸지 않고, ISP만 바꾸는 것도 가능하다.

 

- NAT은 변환 테이블(Translation Table)을 통해 기존의 IP주소 및 포트번호와 대응되는 NAT IP 주소 및 새로운 포트 번호를 기억한다.

 

- 끝으로, NAT 라우터는 무조건 들어오고, 나가는 데이터그램의 헤더에 저장된 IP 주소, 포트 번호와 대응되는 NAT IP 주소, 새로운 포트 번호로 변환해야한다.






+ Recent posts