kimyu0218
  • [네트워크/KOCW] Chap4 & 5. Network Layer
    2024년 06월 10일 15시 18분 51초에 업로드 된 글입니다.
    작성자: @kimyu0218

    네트워크 계층의 주요 업무는 송신자의 packet을 수신자에게 전달하는 것이다. 네트워크 계층은 data plane과 control plane으로 나뉜다.

    • data plane : 라우터는 input link로부터 받은 datagram을 적절한 output link로 전달한다. (forwarding)
    • control plane : 라우터는 송신자에서 수신자로 가는 경로를 결정한다. (routing)

    라우터의 핵심 요소는 forwarding table과 routing algorithm이다. 라우터는 packet의 헤더를 검사하고, 헤더 값을 forwarding table의 인덱스로 사용하여 packet이 어느 output link로 가야 하는지 결정한다. (data plane) 이때, forwarding table 내용은 routing algorithm에 의해 설정된다. (control plane)
     

    data plane

    IP; Internet Protocol

    IP에는 IPv4와 IPv6 두 가지 버전이 있다. 우선 현재 사용하고 있는 IPv4부터 살펴보자.

    version은 IP 프로토콜의 버전을 나타낸다. 이 필드를 통해 해당 datagram이 IPv4인지, IPv6인지 구분할 수 있다. TTL (time-to-live)는 datagram이 네트워크 상에서 이동할 수 있는 최대 hop 수를 의미하며, 이를 통해 datagram이 네트워크를 무한정 떠도는 것을 방지할 수 있다. (TTL은 hop을 거칠 때마다 감소하며, 0이 되는 순간 폐기된다!)
     

    IPv4 fragmentation

    MTU (maximum transmission unit) 는 네트워크를 통해 전송될 수 있는 packet의 최대 크기를 의미한다. 따라서 datagram은 MTU에 의해 크기가 제한된다. 하지만 네트워크 장비들은 서로 다른 MTU를 가질 수 있으므로, 어떤 장비의 MTU를 초과할 경우, datagram의 분할이 필요하다.

    fragment들은 목적지의 전송 계층에 도착하기 전에 다시 합쳐져야 한다. identfier, flags, fragmentation offsetfragmentation에서 조작되는 필드로, datagram을 재조합할 때 사용된다.
     

    IPv4 addressing

    호스트와 라우터가 인터넷에 연결되려면 고유한 식별자를 가져야 한다. 이 식별자를 IP 주소라고 부른다.
    인터페이스는 호스트나 라우터가 링크와 연결되는 지점을 의미한다. 각 인터페이스는 datagram을 주고받을 수 있어야 하므로 고유한 식별자가 필요하다. 즉, IP 주소는 사실상 인터페이스의 주소다. 호스트는 하나의 링크에 연결되어 하나의 IP 주소를 가지며, 라우터는 2개 이상의 링크와 연결되어 각각의 인터페이스마다 IP 주소를 가진다.
     
    IPv4 주소는 32 bit이며, 사람이 쉽게 읽을 수 있도록 dotted-decimal notation을 사용하여 표현한다. (8 bit 씩 네 부분으로 나눈 후, 각 부분을 십진수로 변환하고 점으로 구분한다!)

    라우터는 여러 개의 인터페이스를 가지고 있다. 이때, 라우터의 인터페이스에 연결된 호스트들은 동일한 네트워크 부분  (leftmost) 을 공유하는데, 이를 서브넷이라고 한다. (일종의 organization!) 서브넷은 서브넷 마스크*를 사용하여 표현된다.

    *서브넷 마스크 : 네트워크와 호스트 부분을 구분하는 데 사용되는 32bit 숫자다.

     
    CIDR (Classless Inter-Domain Routing) 은 IP 주소를 유연하게 할당하는 방식으로, 32-bit IP 주소를 두 개의 파트로 나눈다. `a.b.c.d/x`에서 `x`는 첫번째 주소 (네트워크) 부분의 길이를 의미하며, prefix라고 부른다.

    24-bit network address + 8-bit host address
    
    # subnet mask
    255.255.255.0 (= 11111111 11111111 11111111 00000000)
    
    # CIDR
    223.1.1.0/24
    

     

    DHCP; dynamic host configuration protocol

    서브넷 내의 호스트와 라우터 인터페이스는 어떻게 IP 주소를 할당받을까? 시스템 관리자가 직접 IP 주소를 할당할 수도 있지만, 주로 DHCP에 의해 자동으로 이루어진다. (직장인이 노트북을 가지고 집에서 회사로 이동하면, 회사와 네트워크의 IP 주소 범위가 다르기 때문에 IP 주소를 변경해줘야 한다. 이때 DHCP가 자동으로 새로운 IP 주소를 할당해주면, 사용자는 별도의 설정 없이 새로운 네트워크에 즉시 접속할 수 있다!)
     
    DHCP는 클라이언트-서버 프로토콜로 작동한다. 여기서 클라이언트는 새로운 네트워크에 접속하여 네트워크 설정 정보를 얻으려는 호스트다. (노트북을 들고 이동하는 직장인!)

    1. DHCP server discovery (DHCP discover message): DHCP 클라이언트는 DHCP 서버를 찾기 위해 discover를 보낸다. 이때, DHCP 서버의 주소를 모르기 때문에 서브넷의 모든 노드에게 브로드캐스트한다. (255.255.255.255)
    2. DHCP server offer (DHCP offer message) : DHCP 서버는 discover를 받으면 offer를 브로드캐스트한다. 해당 메시지에는 IP 주소와 네트워크 마스크, IP 주소의 유효한 기간 등이 포함되어 있다.
    3. DHCP request (DHCP request message) : DHCP 클라이언트는 받은 offer 중 하나를 선택하여 request를 보내 IP 주소 할당을 요청한다.
    4. DHCP ACK (DHCP ACK message) : 서버는 ACK를 전송하여 파라미터를 확인했음을 알리고, 최종적으로 IP 주소를 할당한다.
    🚨 DHCP request에서 클라이언트가 DHCP 서버의 IP 주소를 알고 있음에도 불구하고, 브로드캐스트 방식을 사용한다. 이는 다른 서버들이 클라이언트에게 제안한 IP 주소를 회수할 수 있도록 하기 위함이다.

     

    NAT; network address translation

    IP 주소는 네트워크 장치를 식별하는 고유한 주소다. 현재 인터넷은 IPv4를 사용하고 있지만, 인터넷 기기의 급증으로 인해 IPv4만으로는 모든 기기를 커버할 수 없는 상황이다. 이러한 주소 부족의 문제를 해결하기 위해 NAT을 사용된다.


    NAT은 내부 네트워크의 장치들이 단일 IP 주소를 사용하여 인터넷에 접근할 수 있게 해준다. NAT을 통해 여러 장치가 하나의 IP 주소로 인터넷에 연결될 수 있으므로 IP 주소 부족 문제를 해결할 수 있다.

    NAT은 내부 IP 주소를 외부로부터 숨기기 때문에 외부 네트워크는 NAT 라우터로 접근한다. 그렇다면 NAT 라우터는 어떻게 datagram을 내부 호스트로 전달할 수 있을까? 이를 위해 라우터에는 NAT translation table이 존재한다. NAT traslation table은 `공인 IP 주소, 포트 번호 : 내부 IP 주소, 포트 번호`를 매핑하여 기록한다. 인터넷에서 받은 datagram이 라우터에 도착하면, NAT translation table을 참고하여 datagram을 올바른 내부 IP 주소로 전달한다.

    🤔 포트 번호를 NAT translation table에 기록하는 이유
    • 원래 포트 번호는 프로세스를 구분하기 위해 사용된다.
    • 하지만 NAT에서는 예외적으로 서로 다른 장치를 구분하기 위해 사용한다.
      • 내부 네트워크에서 두 개의 장치가 동시에 동일한 웹 서버에 접속할 때
      • 포트 번호 없이 `공인 IP 주소 : 첫번째 장치 IP 주소`, `공인 IP 주소 : 두번째 장치 IP 주소`만 저장하게 되면
      • 외부에서 datagram이 왔을 때 라우터가 어떤 내부 호스트로 전달해야 하는지 알 수 없다.
    🤔 NAT의 한계
    • 포트 번호의 예외적 사용 : 내부 네트워크의 장치들을 구분하기 위한 수단으로 사용
    • 라우터의 packet 변조 : NAT 라우터는 IP 주소 및 포트 번호 수정

     

    IPv6

    IPv6은 IPv4의 주소 공간 부족 문제를 해결하기 위해 개발된 IP의 새로운 버전이다. 128 bit의 주소 체계를 사용하여 모든 장치에 고유한 IP 주소를 할당할 수 있다. 하지만 업그레이드 비용과 복잡성, 호환성 등으로 인해 아직까지는 IPv4를 계속 사용하고 있다.


    control plane

    data plane은 forwarding table을 참조하여 datagram을 어느 output link로 보낼지 결정한다. control plane은 라우팅 알고리즘을 이용하여 forwarding table을 계산하고 관리한다.
     

    routing algorithm

    라우팅 알고리즘의 목표는 송신자로부터 수신자까지의 최소 비용 경로(= 최단 경로)를 찾는 것이다. 라우팅 알고리즘은 크게 두 가지 방식으로 나뉜다.

    1. centralized (LS; link-state) : 각 노드는 네트워크에 대한 모든 정보를 가지고 있으며, 이를 바탕으로 최단 경로를 계산한다.
      • 각 노드는 주기적으로 link-state 정보를 업데이트하고 이를 다른 모든 노드와 공유한다. 모든 노드는 동일한 정보를 가지고 있어, 최단 경로를 독립적으로 계산한다.
      • 방대한 네트워크에서는 모든 정보를 계산하고 전송하는 것은 불가능하다.
    2. decentralized (DV; distance-vector) : 각 노드는 직접적으로 연결된 링크의 비용만 알고 있으며, 이웃 노드와 정보를 교환하면서 최단 경로를 계산한다.
      • 각 노드는 주기적으로 자신의 distance-vector를 인접한 이웃 노드에게 전송한다. 이웃 노드는 전달받은 정보를 바탕으로 최단 경로를 계산하고, 이를 다른 이웃과 공유한다.
      • 네트워크의 크기와 무관하게 작동하므로 대규모 네트워크에 적합한 알고리즘이다.

     

    LS algorithm

    LS 알고리즘은 다익스트라 알고리즘으로도 알려져 있다. 다익스트라 알고리즘은 하나의 노드에서 다른 모든 노드까지의 최단 경로를 계산한다.

    LS 알고리즘를 구현하기 위해서는 각 노드가 link-state packet을 네트워크의 모든 노드에 브로드캐스트 해야 한다. 이로써 모든 노드는 동일하고 완전한 네트워크 정보를 가지게 되며, 독립적으로 최단 경로를 계산할 수 있다. 전체 정보를 사용하기 때문에 최적의 경로를 선택할 수 있지만, 네트워크의 부하가 발생할 수 있고 계산 정보가 많아 복잡성이 증가한다.

     

    DV algorithm

    DV 알고리즘은 벨만 포드 알고리즘으로도 알려져 있으며, 반복적, 비동기적, 분산적이라는 특징을 갖는다.

    • 반복적 : 더 이상 정보를 교환할 필요가 없을 때까지 반복적으로 계산-교환 작업을 수행한다.
    • 비동기적 : 모든 노드는 자신의 속도에 맞춰 정보를 교환하고 갱신한다.
    • 분산적 : 각 노드는 인접한 이웃으로부터 정보를 받아 최단 경로를 계산하고, 그 결과를 다시 이웃에게 전달한다.

    각 노드는 자신과 인접한 이웃 노드들의 비용 정보를 가지고 시작한다. 각 노드는 변경이 있을 때마다 인접한 노드와 distance-vector를 교환한다. 노드는 이웃 노드로부터 받은 정보를 바탕으로 최단 경로를 다시 계산한다. 이 과정은 네트워크가 안정될 때까지 반복된다.

    DV 알고리즘은 특정 네트워크의 경로가 끊어졌을 때, 그 비용을 무한대로 설정한다. 하지만 이 정보가 네트워크 전체에 도달하기까지 여러 단계의 업데이트가 필요하므로 무한 루프에 빠질 가능성이 있다.


    routing protocol

    라우팅 프로토콜은 라우팅 알고리즘을 구현한 네트워크 프로토콜이다.   

    네트워크는 수많은 라우터들로 구성되어 있다. 따라서 모든 라우팅 정보를 저장하는 것은 엄청난 메모리를 요구하며, 정보를 브로드캐스트하고, 링크 비용을 업데이트하는 오버헤드 또한 매우 클 것이다.
     
    인터넷은 여러 AS (autonomous system) 로 이루어진다. AS는 하나의 ISP를 의미하는데, 각 ISP는 자신만의 네트워크를 위한 라우터들로 구성되어 있다.
    같은 AS 내의 라우터들은 동일한 라우팅 알고리즘을 사용한다. 이러한 알고리즘을 intra-AS 라우팅 프로토콜이라고 한다. (OSPF) 하지만 여러 AS를 거쳐 packet을 전달해야 하는 경우도 있다. 이때는 서로 다른 AS 간의 라우팅 정보를 교환하기 위해서는 inter-AS 라우팅 프로토콜이 필요하다. (BGP)
     

    OSPF; open shortest path first

    OSPF는 LS 알고리즘을 사용하는 라우팅 프로토콜이다. 각 라우터는 AS의 완전한 link-state 정보를 가지고 다익스트라 알고리즘을 사용하여 최단 경로를 계산한다.
     

    BGP; border gateway protocol

    BGP는 DV 알고리즘을 사용하며, AS들 간의 경로 정보를 교환하여 인터넷 전체의 최단 경로를 결정한다. 즉, 서로 다른 네트워크 간의 라우팅에 사용된다.

    댓글