본문 바로가기

프로그래밍/네트워크

[네트워크] network layer - Data Plane(Router) 1

 

네트워크 계층의 역할 ?

송신 호스트에서 수신 호스트로 패킷을 전달하는 것이다. 

 

 

이를 위한 두 가지 중요 기능을 알아야 한다.

forwarding and routing

 

 

 

fowarding(전달) : 패킷이 라우터의 입력 링크에 도달했을 때 라우터는 그 패킷을 적절한 출력 링크로 보내야한다.

라우터의 입력 링크에서 출력 링크로 어덯게 패킷을 전달하는지

 

Routing : 패킷을 전송할 때 패킷 경로를 결정해야한다. 이러한 경로를 계산하는 알고리즘을 routing algorithm 이라 한다.

 

둘이 비슷해 보이지만 포워딩은 라우터 입력 링크에서 적당한 출력 링크로 전송하는 내부적인 동작.

라우팅은 전반적인 경로를 결정하는것이다.

 


 

network layer : data plane, control plane

 

Data plane

로컬, 라우터별 기능

라우터 입력 포트에 도착하는 데이터그램이 라우터 출력 포트로 전달되는 방법을 결정한다.

간단하게 말해 포워딩 기능

 

 

control plane

네트워크 전체 로직

소스 호스트에서 대상 호스트로의 엔드 엔드 경로를 따라 라우터 간에 데이터그램을 라우팅하는 방법을 결정합니다.

두 가지 컨트롤 플레인 접근 방식

기존 라우팅 알고리즘: 라우터에서 구현

SDN(소프트웨어 정의 네트워킹): (원격) 서버에 구현됨

 

 

 

우리는 이번 포스트에서 Data plane 에 대해 알아볼 예정이다.

Data plane에 대한 이해는 Router에 대한 이해이다.

 

 


 

Router

Router 의 내부

Router의 구조는

1. input port

2.high-speed switching fabric

3. output port

로 구성되어 있다.

 

 

Input port 

input port에 들어온 것을 header field 값들을 이용해서 forwarding table을 보고, 어느 output port로 가야할지 찾는다.

해당 기능을 빨간 부분에서 실행한다.

queue datagram이 들어가 있는 동안, 맨 첫번째 datagram부터 IP header를 읽어서 어디로 보내야 할지를 찾는다. 그리고 Forwarding을 한다.

 

여기서 말했던 forwarding table ?

input port memory 에 있다.

 

결국 memory를 읽고 fowarding 해야 한다.

fowarding 하는 기준을 알아보자.

 

 

 

 destination-based forwarding 

간단하게 말하면 주소에 대해 범위를 설정하고 해당하는 link interface로 보내는것이다.

 routing 알고리즘으로 범위가 설정되고, 어떤 주소에 대해서 어떤 interface를 통해 나가야 빨리 나가는지 학습해 나간다. , router protocol을 통해 학습하는 것이다. 이것은 전세계 수많은 IP들을 전부 다 해준다. 학습해가면서 업데이트한다. IP주소의 범위는 대략적으로 국가적으로 나누어져 있다. 하지만 routing 알고리즘은 오버헤드가 상당히 크다.

 

routing 알고리즘에 대해 좀 더 들어가보자.

Longest prefix matching

범위를 나눈 방법이다.

첫번째 IP를 보면 앞에서부터 IP를 대조하고 뒤에 *는 뭐가 오든 상관이 없다. 결과에 따라 1~3에 매칭된다.

아래도 마찬가지다.

 

이때 Longest prefix matching을 사용한다. 앞에서부터 제일 길게 matching 되는 entry를 찾아서 해당하는 link 로 datagram을

보내라고 switch한테 알려준다.

첫번째 주소는 당연하게 0번 link로 가게 될테지만 두번째 주소는 어디로 향해야 할까?  1번 ? 2번?

1번 link 로 가게 된다. 1,2 link 가 일치하지만, 1번 link entry가 더 길게 matching 되기 때문에 1번 link 로 보내진다.

 

 

 

 

Switching fabrics

패킷을 input buffer에서 output buffer로 전달하는 부분이다.

입력 버퍼에서 적절한 출력 버퍼로 패킷 전송이 중요하다.

switching rate라 하면 input에서 output으로 초당 몇 개의 패킷을 보내는 전송률이다. N개의 input이 있다면 line rate N배가 된다. 높을수록 성능이 좋다고 말한다. 

 

switching fabric은 크게 3가지가 있다.

1. memory : 가장 오래된 방식

2. bus : line을 공유하여 한번에 하나씩 보내는 방식

3. crossbar : line을 많이 사용하여 동시에 여러 개 보낼 수 있는 방식

1. memory

가장 전통적인 방식이다.

 input port data memory에 넣었다가 output port로 보내는 형태이다.

 memery bandwidth에 의해 제한되는 속도(데이터그램당 2개의 버스 교차)

 

 

2. bus

bus를 통해 스위치되는 방식

bus에서는 한번에 하나씩만 데이터가 전송되어야 한다. 결국 switching rate bus bandwidth에 의해 결정된다.

32Gbps 버스, Cisco 5600: 액세스 및 엔터프라이즈 라우터에 충분한 속도

 

 

3. interconnection network (crossbar)

bus bandwidth를 극복하기 위해 등장

bus line 하나였다면 이 방식은 line을 여러 개 교차시켜 놓는다. 그래서 데이터를 동시에 보낼 수 있다. 그러나 line을 많이 두기 떄문에 Hardware적인 구현비용이 더 들어가게 된다.

Cisco 12000: 상호 연결 네트워크를 통해 60Gbps까지 전환

 

switching fabric 에 대한 개념까지 알았으니 여기에 하나의 개념이 추가로 필요하다.

 

Input port queuing

Input port에서 datagram이 들어오는 것이 fabric로 보내는 것보다 빠르다면 input port에서 queueing이 생기게 된다. 심지어 input buffer overflow날 경우 드랍해버린다.

 Head-of-the-Line(HOL) blocking이란 queue 맨 앞에 있는 것이 line head부분인데,  head가 나가지 못하면 뒤에거까지 못 나감을 말한다.