ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 7. 네트워크 계층
    공부/컴퓨터 네트워크 2022. 5. 27. 17:00
    반응형

    이 글은 Computer Networking: A Top-Down Approach 7th를 읽고 정리한 글입니다.


     

     

     

    1. 네트워크 계층 개요


    트랜스포트 계층에서 프로세스 간 통신을 제공한다면, 네트워크 계층에서는 호스트 사이의 통신 서비스를 어떻게 제공하는지에 대해 보여준다.

    여기서는 트랜스포트 계층에 있던 세그먼트를 받아 각 세그먼트를 데이터그램 안에 캡슐화한다.


    1.1 네트워크 계층 개요

    호스트 A와 호스트 B가 있고, 호스트 A가 호스트 B에게 패킷을 보낼 때를 가정해보자

    그러면 호스트 A에서는 트랜스포트 계층으로부터 세그먼트를 받아 각 세그먼트를 데이터그램으로 캡슐화하고, 인접한 라우터에게 데이터그램을 보낸다.

    이후 호스트 B에게 데이터그램이 도착했으면 네트워크 계층에서 세그먼트를 추출하여 트랜스포트 계층으로 전달하게 된다.

    네트워크 계층부터는 모든 호스트, 라우터, 스위치에 존재하게 된다.


    1.2 포워딩과 라우팅(forwarding and routing)

    1) 포워딩

    패킷이 라우터의 입력 링크에 도달하였을 때, 라우터는 그 패킷을 적절한 출력 링크로 이동시켜야 한다.

     

    2) 라우팅

    송신자가 수신자에게 패킷을 전달할 때, 네트워크 계층은 패킷 경로를 결정해야 하는데, 이때 경로를 계산하는 알고리즘을 라우팅 알고리즘이라고 부른다.

     

    3) 포워딩과 라우팅의 차이

    라우팅은 전체적인 경로의 큰 그림을 결정하는 것이고, 포워딩은 순간순간 어디로 가야할지 결정하는 것이라고 생각하면 편하다.

     

    4) 포워딩 테이블

    라우터는 도착하는 패킷 헤더의 필드 값을 조사하여 패킷을 포워딩하는데, 해당 값을 라우터의 포워딩 테이블의 내부 색인으로 사용한다.

    그니까 쉽게 설명해서 (패킷 헤더의 필드 값)을 라우터의 (포워딩 테이블의 index 값)으로 사용한다는 뜻

     

    예를 들어서 위 사진과 같은 포워딩 테이블이 있을 때, 패킷 헤더의 필드 값이 0111이라면 패킷을 2번 링크로 보낸다.


    1.3 네트워크 서비스 모델

    아래는 네트워크 계층이 제공할 수 있는 서비스이다.

     

    1) 보장된 전달: 패킷이 송신 호스트에서 수신 호스트까지 도착하는 것을 보장한다.

    2) 지연 제한 이내의 보장된 전달: 특정 시간 이내에 전달한다.

    3) 순서화 패킷 전달: 패킷이 송신된 순서대로 도착하게 된다.

    4) 최소 대역폭 보장: 모든 패킷이 특정 비트 속도 이하이면 수신 호스트까지 제대로 전달될 수 있도록 최소 대역폭을 보장한다.


     

     

     

    2. 가상 회선 네트워크와 데이터그램 네트워크


    가상 회선 네트워크는 네트워크 계층에 연결형 서비스를 제공해주고, 데이터그램 네트워크는 네트워크 계층에 비연결형 서비스를 제공해준다.


    1) 가상 회선 네트워크

    가상 회선 네트워크는 패킷을 보낼 때, 수신자 호스트 주소가 있는 것이 아니라 VC 식별자를 붙이게 된다.

     

    예를 들면 호스트 A가 첫번째 라우터의 1번 링크에서 VC 식별자가 12인 패킷을 보내면, 해당 라우터의 포워딩 테이블에서는 1번 링크로 VC 값이 22가 들어오면 3번 링크로 보내고 VC 값을 22로 수정하라는 것이다.

    이외에도 2번 링크로 VC값이 63으로 들어오면, 1번 링크로 VC 값을 18로 수정해서 보내는 것으로 생각하면 된다.

     

    이것은 오늘날의 인터넷에서는 사용하지 않고, ATM이나 LAN 통신을 사용할 때 쓰인다고 한다.

    연결형 서비스이기 때문에 호스트간 통신에 경로가 고정되어 있다.


    2) 데이터그램 네트워크

    데이터그램 네트워크는 비연결형 서비스이기 때문에 경로가 그때마다 다르고, 가상회선 네트워크처럼 VC 값이 없어서 오로지 수신자 호스트의 주소만 보고 이동하게 된다.

     

    그런데 IP 주소는 굉장히 많은데, 이것을 어떻게 처리하는 것일까라는 의문이 생긴다.

    X.X.X.X에서 X = 0~255인데 2^8^4 = 2^32를 전부 포워딩 테이블에 저장하는 것은 아닐테니 말이다.

     

    여기서 사용하는 것이 Longest prefix matching라는 것이다.

    앞에 있는 주소값이 어디까지 맞는지 확인해보고, 숫자가 다르다면 무조건 건너뛰고, 숫자가 전부 매칭된 이후에는 *이 매칭된다면 해당 링크로 보내는 것이다.

     

    만약 주소가 11001000 00010111 00010111 11111111로 들어오게 된다면, 첫번째 값과는 21개의 비트가 매칭되고, 두번째 값과 세번째 값과는 16개의 비트가 매칭된다.

     

    두번째 값과 세번째 값은 세번째 주소가 00011000, 00011***로 나뉘게 되는데, 더 길게 매칭되는 것이 우선순위가 더 높은 것이므로 어떤 주소의 세번째 값이 00011000으로 들어오게 된다면 두번째 값과는 24개의 비트가 매칭되고, 세번째 값과는 21개의 비트가 매칭되므로 2번 링크로 이동하게 된다.


     

     

     

    3. 라우터 내부에는 무엇이 있을까?


     

    위 그림은 라우터의 전체적인 구조이다.

    입력 포트, 스위칭 구조, 출력 포트, 라우팅 프로세스 총 4개로 이루어져 있다.

    이제 하나씩 자세하게 살펴보자


    3.1 입력 포트

    입력 포트는 크게 3가지의 기능을 수행한다.

    1) line termination: 입력에서 패킷을 받는다.

    2) link layer protocol: 링크 계층과 상호작용하는 기능을 수행한다.

    3) lookup, forwarding (queueing): 검색 기능을 수행한다. 여기서 포워딩 테이블을 참조하여 출력 포트를 결정한다.

    이 과정을 거친 뒤에  패킷이 스위칭 구조로 전해진다. 패킷이 전송률보다 빠르면 큐에 저장된다.

     

    포워딩 테이블은 라우팅 프로세서에 있다가 lookup, forward 부분에 값이 복사가 된다.

    여기서 IP는 XXX.XXX.XXX.XXX로 이루어져 있고, 2^8^4 = 2^32의 경우의 수가 존재한다. 필요한 내용만 복사해도 데이터가 엄청 많지 않을까 생각하지만, 위에서 배운 Longest prefix matching 규칙을 적용하기 때문에 많은 데이터가 필요하지 않다.


    3.2 스위칭 구조

    스위칭 구조는 라우터의 입력 포트와 출력 포트를 연결한다. 스위칭 구조는 총 3가지의 구조가 있다.


    1) 메모리를 통한 교환

    CPU를 직접 제어해서 패킷을 스위칭하는 전통적인 방식이다.

    패킷이 도착하면 입력 포트는 라우팅 프로세서에게 인터럽트를 보내 패킷을 프로세서 메모리에 복사한다.

    이후 라우팅 프로세서는 헤더에서 목적지 주소를 추출하고 포워딩 테이블에서 검색한다음 패킷을 출력 포트의 버퍼에 복사한다.

     

    * 인터럽트는 OS에 나오는 용어인데, CPU가 일을 하다가 인터럽트를 받으면 원래 하던 일을 잠시 멈추고 인터럽트에 있는 내용을 하게 된다. (효율적으로 CPU를 사용하기 위해서)


    2) 버스를 통한 교환

    이 경우엔 입력 포트가 라우팅 프로세서의 개입 없이 공유 버스를 통해 직접 출력 포트로 패킷을 전송한다.

    하지만 공유 버스의 단점은 여러 패킷이 각각 다른 입력 포트로 동시에 도착하면 한 번에 하나의 패킷만 버스를 사용할 수 있기 때문에 다른 패킷들은 대기해야 한다. 그래서 라우터의 교환 속도가 버스 속도에 의해 제한된다.

     

    * 버스의 경우에는 컴퓨터 구조 시간에 처음 접했던 용어인데, 데이터를 전달해주는 통로라고 생각하면 된다. 실제 버스라고 생각해도 된다.


    3) 인터커넥션 네트워크를 통한 교환

    입력 포트 N개, 출력포트 N개가 있으면 수평으로 버스를 N개, 수직으로 버스를 N개를 서로 연결하여 N x N 행렬처럼 보이게 해준다.

    이것의 장점은 여러 패킷을 병렬로 전달할 수 있기 때문에 단일 버스로 교환에서 생기는 문제점을 해결할 수 있다.

    하지만 아쉽게도 단점은 서로 다른 여러 개의 입력 포트가 같은 출력 포트로 전달해야하는 경우에는 순차적으로 보내야한다는 문제점이 발생한다.


    3.3 출력 포트

    패킷을 가져와서 출력 링크를 통해 전송한다.

    1) datagram buffer (queueing): 전송률보다 빠르게 패킷이 도착하는 경우 여기에 저장이 된다.

    2) link layer protocol (send): 링크 계층과 상호작용하는 기능을 수행한다.

    3) line termination: 출력 링크로 패킷을 전송한다.


    3.4 queueing

    패킷이 입력/출력 포트의 전송률보다 빠를 경우 큐에 적재되는데, 여기서 나타나는 상황에 대해 설명을 한다.

    출력 큐잉은 학교에서 자세히 안다루기 때문에 패스

    (버퍼가 꽉 차기 전에 혼잡 신호를 보내거나, 패킷 스케줄러로 패킷이 전송되는 순서를 설정하여 최적화를 하는 내용을 다룬다)

     

    [입력 큐잉]

    입력 큐잉에는 두가지 문제점이 존재한다.

     

    1. 경쟁 상황

    왼쪽 사진과 같이 빨간색 출력 포트로 가야하는 패킷이 2개 존재한다고 해보자

    이런 상황이 발생할 때, 한 패킷이 빨간색 출력 포트로 이동하면 다른 패킷은 차단되어 이동하지 못하게 된다.

    오른쪽 사진처럼 첫번째 입력 포트에 있던 빨간색 패킷은 출력 포트에 잘 도착했지만, 세번째 입력 포트에 있던 패킷은 아직 출발조차 안했음을 확인할 수 있다.

     

    2. HOL 차단 (head-of-the-line)

    왼쪽 사진에서 세번째 입력 포트를 보면 빨간색 패킷은 첫번째 출력 포트로 가야하고, 초록색 패킷은 세번째 출력 포트로 가야하는 것을 알 수 있다.

    하지만 초록색 패킷은 빨간색 패킷이 먼저 첫번째 출력 포트로 가기전에는 기다려야하기 때문에 성능 저하가 일어난다.

    패킷이 쌓이다보면 결국에는 패킷 손실이 일어날 확률이 높게 된다.


     

     

     

    4. 인터넷 프로토콜 (IP) - IPv4


    4.1 IPv4 데이터그램 형식

    데이터그램은 세그먼트를 캡슐화한 것이기 때문에 TCP/UDP 세그먼트에 대한 정보도 가지고 있고, 호스트에서 호스트로 패킷을 전달하기 위해 또다른 정보들이 들어있다.

     

    1) ver: IP 프로토콜의 버전 (IPv4 / IPv6)을 나타낸다.

    2) head len: 헤더의 길이를 나타낸다.

    3) type of service: 데이터그램을 어떻게 처리할지에 대해 나타나있다.

    4) length: 데이터그램 길이를 나타낸다.

    5) 16-bit identifier, flags, fragment offset: IP 단편화와 관련된 정보이다. 밑에서 더 자세히 설명할 예정이다.

    6) TTL(time to live): 데이터그램이 최대 몇 개의 라우터를 통과할 수 있는지에 대한 값이다. TTL 값을 넘으면 폐기힌다.

    7) upper layer (protocol): 데이터를 TCP로 전달할지 UDP로 전달할지 결정하는 기능이다.

    8) header checksum: IP 데이터그램에 오류가 있는지 확인한다.

    9) 32 bit source/destination IP address: 출발지 혹은 목적지 IP 주소를 입력한다.

    10) options: 데이터그램에 옵션을 추가한다. 근데 거의 사용하지 않는다고 한다.

    11) data: TCP, UDP 세그먼트에 대한 데이터를 담고 있다.


    4.2 IPv4 데이터그램 단편화

    데이터그램에 있는 정보를 한 번에 보낼 수 있으면 좋겠지만, 아쉽게도 링크 계층 프레임이 전달할 수 있는 최대 데이터 양(MTU)가 존재한다.

    그래서 큰 데이터그램을 작은 데이터그램으로 단편화 시켜서 전송을 한 후, 종단 시스템에서 재결합을 하게 만든다.

    * 위 사진의 경우에는 데이터그램을 3개로 단편화 시켜서 전송을 하고, 이후 재결합을 하여 원래대로 하나의 데이터그램을 만든다.

     

    데이터그램을 단편화 시켰으니 해당 데이터그램에 순서가 있을텐데, 이것은 위에서 언급했듯이 16-bit identifier, flags, fragment offset으로 구별하게 된다.

    예를 들어서 원래 데이터그램은 4000byte라고 하고, MTU = 1500 byte라고 해보자

    그러면 데이터그램은 3개의 데이터그램으로 나눠야하고, 이제 해당 데이터그램을 같은 데이터그램에서 단편화가 됐음을 보여주고, 순서도 알려줘야한다.

     

    1) length

    원래 데이터그램은 4000byte지만, 단편화된 3개의 데이터그램의 총 길이는 4040byte이다. 이런 이유는 헤더의 크기가 20byte이기 때문인데, 4000byte = 20byte(헤더) + 3980byte(데이터)가 된다.

    - 첫번째 데이터그램: 1500byte = 20byte + 1480byte

    - 두번째 데이터그램: 1500byte = 20byte + 1480byte

    - 세번째 데이터그램: 1040byte = 20byte + 1020byte

     

    2) 16-bit identifier (ID)

    해당 필드는 데이터그램이 단편화가 되었을 경우, 같은 값을 가지는 데이터그램은 하나의 큰 데이터그램으로부터 단편화가 됐음을 알 수 있다.

     

    3) fragment flag

    데이터그램을 작은 데이터그램으로 단편화를 했으면 어떤 데이터그램이 마지막 데이터그램인지 확인할 수도 있어야 한다.

    그래서 fragment flag의 값이 0이라면 단편화한 데이터그램중 마지막 데이터그램을 뜻하는 것이고, 1이라면 마지막 데이터그램이 아니라는 뜻을 가지고 있다.

     

    4) offset

    마지막 데이터그램과 나머지 데이터그램만 구분할 수 있게 된다면 순서가 뒤엉키기 때문에 offset 필드를 사용하여 순서까지 보여준다. 이때 offset 필드가 의미하는 값은 (각 fragment가 시작하는 byte) / 8의 값이 된다.

    - 첫번째 데이터그램: offset 0 → 첫 데이터그램으로 값이 0이다.

    - 두번째 데이터그램: offset 185 → 185 * 8 = 원래 데이터그램의 1480byte에서부터 시작하게 되는 데이터그램

    - 세번째 데이터그램: offset 370 → 370 * 8 = 원래 데이터그램의 2960byte에서부터 시작하게 되는 데이터그램


    4.3 IPv4 주소체계

    1) 인터페이스

    호스트는 일반적으로 하나의 링크와 연결되어 있고, 라우터는 여러개의 링크와 연결되어 있다.

    여기서 호스트와 링크 사이의 경계, 링크와 라우터 사이의 경계를 인터페이스라고 부른다.

    그래서 호스트는 1개의 인터페이스, 라우터는 여러 개의 인터페이스를 가진다.

    호스트와 라우터는 데이터그램을 송수신할 수 있어야 하므로 각 인터페이스는 고유한 IP 주소를 가지고 있다.


    2) IP 주소

    각 IP 주소는 4바이트로 비트로 따지자면 32비트 길이를 가지고 있다.

    여기서 IP 주소는 네트워크 ID와 호스트 ID로 구성되어 있는데, 상황에 따라 ID 길이가 가변적으로 변하게 된다.

     

    위와 같은 식으로 사용하게 되는데, 당연히 등급이 높을수록 할당 받을 수 있는 개수가 적다.처음에 몇 개의 비트가 고정이 되어있어서 클래스를 식별할 수 있게 된다.


    3) 서브넷

    서브넷은 위의 사진처럼 223.1.1.X, 223.1.2.X, 223.1.3.X로 서로 공통된 그룹이 있음을 확인할 수 있는데, 이런 고립된 네트워크 그룹을 서브넷이라고 한다.

    위에서 인터페이스는 고유한 IP 주소를 갖는다고 하였는데, 여기서 주소는 마음대로 선택할 수 없고, 주소의 일부는 서브넷이 결정을 해준다. 여기서는 X부분이 서브넷이 결정해주는 주소이다.

     

    맨 왼쪽 서브넷으로 설명을 하자면 서브넷은 223.1.1.0/24라는 주소로 할당이 되는데, 여기서 24는 왼쪽 24개 비트가 서브넷이라고하고, 255.255.255.0을 서브넷 마스크라고 부른다.

    IP는 네트워크 ID와 호스트 ID로 나온다고 하였는데, IP 주소와 서브넷 마스크를 AND 연산을 하면 네트워크 ID가 나오게 된다.

    ex) 223.1.1.3 & 255.255.255.0 = 223.1.1.0 → 네트워크 주소 

     

    서브넷 마스크를 사용하는 이유는 IP 주소 할당을 좀 더 효율적으로 하기 위함이다.

    할당할 수 있는 호스트 수가 많은 클래스의 경우에는 평생 할당하지 않을 IP 주소도 존재할 수 있다. IPv4가 할당할 수 있는 IP주소는 제한되어 있기 때문에 이런 주소 할당을 효율적으로 하기 위해서 상위 클래스(클래스 B)를 하위 클래스(클래스 C)처럼 사용할 수 있게 한다.


    4) CIDR (Classless Interdomain Routing)

    CIDR은 인터넷 주소 할당 방식중 한가지로 서브넷 주소체계 표기를 일반화하고 있다.

    바로 위 서브넷 파트에서 언급했듯이 /23는 앞의 23비트가 네트워크 ID인 서브넷 주소이고, 호스트 ID는 서브넷이 할당한다고 배웠다.

    이런 방법을 활용하여 데이터그램을 전달할 때, IP 주소를 서브넷 주소로만 전달해도 충분하게 된다. 왜냐하면 서브넷이 호스트 ID를 할당하니 서브넷이 알아서 호스트에게 데이터그램을 전달할 수 있기 때문이다.

    그래서 CIDR 방식을 사용하면 라우터가 가지는 포워딩 테이블의 크기를 상당하게 줄일 수 있게 된다.


    5) DHCP (Dynamic Host Configuration Protocol)

    호스트에 IP 주소를 동적으로 할당해주는 프로토콜이다. 네트워크에서 자동으로 호스트와 연결을 해주기 때문에 plug-and-play protocol이라고 부르기도 한다. 

    DHCP는 많은 사용자가 이동하고, 주소들이 제한된 시간 동안에만 사용하는 경우 적합하다.

    DHCP 프로토콜 4단계 과정

    1. DHCP 서버 발견

    호스트는 DHCP 발견 메시지를 사용하여 IP주소는 어딘지 모르므로 브로드 캐스팅(255.255.255.255)의 포트번호 67번으로 UDP 패킷을 보낸다.

    2. DHCP 서버 제공

    DHCP 발견 메시지를 받은 DHCP 서버는 클라이언트에게 DHCP 제공 메시지를 보낸다.

    이후 DHCP 서버는 브로드캐스트하여 서브넷의 모든 노드로 이 메시지를 보낸다.

    왜냐하면 클라이언트가 가장 최적의 DHCP 서버를 선택하기 위함이다.

    3. DHCP 요청

    클라이언트는 DHCP 서버를 선택하고 DHCP 요청 메시지로 서버에 응답한다.

    4. DHCP ACK

    서버는 클라이언트가 선택한 DHCP 서버를 확인하고 DHCP ACK로 허락을 한다.

     

    - DHCP 서버가 클라이언트에게 제공하는 기능

    1. 클라이언트의 첫번째 라우터 주소

    2. DNS서버의 이름과 IP 주소

    3. 네트워크 마스크 (네트워크 주소 부분을 1로 치환한 것. 서브넷 마스크와 비슷하지만 다르다.)


     

    반응형

    '공부 > 컴퓨터 네트워크' 카테고리의 다른 글

    9. OSPF, BGP, SDN  (0) 2022.06.03
    8. NAT, IPv6, ICMP, Routing Algorithm  (0) 2022.05.30
    6. 혼잡 제어  (0) 2022.05.24
    5. 파이프라인 프로토콜, TCP  (0) 2022.05.24
    4. 트랜스포트 계층  (0) 2022.05.23

    댓글

Designed by Tistory.