Network Layer
Services and Protocol
네트워크 계층은 근본적으로 송신 호스트에서 수신 호스트로 패킷을 전달하는 것이다.
- sender : 세그먼트를 데이터 그램으로 encapsulate 한 다음 링크 계층으로 전달
- receiver : 헤더에 쓰인 주소를 읽어들이고 전송 계층으로 전달
이러한 일을 위해서 네트워크 계층에는 2가지 기능을 정의하고 있다. 먼저 Forwarding은 라우터의 input link로 들어온 패킷을 어떤 output link로 내보낼지 결정하는 과정이다. routing은 패킷에 명시된 목적지 주소까지 경로를 결정하는 과정이다. 그래서 라우터는 목적지를 결정하는 테이블인 forwarding Table을 가지고 있어서 이것을 참고해서 패킷을 어디로 전달할지 결정한다. 예를 들어서, 서울에서 부산까지 간다고 하자. 고속도로를 탈 때 각각 분기점이 있을 것이다. 어느 분기점으로 가야하는 지 결정하는 과정을 포워딩, 서울에서 부산까지 어떤 분기점으로 어느 경로로 갈지 결정하는 과정이다.
Data Plane, Control Plane
라우터에서는 forwarding table이 반드시 필요하다. 라우터에서는 도착하는 패킷의 헤더를 읽고 어느 라우터로 보내야 할지 결정한다. 그렇다면 forwarding table은 어떻게 만들어지는 것일까? 이 과정을 알기 위해서는 네트워크 계층의 2가지 plane을 이해해야 한다. 먼저, Data Plane은 로컬에서 동작하는 것으로 한 라우터 단위의 기능을 수행하며 forwarding 한다. Control Plane은 전체 네트워크 영역에서 동작하는 것으로, routing 을 결정한다. 이 Plane에서는 라우팅 알고리즘을 통해서 routing table을 만든다. 간단하게 알아보면, 전통적인 라우팅 방식과 최근에 사용한 소프트웨어 기반 라우팅 방식이 있다.
- Per-router control plane : 전통적인 라우팅 알고리즘을 사용하는 방법으로, 각각의 라우터에서 라우팅 알고리즘이 동작하여 포워딩 테이블이 생성된다.
- SDN(Software-Defined Network) : remote controller로 forwarding table을 만들어 전달한다. 네트워크가 소프트웨어적으로 정의되었을 때 포워딩 테이블을 계싼하는 컨트롤러가 라우터와 상호작용하며 실행된다.
Network Service Model
그렇다면, 네트워크 계층에서 만들어지는 데이터그램이 송신측에서 수신측까지 어떻게 잘 전달할까?
먼저 individual datagrams 서비스를 통해 전달에 대한 보장을 제공한다. 또, flow 기반의 서비스를 제공한다. 이는 데이터그램이 전달될 때 순서를 보장하고, 최소 대역폭을 제공하는 것이다.
실제로 인터넷은 Service Model이 "Best Effort"이다. 그 이유는, 데이터그램의 전달과 순서, 대역폭을 하나도 보장해주지 않기 때문이다. 최선을 다해서 데이터그램을 보내는 것만 집중하기 때문에 잘 전달되었는지는 전혀 관심이 없다.
Reflections on best effort service
Best Effort 서비스는 성공적이라고 말하기 어렵다. 그 이유는 메커니즘이 너무 단순해서 제공할 수 있는 기능이 적다. 또, 일정 수준 이상의 대역폭을 보장하기 때문에 속도만 빠른 서비스가 된다.
What's inside a router
Router Architecture overview
라우터는 입력 포트, 스위치 구조, 출력 포트, 라우팅 프로세서 등이 있다.
- 입력 포트(input ports) : 입력 포트에서는 lookup 기능을 통해서 switch fabric의 어느 output port로 보낼지 forwarding table을 참조한다. 각 input port마다 동작하기 때문에 decentralized switching이라고 한다.
- switch fabric : 각 input port와 output port가 연결되어 있는 곳이다.
- 출력 포트(output ports) : switching fabric에서 온 패킷을 링크 계층, 물리 계층을 거쳐 output link로 내보낸다.
- routing process : routing protocol을 실행하고 forwarding table과 연결된 link 상태 정보를 관리하고 forwarding table을 계산한다.
Input port functions
입력 포트에서 decentralized switching으로 동작하는데, 이는 헤더 필드 값과 forwarding table을 사용해서 output port를 찾는 역할을 한다. 이 switching 에는 2가지 forwarding 방법이 있는데, 하나는 destination-based forwarding, 나머지 하나는 generalized forwarding 방법이다. forwarding table은
Destination-based forwarding
전통적인 방법으로 forwarding 하는 것으로, 목적지 IP 주소를 보고 패킷을 전달한다. Longest prefix matching 기법을 사용하는데, 패킷의 목적지 주소 기반 forwarding table에서 가장 긴 prefix가 일치하는 항목을 찾는 방법이다. 아래 예시를 보면 첫 번째 주소는 링크 interface가 0, 두 번째 주소는 1에 매칭됨을 알 수 있다. 두 번째 주소는 link 2에 연결 될 수도 있지만, 가장 길게 일치하는 주소가 존재하기 때문에 link 1과 연결된다.
이때, Longest Prefix Matching을 빠르게 수행하기 위해서 TCAMs(Ternary Content Addressable Memories)를 사용한다.
Generalized Forwarding
이 방법은 패킷 헤더의 다양한 필드 값을 사용해 패킷을 전달한다. IP 주소 외에도 다른 출발지 IP 주소, 포트 번호, 프로토콜 유형에 따라서 전달할 출력 포트를 결정할 수 있다.
Switching Fabrics
Switching Fabrics에서는 input link에서 어떤 output link로 패킷을 전달할지 결정하고 내보내는 역할을 한다. 세 가지 타입이 있는데, memory 구조, bus 구조, interconnection network 구조가 있다.
Switching via Memory
초기의 라우터는 CPU를 직접 제어해서 입력 포트와 출력 포트 사이에서 패킷을 스위칭하는 방법이었다. 이때 입력 포트와 출력 포트는 운영체제의 I/O 장치처럼 동작한다. 입력포트로 도착한 패킷은 interrupt를 발생시켜서 시스템의 메모리로 복사되고 선택된 출력 포트로 내보낸다. 그래서 하나의 메모리를 공유하며, 하나의 패킷은 input port가 복사될 때 한 번, output port로 전달되기 위해서 한 번. 총 2번 메모리에 접근한다. 그래서 메모리의 bandwidth에 따라 속도가 결정된다.
Switching via a Bus
입력 포트가 라우팅 프로세서의 개입 없이 버스를 통해 직접 출력 포트로 패킷을 전송하는 방법이다. 하나의 공유 버스를 사용하고 있기 때문에, 패킷이 버스를 통해 전송되고 있을 때 다른 입력 포트에서는 출력 포트로 전송할 수 없다.
Switching via interconnection network
대역폭의 한계를 극복하기 위해 나온 방법으로 n개의 input port와 n개의 output port가 연결된 2n개의 버스를 구성해서 빠른 속도로 패킷을 전송할 수 있다.
Queuing
출력 포트에서는 메모리에 저장된 패킷을 가져와 출력 링크로 전송한다. 이때 전송을 위한 패킷 선택, 큐 제거, 필요한 링크 계층과 물리 계층 전송 기능을 수행한다. 이때 입력 포트로 들어온 패킷이 출력 포트로로 빠르게 빠져나가는 게 아니기 때문에 입력 포트와 출력 포트 모두 queuing 이 발생할 수 있다. 큐가 점점 커지면 라우터 내의 메모리가 손상되고 저장할 수 없는 상태라면 패킷 로스가 발생할 수 있다.
Input port
여러 입력 포트에서 같은 출력 포트로 패킷을 보내면, 다른 패킷들은 대기해야 한다. 때문에 HOL Blocking 문제가 발생할 수 있다. 그 이유는 특정 output port에 하나의 패킷만 전송할 수 있기 때문에 여러 패킷이 하나의 ouput queue로 향하면 input queue에서 대기해야 하는 문제가 생긴다.
Output port
입력 포트 뿐만 아니라 출력 포트에서도 queuing 이 발생한다. 네트워크로 내보내는 패킷을 처리하는데도 시간이 걸리기 때문에 내보내는 패킷 수보다 switching fabric으로부터 도착하는 패킷이 많을 때 queuing이 발생한다. 버퍼가 가득차면 패킷이 버려지기 때문에 packet loss가 발생할 수 있다. 그래서 메모리가 충분하지 않을 때는 도착한 패킷을 삭제하거나 대기 중인 패킷을 제거해서 새로 도착한 패킷이 들어올 공간을 마련해야 한다. 이러한 일을 패킷 스캐쥴러가 담당한다.
Buffering
switching fabric의 전송 속도가 입력 포트에서 패킷을 받는 속도보다 빠를 때 버퍼링이 발생한다. 여러 입력 포트에 도착하는 패킷들이 같은 출력 포트로 전달될 때 발생되는 queuing을 처리하기 위한 것이다. 이때 버퍼가 꽉 차거나 혼잡이 발생하면 데이터그램은 버려질 수 있다.
Scheduling Discipline
이는 여러 input port에서 온 패킷 중에서 어떤 패킷을 먼저 전송할지 결정하는 것이다.
Buffer Management
- drop : 패킷이 꽉 찬 상태에서 패킷이 들어오면, 그 패킷은 버려진다.
- tail drop : 마지막에 도착한 패킷을 버린다.
- priority : 패킷의 우선순위에 따라 우선순위가 낮은 패킷을 버린다.
- marking : signal congestion에 표시한다. (ECN, RED)
Packet Scheduling
어떤 패킷을 다음 link로 보낼지 결정하는 과정이다.
- FCFS(FIFO)
- Priority
- Round Robin
- Weighted Fair Queuing
FCFS
링크가 현재 다른 패킷을 전송중이면 output link queue에 도착한 패킷은 전송을 기다린다.
Priority Scheduling
output link에 도착한 패킷은 우선순위 클래스로 분류되어 우선순위가 높은 패킷부터 전송된다. 이때 우선순위가 낮은 큐는 우선순위가 높은 큐에 비해 처리되는 속도가 매우 느려서 무시되는 문제가 있다.
Round Robin
Priority Scheduling과 같은 클래스로 분류되지만 엄격한 우선순위가 존재하지 않는다. 서버가 class queue를 순회하면서 하나씩 보내고 그다음 class queue의 패킷을 내보내는 방식이다.
Weighted Fair Queuing(WFQ)
도착한 패킷은 적절한 클래스별 대기 영역에 분류되어 대기한다. Round Robin과 같이 순환식으로 동작하는데, 작업 보존 큐잉 규칙도 따른다. 각 클래스 i 는 w(i)라는 가중치를 할당 받는다. 전송할 패킷이 있는 동안에는 w(i)/∑w(i)만큼의 서비스 시간을 보장받는다. 최악의 경우, 모든 큐에 패킷이 있을 때도 이 시간을 보장 받을 수 있다.
'CS > 네트워크' 카테고리의 다른 글
[컴퓨터망] 5. Network Layer(Control Plane, Routing Protocols) (1) | 2024.06.08 |
---|---|
[컴퓨터망] 4. Network Layer(Internet Protocol) (0) | 2024.06.08 |
[컴퓨터망] 3. Transport Layer(전송 계층 서비스, 멀티플렉싱, UDP) (0) | 2024.04.19 |
[데이터통신] 3. Data Link Layer(DLC 프로토콜) (0) | 2024.04.17 |
[데이터통신] 3. Data Link Layer(데이터링크 계층, DLC functions) (0) | 2024.04.17 |