Network-layer services and protocols
네트워크 레이어가 하는 일
- 세그먼트를 sending host로 부터 receiving host로 보내줌
- sender: encapsulate segement into datagram, link layer로 보냄
- receiver: transport layer로 segment 넘겨줌
라우터가 하는 일
- IP datagram의 header field 확인해서 넘겨주기 (어디로~가야하나~)
- input port에서 output port로 datagram 옮겨줌
Two key network-layer functions
network-layer functions:
-
forwarding
input link에서 적절한 output link로 packet 이동해주기
-
routing
source에서 destination으로 갈 때의 경로 설정해주기
* routing 알고리즘 사용
Network layer: data plane, control plane
Data plane - forwarding
- local, per-router function
- 어디 output port로 보낼지 결정
Control plane - routing
- router끼리의 협력
- 어디 라우터로 보내야 할까나...
- 두가지 방법
- traditional routing algorithms: router에서 구현
- software-defined networking(SDN): server에서 구현
Per-router control plane
routing algorithm을 토대로 control plane에서 각 라우터끼리 data 넘김 -> forwarding table 토대로 data plane에서 output 결정 내림
SDN control plane
server에서 control plane 담당 => 서버의 지시를 따라 router에서 경로 설정됨
CA를 통해 서버의 지시를 받음
모든 router는 data plane의 역할을 하게 됨
Router
- routing, management control plane(software)
- forwarding data plane(hardware)
- router input ports
- router ouput ports
- high-speed swtiching fabric
구성
- physical layer
- link layer
- decentralized switching(분산 스위칭)
- header filed 이용
- input port memeory에 있는 forwarding table 참고해서 어디 output port로 보내줘야할지 검색
- input port processing 수행
=> 만약 datagram이 forwarding보다 빠르게 오게 되면 delay 발생 가능: queue로 이뤄짐
forwarding 방법
- destination-based forwarding(traditional): IP주소만
- generalized forwarding: SDN(오버헤드가 큰 라우팅 따로 분리해서 원격서버에서 관리하기)
근데 만약 forwarding table에 IP주소가 잘 나눠있지 않다면?
: 가장 길게 매칭되는 범위의 link interface를 따라간다 = longest prefix matching
Switching fabrics
입력 포트에서 출력 포트로 보내주는 과정
주요 타입
1. memory
2. bus
3. interconnection network
1. memory
전통적 방식
시스템 메모리에 packet 복사 후 전송됨
속도가 메모리 대역폭의 영향을 받음
2. bus
직접적으로 output port로 연결되어있음 => 버스를 공유함
shared bus라는 하나의 공유된 통로 => 이거의 폭의 영향을 받음
3. interconnection network
nxn 스위치를 연결해 앞선 방식에 비해 매우 빠름!
입력시 datagram을 조각내기 -> 출력시 합치기
switch fabric에서의 속도가 너무 느리면 -> queuing delay & loss 발생 => switch fabric 내에서
HOL(head of the line) blocking: 앞에서 막고 있어서 뒤에 있는 애가 못나감 => input port에서
output port queuing
switching 속도 보다 output line speed가 더 느리면 -> buffering 발생 -> datagream loss 발생
=> 어떤 것을 먼저 보낼지 결정해야함 -> 우선순위를 고려해야함
Buffer management
- drop: buffer가 꽉 찼을 때 어떤 packet을 추가할지 버릴지 결정함
- tail drop: 지금 오는 애 drop
- priority: 우선순위 보고 잘라
- marking: signal congestion(ECN)을 표시하는 packet
Packet Scheduling
-
FCFS
First Come, First Served
가장 먼저 온거 먼저 처리해주기
printer, cpu
FIFO랑 비슷
-
Priority
헤더 필드보고 분류
가장 높은 우선순위의 패킷을 보냄(온 것들 중에서)
-
Round Robin scheduling
분류 후 각각 하나 씩 보내기
-
WFQ
Weighted Fair Queuing
RR처럼 분류 -> 각 클래스 별로 가중치가 있음
- 사이즈가 큰 packet은 높은 가중치를 받기 어려움