네트워크 계층(Network Layer): 발신 호스트에서 수신 호스트로 전송 세그먼트(Transport Segment)를 운반하는 역할
발신자(Sender): 세그먼트를 데이터그램(datagram)으로 캡슐화하여 링크 계층(Link Layer)에 전달한다.
수신자(Receiver): 데이터그램에서 세그먼트를 추출하여 전송 계층(Transport Layer) 프로토콜에 전달한다.
라우터(Router): 통과하는 모든 IP 데이터그램의 헤더 필드를 검사하고, 데이터그램을 입력 포트에서 출력 포트로 이동시켜 종단 간 경로를 따라 전송을 수행한다.
네트워크 계층은 포워딩(데이터 평면)과 라우팅(제어 평면)으로 나눌 수 있다.
포워딩(Forwarding): 라우터의 입력 링크에서 적절한 출력 링크로 패킷을 이동시키는 과정 - 로컬(Local), 라우터별 기능으로, 도착한 데이터그램이 어느 출력 포트로 나갈지 결정함
라우팅(Routing): 출발지에서 목적지까지 패킷이 이동한 경로(route)를 결정하는 과정 - 네트워크 전체 로직으로, 라우팅 알고리즘에 의해 경로가 결정됨
쉽게 말하자면 라우팅은 서울-부산 경로를 결정(어떤 고속도로 탈지, 어떤 도시 지날지)을 계획하는 것을 의미하고, 포워딩은 교차로(라우터)에서 내비게이션(포워딩 테이블, FIB)을 보고 어디로 나갈지를 결정한다고 설명할 수 있다.
포워딩은 빠르고, 로컬에서 일어난다.
라우팅은 더 넓은 시야에서 경로를 계산하고, 포워딩을 위한 정보를 제공한다.

앞서 언급했듯 네트워크 계층의 로직은 데이터 평면(포워딩)과 제어 평면(라우팅)으로 나눌 수 있다.
데이터 평면(Data Plane): 데이터그램을 입력 포트에서 출력 포트로 전달
제어 평면(Control Plane): 데이터그램이 종단 간 경로를 따라 어떻게 라우팅 될지 결정

네트워크 서비스 모델: 데이터그램의 전송에 대해, 어떤 품질(QoS) 보장을 제공할지 정의

인터넷의 서비스 모델: 최선형 노력 (Best Effort) - 어떠한 QoS 보장도 하지 않음 (최대한 노력해 볼게 근데 안 돼도 내 탓 아님 ㅋㅋ - 의 마인드)
즉,
- 목적지까지의 데이터그램을 성공적으로 전송하는 행위
- 전송 타이밍
- 전송 순서
- 종단 간 플로우에 사용 가능한 대역폭
을 보장하지 않음
그럼에도 복잡한 QoS 보장 로직을 처리하지 않고, 그저 패킷을 다음 라우터로 전달하는 데에만 집중하면 됐기에 널리 채택되었다.
라우터(Router): 네트워크의 핵심 장치, 데이터그램을 고속으로 처리함

입력 포트(Input Ports): 라인 속도(Line Speed)로 처리를 완료하는 것
물리 계층/링크 처리 계층: 비트 수신 및 링크 계층의 프로토콜을 처리 (ex. 이더넷)
분산 스위칭(Decentralized Switching): 헤더 필드 값을 사용하여 입력 포트 메모리에 있는 포워딩 테이블(FIB)에서 풀력 포트를 조회
- 목적지 기반 포워딩: 목적지 IP 주소만을 기반으로 포워딩 - 전통적 방식
- 일반화된 포워딩: 헤더 필드의 임의의 집합을 기반으로 포워딩 - SDN 등
입력 포트 큐잉(Input Port Queuing): 데이터그램이 스위치 패드릭으로 포워딩되는 속도보다 빠르게 도착할 경우 발생
최장 프리픽스 매칭(Longest Prefix Matching): 라우터는 주어진 목적지 주소에 대하여 포워딩 테이블 항목을 찾을 때, 목적지 주소와 일치하는 가장 긴 주소의 프리픽스를 사용함.
이는 주소 지정(Addressing) 시 유연성을 높이기 위함이며, 흔히 TCAMs(Ternary Content Addressable Memories)를 사용하여 한 클록 사이클 내에 고속으로 수행된다.

스위칭 패브릭(Switching Fabrics): 패킷을 입력 링크에서 적절한 출력 링크로 전송하는 장치
스위칭 속도(Swirching Rate): 패킷이 입력에서 출력으로 전송될 수 있는 속도 - N개의 입력 포트가 있다면, 라인 속도의 N배가 이상적이다.
3가지 주요 유형의 스위칭 패브릭
1. 메모리를 통한 스위칭 (Switching via Memory)
초기 라우터 방식으로, CPU의 직접 제어 하에 스위칭이 이루어진다.
패킷이 시스템 메모리에 복사되며, 속도는 메모리 대역폭(데이터그램당 버스 교차 2회)에 의해 제한된다.
2. 버스 스위칭 (Switching via a Bus)
데이터그램이 공유 버스를 통해 입력 포트 메모리에서 출력 포트 메모리로 전송된다.
버스 경합(Bus Contention)으로 인해 스위칭 속도가 버스 대역폭에 의해 제한된다.
3. 상호연결 네트워크를 통한 스위칭 (Switching via Interconnection Network)
크로스바(Crossbar), 클로스 네트워크(Clos networks) 등 멀티 프로세서 연결을 위해 개발된 네트워크를 사용한다.
병렬 처리를 활용하기 위해 데이터그램을 고정 길이 셀(cell)로 분할하여 패브릭을 통해 스위칭하고, 출구에서 데이터그램으로 재조립하는 방식을 사용한다.
대규모 라우터에서 수백 Tbps까지 스위칭 용량을 제공한다.
라우터의 성능은 큐잉 및 스케줄링에 의해 크게 좌우된다.
입력 포트 큐잉(Input Port Queuing): 스위치 패브릭 속도가 입력 포트의 결합 속도보다 느릴 때 발생
HOL(Head-of-the-Line) Blocking: 큐의 맨 앞에 있는 데이터그램이 스위치 패브릭을 통과하지 못해, 뒤따르는 다른 목적지의 데이터그램까지 차단하는 현상
입력 버퍼 오버플로우로 인해 지연 및 손실이 발생할 수 있다.
출력 포트 큐잉 (Output Port Queuing): 데이터그램이 스위치 패브릭에서 링크 전송 속도보다 빠르게 도착할 때 버퍼링이 필요
큐잉 지연 및 출력 포트 버퍼 오버플로우로 인해 손실이 발생한다.
버퍼링의 규모는 링크 용량 C에 평균 왕복 시간(RTT, 약 250ms)을 곱한 값(RTT*C)으로 권장되나, 최근에는 RTT*C/루트N (N: 흐름 수)가 추천된다.
버퍼 관리(Buffer Management)
Drop 정책: 버퍼가 가득 찼을 때, 어떤 패킷을 추가하거나 드롭할지 결정
- Tail Drop: 도착하는 패킷을 드롭
- Priority: 우선 순위에 따라 드롭/제거
Marking: 혼잡을 알리기 위해 패킷에 표시하는 기능 (ECN, RED)
패킷 스케줄링(Packet Scheduling): 다음으로 링크에 전송할 패킷을 결정
선입선출(FCFS/FIFO): 도착 순서대로 패킷을 전송
우선순위 스케줄링(Priority Scheduling): 도착 트래픽을 분류(헤더 필드 사용 가능)하고, 클래스별로 큐에 저장, 버퍼링된 패킷이 있는 가장 높은 우선순위 큐에서 패킷을 전송 (각 우선순위 클래스 내에서는 FCFS)
라운드 로빈(Round Robin, RR): 클래스별로 큐에 저장하고, 서버가 순환적으로 각 클래스 큐를 스캔하며, 각 클래스에서 하나의 완전한 패킷을 차례로 전송
가중 공정 큐잉(Weighted Faif Queuing, WFQ): 라운드 로빈의 일반화된 형태 - 트래픽 클래스별로 최소 대역폭 보장 가능

망 중립성(Network Neutrality): ISP가 자원을 어떻게 공유하고 할당해야 하는지에 대한 기술적, 사회적, 경제적 원칙
기술적 메커니즘: 패킷 스케줄링 및 버퍼 관리가 망 중립성을 구현하는 기술적 수단
핵심 원칙
- 차단 금지(No Blocking): 합법적인 콘텐츠, 애플리케이션, 서비스, 또는 비유해 장치를 차단해서는 안 됨
- 조절 금지(No Throttling): 인터넷 콘텐ㅌ츠, 애플리케이션, 서비스 또는 비유해 장치 사용을 기반으로 합법적인 인터넷 트래픽을 저해하거나 저하시켜서는 안 됨
- 유료 우선순위화 금지(No paid Prioritization): 특정 트래픽에 대한 유료 우선순위화를 제공해서는 안 됨