-
[네트워크] 14. Network LayerCS/네트워크 2023. 6. 7. 00:32
Network Layer 개요
네트워크 계층은 아래와 같은 특징을 가지고 있습니다.
- 네트워크의 pdu는 datagram입니다. segment를 한 단계 캡슐화 한 것입니다.
- 네트워크 계층 protocol은 host와 router에 존재합니다.
- routing : 어디로 보낼지 길을 정합니다.
- forwarding : 정한 길로 패킷을 보냅니다.
- routing algorithm : end to end 경로를 결정합니다.
- local forwarding table : local에서 어디로 forwarding 할 지 결정합니다.
- connection setup : network 계층은 데이터를 보내기 전 host간 virtual connection을 맺습니다. (tcp는 process간)
Network service model
network service model은 몇 가지를 보장합니다.
- 전달 보장(일정 시간 내로)
- 순서대로 전달 보장
- 전달시 최소한의 bandwidth 보장
Transport layer 와 Network layer의 차이
- transport layer는 Process to Process, network layer은 Host to Host
- transport layer는 UDP, TCP 2가지, network layer는 1가지
- transport layer는 end-system only, network layer는 end-system and NW core
Virtual circuit
네트워크는 비연결성 서비스와 연결성 서비스를 제공합니다.
datagram은 비연결성, virtual circuit은 연결성 서비를 제공합니다.
이중 virtual circuit는 call setup을 통해 미리 경로를 결정합니다. (predictable service)
virtual circuit은 3가지를 포함합니다.
- destination까지 path
- VC numbers : link별 하나씩(변화 가능)
- forwarding table의 entries
virtual circuit은 라우터에서 연결 상태 정보를 유지합니다.
크게 ATM, frame-relay, X.25에서 사용되며, 요즘 인터넷에서는 사용되지 않습니다.
Datagram
datagram은 call setup이 없습니다. 라우터 또한 connection state를 저장하지 않습니다.
패킷은 destination host address를 이용해서 forwarding 됩니다.
위 그림은 datagram의 forwarding table입니다. 모든 IP주소를 넣지 않고, IP주소의 범위를 지정해서 넣습니다.
이 때, link interface 1번과 2번은 범위가 겹칩니다.
범위가 겹치게 될 경우 prefix가 더 긴 범위로 우선적으로 forwarding 됩니다.
Datagram vs Virtual Circuit
VC는 단말기기의 성능이 좋지 않을 때, 라우터가 network 계층에서 많은 일을 해주기 위함입니다.
하지만 요즘 edge의 장비들은 고성능의 컴퓨터로 많은 처리를 할 수 있기 때문에, network 계층은 단순해질 수 있었습니다.
따라서 network가 단순한 datagram이 많이 사용됩니다.
Router 구조
라우터는 라우팅을 담당하는 processor와, input output port, 마지막으로 switching fabric으로 구성됩니다.
Input port
위 그림은 input port의 그림입니다. 패킷이 처리되는 속도보다 들어오는 속도가 더 빠를 수 있기 때문에 queueing을 합니다.
Switching fabrics
switching fabric에는 3가지 종류가 있습니다.
메모리 방식은 패킷을 메모리에 복사해서 읽고 쓰는 방식입니다. bandwidth에 따라 성능이 달라집니다.
bus 방식은 bus에 데이터를 흘릴 경우 맞는 pair로 가로채 가게 됩니다.
하지만 bus에 하나의 데이터를 흘리는 동안 다른 pair는 사용하지 못합니다. 이를 bus contention이라고 합니다.
crossbar 방식은 bus와 유사하지만, bus 방식이 가지고 있던 한계를 뛰어 넘습니다.
가격이 비싸다는 단점이 있습니다.
Output port
Output port 또한 보내는 속도보다 처리하는 속도가 빠를 수 있기 때문에 queue가 존재합니다.
또한 나갈 때는 우선 순위가 있어, Priority scheduling을 합니다.
이 그림은 HOL blocking을 나타냅니다. 초록색 패킷은 앞에 있는 빨간 패킷이 가로막고 있어 queueing delay가 발생합니다.
Internet Network Layer
IP datagram의 형식은 위와 같습니다.
다른 option이 없다면 20byte의 크기를 차지합니다.
Fragmentation
datagram의 크기가 너무 크면 여러 개의 fragment로 자르는 fragmentation이 이루어집니다.
이렇게 fragmentation된 데이터그램은 최종 목적지에서 reassemble됩니다.
예를 들어 4000byte 크기의 datagram이 있다고 했을 때, 3개의 fragment로 쪼개집니다.
datagram의 헤더 20byte를 제외하면 각각 1480, 1480, 1040만큼의 크기로 쪼개집니다.
이를 offset으로 표현하면 0, 1480, 2960인데, offset은 8로 나눈 0, 185, 370이 됩니다.
이를 자세히 살펴보면 아래 그림과 같습니다.
IP주소 addressing
IP주소는 Network ID와 Host ID로 구성되어 있습니다.
학교와 같이 Host가 많이 없는 경우 B나 C class를 사용하면 될 것 같습니다.
하지만 회사처럼 많은 Host가 필요한 경우는 A class를 사용해야 할 겁니다.
WAN(wide area network)을 3개의 서브넷으로 분리한 모습입니다.
이렇게 서브넷으로 분리하는 이유는 서브넷 안에서는 라우터를 거치지 않고 통신할 수 있으며, 유지보수가 용이해진다는 점이 있습니다.
Subnet Mask
IP주소의 network ID는 위와 같이 알아낼 수 있습니다.
IP주소와 Subnetmask는 & 연산 해주면 Network ID를 구할 수 있고, 나머지 부분이 Subnet의 크기(Host의 개수)가 됩니다.
CIDR
이를 또 다른 방법으로 172.217.24.0/24라고 표현할 수 있습니다.
/n의 의미는 subnet mask의 bit수를 의미합니다.
IPv4
IPv4방식은 IP주소로 4byte를 사용한 방식입니다. 4byte는 대략 40억개 입니다
하지만 IP주소는 이미 고갈되었으며, 이를 위해 여러 해결책들이 나오고 있습니다.
- DHCP
- NAT
- IPv6
DHCP
network에 들어갈 때 IP주소를 부여받기 위한 protocol 입니다. 이는 plug and play 방식으로 부여됩니다.
IP주소를 부여받는 과정은 아래와 같습니다.
- host가 DHCP discover를 broadcast 합니다.
- DHCP 서버가 DHCP offer 로 답변합니다.
- host가 DHCP request로 사용할 IP주소를 요청합니다.
- DHCP 서버가 ack로 답변합니다.
위 그림은 DHCP를 통해 IP주소를 발급받는 과정입니다.
모든 과정을 broadcast하는 이유는 네트워크의 다른 host들도 IP주소를 알아야 하기 때문입니다.
* DHCP가 단순히 IP주소만 주는 건 아닙니다.
- first-hop router
- DNS 서버의 이름과 IP주소
- network mask
이를 통해 host는 네트워크 외부와 통신하고 싶을 때 라우터의 IP주소를 알고 있기 때문에 정상적으로 통신할 수 있습니다.
Route aggregation
IP주소를 발급 받을 때 subnet 부분은 ISP가 발급해줍니다.
이 ISP의 CIDR를 외부 인터넷에 전달하면서 해당 ISP에 포함되는 IP주소로 오는 데이터가 라우팅 될 수 있게 합니다.
여기서도 longest prefix를 사용하기 때문에, ISP간 IP주소 범위가 조금 겹치더라도 괜찮습니다.
ISP는 ICANN으로부터 IP주소 block을 발급받습니다.
NAT
사설 네트워크를 떠나는 datagram은 모두 NAT의 IP주소를 갖습니다.
이때 NAT 안에 table을 두어 내부 IP주소와 port번호를 저장해 둡니다.
여기서 NAT에 남는 포트번호 아무거나와 매칭을 시켜둡니다.
이후 외부에서 NAT으로 datagram이 도착하면, table을 보고 사설 네트워크의 IP주소와 연결시킬 수 있습니다.
또한 port forwarding을 통해 외부에서 내부 host로 연결할 수 있습니다.
IPv6
32bit의 IP주소가 고갈됐기 때문에, IPv6를 점점 늘려가고 있습니다.
IPv6는 헤더가 40byte로 고정되며, fragmentation을 허용하지 않습니다. (Src/Dest에서만 Fragmentation과 Assembly를 허용)
IP주소의 크기가 128bit로 확장됐습니다.
특징으로는 checksum이 사라져서 network layer에서 확인하지 않습니다.
이렇게 IPv4주소를 IPv6로 바꾸기 위해선, flag day를 잡아서 하루만에 모든 장비를 변경해야 합니다.(불가능)
이게 불가능하기 때문에 IPv4와 같이 사용해야 하는데, 둘 사이의 transition이 필요합니다.
이를 tunneling으로 해결합니다.
IPv4라우터로 transition을 하기 위해, B라우터에서 IPv4헤더로 감싸줍니다.
또한 E라우터에서 감싼 IPv4헤더를 풀어줍니다.
이렇게 IPv4와 IPv6를 둘 다 지원하는 방식을 Dual stack 방식이라고 합니다.
ICMP
host와 router 사이 정보를 주고받기 위한 protocol입니다.
도달할 수 없는 host이거나, ping과 같은 정보를 주고받을 때 사용합니다. (TTL expired)
ICMPv6라는 새로운 버전의 ICMP도 존재하는데, Packet too big 등의 메세지를 담을 수 있습니다.
Routing Algorithm
라우팅 알고리즘은 크게 두 가지가 있습니다.
- link state 알고리즘
- distance vector 알고리즘
각각에 대해 알아보도록 하겠습니다.
라우터는 엣지 정보를 알고 있는 global과, 각자 알아서 하는 decentralized 방식 두 가지가 있습니다.
- global : 모든 라우터는 엣지 비용을 알고 있습니다. link state 알고리즘을 사용합니다.
- decentralized : 이웃한 링크에 대해만 알고 있고, 주기적으로 정보가 update 됩니다. distance vector 알고리즘이 사용됩니다.
라우터가 천천히 바뀌는 것을 static이라고 하며, 좀 더 빠르게 바뀌는 것을 dynamic하다고 합니다.
Link-state algorithm
link state 알고리즘은 Dijkstra 알고리즘을 사용합니다.
알고리즘을 간단히 설명하자면, 출발지에서 각 노드로 가는 최단거리를 갱신해가면서, 목적지까지의 최단거리를 구하는 알고리즘입니다.
그리디 알고리즘으로 분류됩니다.
알고리즘의 시간 복잡도는 n^2, 구현에 따라서 n log n 까지 가능합니다.
다익스트라 알고리즘은 global 하고 static한 특징을 띄웁니다.
Distance vector algorithm
distance vector 알고리즘은 bellman-ford 알고리즘을 사용합니다.
이 알고리즘은 부분만 정보를 알고 있을 때 사용할 수 있습니다.
dynamic programming으로 분류됩니다.
distance vector 알고리즘은 주변의 비용이 변할 경우, 자신의 path를 update하고 이를 주변에 advertise한다는 특징이 있습니다.
이는 "good news travels fast"라는 특징과, "bad news travels slow"라는 특징을 띄웁니다.
Distance vector 알고리즘은 decentralized 하고 dynamic한 특징을 띄웁니다.
'CS > 네트워크' 카테고리의 다른 글
[네트워크] 16. Link Layer Protocol (0) 2023.06.19 [네트워크] 15. AS 라우팅, BGP, SDN (0) 2023.06.19 [네트워크] 13. TCP congestion control (0) 2023.04.22 [네트워크] 12. TCP flow control (1) 2023.04.17 [네트워크] 11. TCP (0) 2023.04.11