Link Layer(링크 계층)

서정범·2023년 5월 22일
0

네트워크

목록 보기
24/26

Link Layer(링크 계층)

OSI 7계층에서 2계층을 맡고있는 링크 계층에 대해서 알아보도록 하겠습니다.

링크 계층(Link Layer)은 인접한 네트워크 노드끼리 데이터를 전송하는 기능과 절차를 제공합니다.

용어 정리

  • 노드(node): 링크 계층(즉, 2계층) 프로토콜을 실행하는 장치
  • 링크(link): 통신 경로상의 인접한 노드들을 연결하는 통신 채널

먼저 간단하게, 링크 계층에서 제공하는 서비스에 대해서 알아보고 넘어갑시다.

  • 프레임화(Framing): 프레임은 네트워크 계층 데이터그램이 들어있는 데이터 필드와 여러 개의 헤더 필드로 구성됩니다.
  • 링크 접속: 매체 접속 제어(medium access control, MAC) 프로토콜은 링크상으로 프레임을 전송하는 규칙에 대해서 명시합니다.
  • 신뢰적 전달: 링크 계층 프로토콜이 신뢰적 전달 서비스를 제공하는 경우 네트워크 계층 데이터그램은 링크상에서 오류 없이 전달됩니다.(TCP 같은) 하지만, 이 작업을 수행할 경우 추가적인 오버헤드가 붙기 때문에 낮은 비트 오류율을 가진 링크의 경우에는 불필요합니다.
  • 오류 검출과 정정: 비트 오류는 신호의 약화나 전자기 잡음 때문에 생깁니다. 오류가 있는 데이터그램은 전달할 필요가 없으며, 따라서 대부분의 링크 계층 프로토콜은 오류를 검출하는 방법을 제공합니다.

대부분의 경우 링크 계층은 네트워크 인터페이스 카드(network interface card, NIC)로 알려진 네트워크 어댑터(network adapter)에 구현됩니다.

이와 같이 네트워크 어뎁터안에 링크 계층 제어기가 있고, 이것은 앞서 말했던 대부분의 서비스들이 구현되어 있는 단일의 특수 용도 칩입니다. 따라서 링크 계층 제어기의 기능 대부분은 하드웨어로 구현됩니다.

일부 링크 계층 기능은 호스트 CPU에서 실행되는 소프트웨어에 구현되어 있습니다.

링크 계층은 하드웨어와 소프트웨어 조합이며, 프로토콜 스택상에서 소프트웨어와 하드웨어가 만나는 부분이라고 볼 수 있습니다.

오류 검출 및 정정 기술

우리가 데이터를 보낼 때 데이터는 데이터 스트림 형태 즉, 비트(이진수)로 보냅니다.

따라서, 비트 오류라는 것은 0 혹은 1의 숫자가 반대로 되어 있는 경우를 생각할 수 있습니다.

우리는 여기서 데이터의 오류를 검출하기 위한 3가지 기술에 대해서 알아볼 것입니다.

  1. 패리티 검사(parity check)
  2. 체크섬 방법(checksum)
  3. 순환 중복 검사(cyclic redundancy check,CRC)

패리티 검사(parity check)

가장 단순한 형태의 오류 검출은 단일 패리티 비트(parity bit)의 사용일 것입니다.

이 방식의 경우 짝수 패리티 기법을 사용할 것인지, 홀수 패리티 기법을 사용할 것인지 나뉩니다.

하지만, 결국 방식은 동일합니다.

원래 정보에 패리티 비트를 하나 더해주면서 1의 총개수를 짝수 혹은 홀수로 만들어 주는 것입니다.

수신자의 경우 선택한 기법대로 도착을 했는지 확인을 해주면 됩니다.

이 방식의 경우 치명적인 단점이 존재하는데, 기본적으로 오류의 발생은 "버스트(burst)" 형태로 한꺼번에 몰려서 발생합니다.

따라서, 오류가 2개 혹은 4개, ... 와 같은 형태로 발생할 경우 선택한 짝수 혹은 홀수 개에서 변하지 않으므로 오류를 재대로 검출해 낼 수 없습니다.

이 방식의 경우 2차원으로 일반화하는 방법이 존재합니다.

2차원 패리티 기법에서는 반전된 비트를 포함하는 열과 행에 대한 패리티에 오류가 생깁니다. 따라서 수신자는 단일 비트 오류의 발생을 검출할 수 있을 뿐만 아니라, 패리티 오류가 있는 열과 행의 인덱스값을 사용해 잘못된 비트를 신제로 식별해서 오류를 정정할 수도 있습니다.

오류를 검출 및 정정하는 수신자의 능력을 순방향 오류 정정(foward error correction, FEC)라고 합니다.

FEC 기술은 송신자에게 요구하는 재전송 횟수를 줄일 수 있다는 점에서 의의가 있습니다. 아마도 더 중요한 것은 수신자가 즉각적인 오류 정정을 할 수 있다는 점일 것입니다. 이렇게 함으로써 송신자가 NAK 패킷을 수신하고 재전송된 패킷이 수신자로 되돌아가는 소요 시간인 왕복 전파 지연 시간을 기다릴 필요가 없어지며, 실시간 네트워크 애플리케이션이나 전파 지연이 긴 링크에서는 중요한 장점입니다.

체크섬 방법(checksum)

간단한 체크섬 방법 중의 하나는 이들 k 비트 정수들을 더해서 그 결과값을 오류 검출 비트들로 사용하는 것입니다.

인터넷 체크섬(Internet checksum)에서 이 방법을 사용합니다. 더한 값의 1의 보수가 인터넷 체크섬이 되며, 이것을 세그먼트 헤더에 넣어줍니다.

TCP와 UDP 프로토콜에서는 인터넷 체크섬이 모든 필드(헤더와 데이터 필드를 포함)에 대해서 계산합니다. (TCP나 UDP 세그먼트에 자체 체크섬이 있기 때문에) IP에서는 IP 헤더에 대해서만 체크섬을 계산합니다.
다른 프로토콜에서는 헤더에 대해서 하나의 체크섬이, 전체 패킷에 대해서 또 다른 체크섬이 계산됩니다.

체크섬 방법은 상대적으로 패킷 오버헤드가 적다. 하지만, 링크 계층에서 주로 사용되는 CRC와 비교하면 오류 면에서 상대적으로 취약합니다.

그렇다면 왜 트랜스포트 계층에서는 체크섬을 사용하고, 링크 계층에서는 CRC를 사용하는 것일까요?

트랜스포트 계층의 오류 검출이 소프트웨어로 구현되므로 체크섬처럼 간단하고 빠른 오류 검출 기법이 필요합니다. 반면에 링크 계층에서의 오류 검출은 어댑터안의 전용 하드웨어로 구현되므로 더 복잡한 CRC 연산을 빨리 수행할 수 있습니다.

순환중복검사(CRC)

오늘날 컴퓨터 네트워크에서 널리 사용되는 오류 검출 기술을 순환중복검사(cyclic redundancy check, CRC) 코드를 사용합니다. (다항식 코드로도 알려져 있습니다.)

CRC의 동작 방식에 대해서 알아봅시다.

CRC 코드는 다음과 같이 동작합니다. d 비트로 이루어진 데이터 D를 송신 노드가 수신 노드로 전송하고자 가정합니다. 먼저 송신자와 수신자는 G로 표기되는 생성자(generator)로 알려진 r + 1 비트 패턴에 대해서 합의합니다. G의 최상위비트는 1이어야 합니다.

이후부터는 간단합니다.

먼저 송신자는 데이터 D에 대해서 r개의 추가비트 R을 선택해서 D에 덧붙이며, 이 d + r 비트 패턴은 모듈러-2 연산(XOR 연산)을 이용했을 때 G로 정확히 나누어 떨어지도록 만들어서 보내주면 됩니다.

나머지 R을 수식으로 표현하면 아래와 같습니다.

R=D2rG의나머지R = \frac{D·2^r}{G}의 나머지

2r2^r의 경우 r비트만큼 왼쪽으로 전체 비트들이 이동한다고 생각하면 됩니다. 이 나머지를 D비트 뒤에다 붙여주면 G로 나눴을 때 완전히 나누어 떨어질 것입니다.

이것을 보내고 수신자는 G를 이용해서 나눴을 때 나머지가 0인지 확인하면 되는 것입니다.

다중 접속 링크와 프로토콜

링크 계층 채널은 근본적으로 다른 두 종류가 있습니다.

  1. 점대점 링크(point-to-point link)
  2. 브로드캐스트 링크(broadcast link)

점대점 링크는 링크 한쪽 끝에 한 송신자와 링크의 다른 쪽 끝에 한 수신자가 있습니다.

브로드캐스트 링크는 동일한 하나의 공유된 브로드캐스트 채널에 다수의 송신 노드 및 수신 노드들이 연결됩니다.

점대점 링크를 사용할 때는 문제가 되지 않지만, 브로드캐스트 링크를 사용할 경우 발생할 수 있는 문제가 있습니다.

다중 접속 문제(multiple access problem)를 해결하기 위해서 다중 접속 프로토콜(multiple access protocol)이 있고 이것은 컴퓨터 네트워크에서도 공유되는 브로드캐스트 채널로 보내는 노드들의 전송을 조정하는데 사용됩니다.

다중 접속 프로토콜은 세가지로 분류할 수 있습니다.

  1. 채널 분할 프로토콜(channel partitioning protocol)
  2. 랜덤 접속 프로토콜(random access protocol)
  3. 순번 프로토콜(taking-turns protocol)

먼저, 초당 R 비트의 전송률을 갖는 브로드캐스트 채널에 대한 이 프로토콜들이 공통적으로 가져야 할 바람직한 특징에 대해서 알아보고 넘어가도록 합시다.

  1. 단 하나의 노드가 전송할 데이터가 있을 때는 그 노드가 R bps의 처리율을 갖는다.
  2. M개의 노드가 전송할 데이터가 있을 때는 각 노드가 R/M bps의 처리율을 갖는다.(각 노드가 적당한 정의된 시간 동안 R/M의 평균 처리율을 갖는다.)
  3. 이 프로토콜은 분산되어 있다. 즉, 고장으로 인해 전체 시스템을 정지시킬 수 있는 마스터 노드가 없다.
  4. 이 프로토콜은 단순해서 구현하는 데 비용이 적게 듭니다.

채널 분할 프로토콜

채널을 공유하는 모든 노드가 브로드캐스트 채널의 대역폭을 분할할 수 있게 해주는 대표적인 기술에는 다음과 같은 기술들이 있습니다.

  • 시분할 다중화(time division multiplexing, TDM)
  • 주파수분할 다중화(frequencydivision multiplexing, FDM)
  • 코드 분할 다중 접속(code division multiple access, CDMA)

이와 같은 기술들을 멀티플렉싱(multiplexing)이라고 합니다.

멀티플렉싱(multiplexing)은 여러 데이터 소스에서 오는 신호를 하나의 전송 매체를 통해 전송하는 과정을 말합니다. 이를 통해 하나의 통신 채널을 공유하면서 여러 소스의 데이터를 전송할 수 있습니다.

TDM의 경우에 시간을 시간 프레임(time frame)으로 나누고 또한 각 시간 프레임을 N개의 시간 슬롯(time slot)으로 나눕니다. 그 뒤에 각 시간 슬롯은 N개의 노드에게 할당되고, 노드는 전송할 패킷이 있을 때마다 TDM 프레임에서 자신에게 할단된 슬롯 시간 동안 전송될 수 있게 선택됩니다.

TDM은 충돌을 제거할수 있고 아주 공정하므로 바람직하지만, 두 가지 단점이 있습니다.

  1. 전송할 패킷이 있는 노드가 단 하나인 경우 노드 전송률이 평균 R/N으로 제한됩니다.
  2. 노드가 전송 순서상 자신의 차례를 항상 기다려야 합니다.

FDMR bps의 채널을 다른 주파수(각 R/N의 대역폭을 갖는)로 나눠서 각 주파수를 N개 노드 중 하나에게 할당합니다. FDM도 충돌을 피하고 N개 노드에게 대역폭을 균등하게 분할하지만, 이 또한 같은 단점을 가지고 있습니다.

CDMA는 다른 코드를 각 노드에게 할당합니다. 그러면 노드는 전송하는 데이터 비트들을 자신의 유일한 코드로 인코딩합니다. CDMA 네트워크에서 코드들을 신중하게 선택하면 여러 노드들이 동시에 전송할 수 있고, 다른 노드들에 의해서 전송이 간섭되더라도 각 수신자들이 송신자의 인코딩된 데이터 비트를 정확하게 수신할 수 있는 특성이 있습니다.

결국, 채널 분할 프로토콜이 필요한 이유는 프레임을 전송할 때 수신자가 어디서 온건지, 어떠한 것인지 구별하기 위해서 사용하는 프로토콜이기 때문에 CDMA 방식이 가능한 것입니다.

랜덤 접속 프로토콜

랜덤 접속 프로토콜에서 전송 노드는 항상 채널의 최대 전송률인 R bps로 전송합니다.

충돌이 일어났을 경우, 즉시 재전송하는 것이 아닌 랜덤 지연 시간 동안 기다립니다.

가장 일반적으로 사용되는 랜덤 접속 프로토콜 중 일부인 알로하 프로토콜이더넷에서 사용하는 CSMA 프로토콜에 대해서 알아보겠습니다.

  • 알로하 프로토콜

알로하 프로토콜에는 슬롯 알로하(slotted ALOHA) 프로토콜순수 알로하(pure ALOHA) 프로토콜이 있습니다.

먼저 슬롯 알로하의 경우 모든 프레임의 크기가 일정다고 가정하고, 전송 가능 시간대가 정해져 있으며 노드들은 동기화되어 있다고 생각하고 동작합니다.

  1. 노드가 새로운 프레임을 얻으면, 다음 슬롯을 통해 전송
  2. 만약 충돌이 없다면, 재전송할 필요 X
  3. 만약 충돌이 일어나면, 전송에 성공할 때까지 확률 p로 다음 슬롯들에서 "재전송"
  • 장점
    • 활성 노드가 프레임을 전속력 R로 전송할 수 있다.
    • 매우 단순
  • 단점
    • 충돌로 인한 남는 슬롯이 발생
    • 확률적 전송 방식으로 인해 슬롯이 비는 상황 발생

여기서 중요한 점은 임의의 한 노드가 프레임 전송에 성공할 확률인데 다음과 같습니다.

Np(1p)N10.37Np(1-p)^{N - 1} ≤ 0.37

결국 해당 방식을 사용해서 전송한다면 최대 전송률이 37%인 것입니다.

순수 알로하 방식의 경우 동기화조차 요구하지 않습니다. 즉, 슬롯을 나누지 않은 상태로 확률 p로 전송할지 안할지 결정해서 보냅니다.

이 방식의 경우 아까보다 2배 낮은 최대 전송률을 보여줍니다.

  • CSMA (Carrier Sense Multiple Access)

이 방식의 경우 다음 두 가지 규칙을 사용합니다.

  1. 캐리어 감지(Carrier Sensing): 다른 노드가 프레임을 채널로 전송하고 있으면, 노드는 임의의 짧은 시간 동안 전송 중단을 감지하면 프레임을 전송하기 시작합니다.
  2. 충돌 검출(collsion detection): 만일 다른 노드가 방해 프레임을 전송하고 있음을 검출하면, 자신의 전송을 중단하고 랜덤 시간동안 기다린 후 유휴 시 감지 및 전송 과정(sense and transmit when idle cycle)을 반복합니다.

이들 두 규칙은 CSMA (carrier sense multiple access)와 CSMA/CD(CSMA with collision detection)** 프로토콜에 포함됩니다.

  • CSMA충돌 감지 기능이 없는 기본 프로토콜입니다. CSMA에서는 송신 노드가 채널이 사용 중인지 아닌지를 감지합니다. 충돌이 발생할 경우 현재 보내고 있는 데이터 전송이 계속 되고, 이후 충돌로 인해 전송에 실패한 패킷을 확인하고 재전송하게 됩니다.
  • CSMA/CD는 CSMA와 유사하지만, 충돌 감지 기능이 추가된 프로토콜입니다. CSMA/CD에서는 데이터 전송 중 충돌이 발생하면 이를 즉시 감지하고 전송을 중단합니다. 이를 통해 네트워크의 효율성을 향상시킬 수 있습니다. 충돌이 발생한 후에는 이진 지수 백오프 알고리즘을 사용하여 랜덤 백오프 시간을 설정하고, 해당 시간이 경과한 후에 데이터를 재전송합니다.

이진 지수적 백오프(binary exponential backoff) 알고리즘

충돌을 n번 경험한 프레임을 전송할 떄 노드는 {0, 1, 2, ..., 2n2^n - 1} 중에서 랜덤하게 K값을 선택합니다. 이렇게, 충돌이 일어날 때마다 2의 배수 형태로 최대 시간이 늘어나는 방식을 의미합니다.

CSMA/CD의 효율은 다음과 같습니다.

효율=11+5dprop/dtrans효율 = \frac{1}{1 + 5d_{prop}/d_{trans}}

순번 프로토콜

순번 프로토콜(taking-turns protocol)에서는 두 가지 중요한 프로토콜이 있습니다.

  1. 폴링 프로토콜(Polling Protocol): 폴링 프로토콜에서는 중앙 제어 장치(일반적으로 스위치나 라우터)가 각 노드에 차례로 데이터 전송을 허용하는지 물어봅니다. 각 노드는 순차적으로 통신 기회를 얻게 되며, 이를 통해 공유 통신 채널을 효율적으로 사용할 수 있습니다.
  2. 토큰 전달 프로토콜(Token Passing Protocol): 토큰 전달 프로토콜에서는 특별한 제어 정보인 '토큰'이 네트워크상의 노드들 사이에 순환하면서 전달됩니다. 토큰을 가진 노드만이 데이터를 전송할 수 있는 권한을 갖게 되며, 데이터 전송이 완료되면 토큰을 다음 노드에 전달합니다. 이 방식을 통해 충돌 없이 공유 통신 채널을 효율적으로 사용할 수 있습니다.

폴링 프로토콜은 충돌뿐만 아니라 랜덤 접속 프로토콜의 단점인 빈 슬롯을 제거함으로써 훨씬 높은 효율을 제공합니다. 하지만, 두 가지 단점이 있습니다.

  • 폴링 지연(노드가 전송할 수 있음을 알리는 데 걸리는 시간)
  • 마스터 노드의 고장 나면 전체 채널이 동작 X

토큰 전달 방식은 분산 방식이며 효율이 매우 높습니다.

토큰 전달 프로토콜에는 다음과 같은 단점이 있습니다.

  • 노드 하나가 실패하면 전체 채널이 동작하지 않습니다. 혹은 노드가 잘못해서 토큰을 놓아주지 않으면, 토큰이 다시 돌 수 있도록 하는 회복 절차가 실행되어야 합니다.

DOCSIS: 케이블 인터넷 접속을 위한 링크 계층 프로토콜

DOCSIS (Data-Over-Cable Service Interface Specifications)는 케이블 데이터망의 구조와 프로토콜들을 정의합니다.

아래 그림은 수천 개의 케이블 모뎀을 케이블망 중계소(headend)에 있는 케이블 모뎀 종단 시스템(cable modem termination system, CMTS)에 연결되어 있는 일반적인 상황입니다.

상향 및 하향 채널은 브로드캐스트 채널입니다.

하향 채널의 경우에는 전송하는 모뎀이 하나라서 다중 접속 문제가 발생하지 않지만, 상향 채널의 경우에는 그렇지 않습니다.

따라서, 우리는 상향 및 하향 채널을 나누기 위해서 FDM 방식을 사용하고, 이후에 상향 채널에서는 TDM 방식을 사용해서 충돌을 방지해야 합니다.

우리는 이와같이 FDMTDM조합하여 사용하는 경우가 많습니다.

간단한 예를 들어서 설명하자면, 케이블 TV 시스템에서는 FDM을 사용하여 각 TV 채널을 개별적인 주파수 대역으로 분할합니다. 그리고 각 TV 채널 내에서 TDM을 사용하여 여러 사용자가 시간을 분할하여 사용할 수 있게 합니다. 이러한 방식은 또한 셀룰러 네트워크에서도 사용되며, 각 셀(cell) 내에서는 여러 사용자가 시간 슬롯을 공유하면서 통신합니다.

스위치 근거리 네트워크

2계층 레이어인 링크 계층은 링크 계층 프레임을 전달하기 위해서 스위치를 사용합니다. 이때 사용하는 것은 IP 주소가 아닌 링크 계층 주소(MAC 주소)를 사용합니다.

대부분의 MAC 주소 길이는 6바이트이며, 따라서 2482^{48}개만큼의 사용 가능한 랜 주소가 있습니다.

각 6바이트의 주소는 주로 16진수 표기법으로 표시되며, 주소의 각 바이트는 2개의 16진수로 표현됩니다.

MAC 주소는 IP 주소와 다르게 고정되어 있다고 생각하면 됩니다. 그리고 동일한 주소를 갖지 않습니다.

IP 주소가 우편 주소라면, MAC 주소는 주민등록번호 같은 느낌입니다.

어댑터가 프레임을 목적지 어댑터로 전송할 때, 송신 어댑터는 프래임에 목적지 어댑터의 MAC 넣고, 그 프레임을 랜상으로 전송합니다. 스위치는 종종 프레임을 자신의 모든 인터페이스로 브로드캐스트합니다. 즉, 프레임에 담긴 목적지 주소와 자신의 주소가 일치하지 않는 경우가 존재할 수 있다는 것입니다. 이 경우에 스위치는 프레임을 폐기합니다.

하지만, 만약 해당 스위치에서 폐기하지 말고 처리해야 하는 프레임이라면? 이 경우에는 목적지 주소에 MAC 브로드캐스트 주소(broadcast address)를 넣습니다. (FF-FF-FF-FF-FF-FF-FF)

ARP (Address Resolution Protocol)

네트워크 계층 주소와 링크 계층 주소가 있으므로 이들 주소 사이에 변환이 필요합니다. 인터넷에서는 이것을 ARP (Address Resolution Protocol)에서 해줍니다.

이것은 이전에 최신화 작업을 해둔 ARP 테이블을 참고하여 서로의 주소에 대응을 시켜줍니다.

ARP 테이블은 다음과 같은 정보를 포함하고 있습니다.

  • IP 주소
  • MAC 주소
  • TTL

ARP 테이블은 각 매핑이 언제 삭제되는지를 나타내는 TTL (Time-To-Live)값을 포함하고 있습니다. 어떤 노드들에 대해서는 종료된 엔트리를 갖고 있을 수 있는 반면에 다른 노드들에 대한 엔트리는 테이블에 전혀 없을 수도 있습니다. 괜찮습니다. 만약 해당 노드에 프레임이 도착해서 목적지 MAC 주소를 확인해보니 기록된 것이 없다면 그 시점에 ARP 프로토콜을 이용하여 해당 IP 주소에 해당하는 MAC 주소를 받아오면 됩니다.

왜 기록해두지 않고 삭제하는 것일까?

앞서 IP 주소는 DHCP나 NAT 주소와 같은 기능들을 통해서 동적으로 주소가 할당되는 경우가 많다고 했습니다. 그리고 MAC 주소는 어뎁터(예: 이더넷 카드)에 등록된 주소로 고정적으로 할당된다고 했습니다. 이것을 고정적으로 테이블에 입력해두면 어떻게 될까? 유효하지 않은 이전 매핑 주소를 사용하게 될 것입니다.

따라서, 동적인 IP 주소를 대응시켜 주기 위해서는 ARP 테이블 역시 주기적으로(혹은 요청이 올 때) 매핑을 해줄 필요가 있습니다.

ARP 프로토콜의 동작 과정을 살펴봅시다.

  • ARP 테이블에 도착한 프레임의 목적지 MAC 주소에 대한 엔트리가 없는 것을 확인
  • ARP 패킷이라는 특수 패킷을 구성
    • 송신 및 수신 IP 주소, MAC 주소 포함
    • 질의 패킷과 응답 패킷 모두 같은 형식
  • ARP 패킷을 브로드캐스팅하여 각 어댑터에 프레임을 도달하게 전달. 각 어댑터는 프레임에 들어 있는 ARP 패킷을 자신의 ARP 모듈로 전달
  • IP 주소가 일치 한다면, 수신 노드는 질의한 노드로 응답 패킷을 보내고 이때 자신의 MAC 주소를 담아서 보냅니다.
  • 송신 노드에 도착하면 ARP 테이블을 갱신합니다.

이와 같은 과정을 통해서 ARP 프로토콜이 동작합니다.

여기서 주목할 점이 두 가지 있습니다.

  1. 질의 ARP 메시지는 브로드캐스트 프레임으로 전송되는 반면에, 응답 ARP 메시지는 표준 프레임으로 전송된다는 점이다.
  2. ARP는 플러그 앤 플레이다. 즉, 노드의 ARP 테이블이 자동으로 구축된다는 점이다.
    • 시스템 관리자가 테이블을 구성하지 않아도 된다.
    • 호스트가 서브넷으로부터 연결이 끊어지면, 이 호스트에 대한 엔트리는 그 서브넷의 다른 ARP 테이블에서 결국은 제거된다.

위의 동작 방식에서 고려하지 않은 부분이 있는데, 만약 브로드 캐스트로 보낸 패킷의 목적지 IP주소가 브로드 캐스트 범위안에 있는 수신 호스트들의 IP주소와 전부 일치하지 않는다면? 즉, 서브넷에 수신자 호스트가 존재하지 않는다면?

그렇다면 다른 방식으로 작동을 해야할 것입니다.

하지만, 이것을 어떻게 알아낼까요? 다른 서브넷에 있는 호스트인 것을 알기 위해서 송신자 호스트는 목적지 IP 주소와 자신의 서브넷 마스크(subnet mask)를 사용해 판별을 합니다.

이 과정을 통해서 다른 서브넷에 있는 호스트임을 확인하고, 위와는 조금 다른 방식으로 동작을 시작합니다.

  1. ARP 패킷을 생성하면서 목적지 IP 주소에 경로상에 있는 첫 홉 라우터의 IP 주소를 담습니다. 또한, 해당 IP 주소의 어댑터의 주소(MAC 주소)를 담습니다.
    1. 만약, 여기서 로컬 네트워크에 연결된 라우터(게이트웨이)의 MAC 주소를 모른다면 브로드캐스트를 통해서 알아내야 합니다. "게이트웨이 IP 주소가 무엇인가요?"라는 메시지를 포함하고, 이 브로드캐스트 메시지를 수신한 게이트웨이는 자신의 MAC 주소를 담은 ARP 응답을 송신자 호스트로 전송합니다.
  2. 위의 과정을 통해서 라우터(게이트웨이)에 패킷을 전송하면, 라우터는 포워딩 테이블을 참고하여 최종 목적지로 도달하기 위한 경로상의 스위치 혹은 라우터 혹은 호스트의 IP 주소와 MAC 주소를 담아서 보냅니다.
  3. 2번의 과정이 반복적으로 수행되면서 최종적으로 목적지 호스트에 도달하게 될 것이고, 목적지 호스트는 응답 ARP 패킷을 수신자 호스트에게 보낼 것입니다.

이더넷(Eternet)

이더넷은 컴퓨터 네트워크 기술의 하나로, 근거리 네트워킹에 대한 것입니다.

초기의 이더넷 네트워크는 주로 허브를 사용하여 구성되었습니다. 이더넷 허브는 간단하게 말하면 데이터 패킷을 받아서 연결된 모든 포트로 브로드캐스트하는 장치입니다.

허브는 프레임이 아닌 각각의 비트에 대한 처리를 하는 물리 계층 장치입니다. 0과 1이 나타내는 인터페이스에 도착하면, 허브는 이 비트를 재상하고 에너지 세기를 증가시킨 후 다른 모든 인터페이스로 전송합니다.

이러한 허브 기반 네트워크는 스타 토폴로지를 따르지만, 데이터의 흐름 자체는 브로드캐스트 형태였습니다.

그러나 이렇게 허브를 통해 전체 네트워크에 패킷을 브로드캐스트하는 방식은 네트워크의 효율성과 성능에 많은 문제를 야기했습니다. 특히, 네트워크에 연결된 장치의 수가 증가할수록 충돌이 더 자주 발생하고, 이로 인해 네트워크의 전체적인 성능이 저하되었습니다.

이러한 문제를 해결하기 위해, 스위치가 도입되었습니다. 스위치는 각 연결에 대해 개별적으로 데이터를 전달하므로, 한 장치에서 다른 장치로의 트래픽이 나머지 네트워크에 영향을 주지 않습니다. 이로 인해 네트워크의 성능이 향상되고, 충돌이 크게 감소했습니다. 스위치는 또한 허브와 마찬가지로 스타 토폴로지를 따르지만, 데이터 흐름 자체는 훨씬 더 효율적입니다.

따라서 현대의 이더넷 네트워크는 대부분 스위치를 중심으로 구성되며, 이는 네트워크 성능을 크게 향상시킵니다.

이더넷 프레임 구조

그림에서 보이는 구조에 대해서 알아보겠습니다.

  • 데이터 필드(46 ~ 1,500바이트): IP 데이터그램을 운반합니다. 이더넷의 최대 전송 단위(maximum transfer unit, MTU)는 1,500 바이트입니다. 만약, 이 크기를 초과하면 단편화 작업이 이루어 집니다. 데이터 필드의 최소 크기는 46 바이트입니다. 이보다 작으면 "채워서(stuffed)" 46바이트로 만들어야 함을 의미합니다. 네트워크 계층은 임의로 채운 부분을 제거하기 위해 IP 데이터그램 헤더에 있는 길이 필드를 사용합니다.
  • 목적지 주소, 출발지 주소(각 6 바이트): 어댑터의 MAC 주소를 포함해서 보냅니다.
  • 타입 필드(2 바이트): 타입 필드는 이더넷으로 하여금 네트워크 계층 프로토콜을 다중화하도록 허용합니다. 호스트는 다수의 네트워크 계층 프로토콜을 지원할 수 있으며, 다양한 애플리케이션에 대해서 서로 다른 프로토콜을 사용할 수 있습니다.
  • 순환중복검사(4 바이트): CRC 필드의 목적은 수신 어댑터인 어댑터 B로 하여금 프레임에 오류가 생겼는지 검출할 수 있게 하는 것입니다.
  • 프리앰블(8 바이트): 이더넷 프레임은 8바이트의 프리앰블(preamble) 필드로 시작합니다. 프리 앰블의 첫 7바이트는 10101010 값을 가지고, 마지막 바이트는 10101011입니다. "깨우고", "동기화" 시키는 역할을 수행합니다. 이렇게 하는 이유는 프레임이 목적지로 도착할 때 목표 속도에서 어느정도 벗어날 수 있으며, 벗어나는 정도는 랜상의 다른 어댑터들에게 미리 알려져 있지 않습니다. 수신 어댑터는 단순히 프리앰블의 첫 7바이트에 있는 비트들에 맞춤으로써 어댑터 A의 클록에 맞출 수 있습니다.

모든 이더넷 기술을 네트워크 계층에게 비연결형 서비스(connectionless service)를 제공합니다. 만약, CRC 검사에 실패했을 경우 단순히 프레임을 폐기할 뿐이고, 이것을 따로 알리거나 하지 않습니다. 만약 애플리케이션에서 UDP를 사용할 경우 단순히 데이터의 손실로 끝날 것이고, TCP를 이용하는 것일 경우 확인 메시지를 보내지 않음으로써 호스트 A에 있는 TCP로 하여금 재전송하게 할 것입니다.

링크 계층 스위치

스위치는 "hop-by-hop" 기반의 장치입니다. 이것은 데이터가 네트워크를 통해 이동할 때, 한 "hop"에서 다음 "hop"으로 진행되며, 각 "hop"에서 스위치가 데이터를 받아 적절한 출력 포트로 전달한다는 뜻입니다.

전달 및 여과

여과(filtering)는 프레임을 인터페이스로 전달할지 또는 폐기(drop)할지 결정하는 스위치의 기능입니다. 전달(forwarding)은 프레임이 전송될 인터페이스를 결정하고 프레임을 해당 인터페이스로 내보내는 기능입니다.

스위치의 여과와 전달은 스위치 테이블(switch table)를 이용합니다.

스위치의 여과와 전달이 어떻게 동작하는 이해하기 위해서 3가지 상황을 가정해 봅시다.

기본적인 상황은 다음과 같습니다.

목적지 주소 DD-DD-DD-DD-DD-DD를 가진 프레임이 스위치의 인터페이스 x에 도착했다고 가정합시다.

이 경우에 다음 3가지 경우가 가능합니다.

  1. 테이블에 목적지 MAC 주소에 연관된 엔트리가 없는 경우
  2. 테이블에 목적지 MAC 주소가 인터페이스 x에 연관된 엔트리에 있는 경우
  3. 테이블에 목적지 MAC 주소가 인터페이스 y ≠ x 에 연관된 엔트리가에 있는 경우

1번의 경우에 스위치는 프레임 복사본을 인터페이스 x를 제외한 모든 인터페이스의 앞에 있는 출력 버퍼로 전달합니다. 즉, 목적지 주소에 대한 엔트리가 없으면 스위치는 프레임을 브로드캐스트합니다.

2번의 경우에 프레임은 목적지 주소를 포함하는 랜 세그먼트로부터 왔습니다. 이때는 이미 스위치 테이블에 기록되어 있는 상황으로 프레임을 다른 인터페이스로 전달할 필요가 없으며, 프레임을 제거함으로써 여과 기능을 수행합니다.

3번의 경우에 프레임은 인터페이스 y에 접속된 랜 세그먼트로 전달되어야 합니다. 스위치는 인터페이스 y앞에 있는 출력 버퍼에 프레임을 넣음으로써 전달 기능을 수행해야 합니다.

자가학습

스위치의 가장 중요한 특징 중 하나인 플러그 앤 플레이가 어떻게 가능한 것인지 알아봅시다.

스위치는 자가학습(self-learning) 능력을 가지고 있는데, 이 능력은 다음처럼 이루어 집니다.

  1. 스위치 테이블은 초기에 비어있습니다.
  2. 인터페이스로 수신한 각 프레임에 대해 스위치는 출발지 MAC 주소, 프레임이 도착한 인터페이스, 현재 시간을 테이블에 저장합니다. 이런 식으로 스위치는 테이블에 송신 노드가 상주하는 랜 세그먼트를 기록합니다.
  3. 일정 시간(수명 시간; aging time)이 지난 후에도 스위치가 해당 주소를 출발지 주소로 하는 프레임을 수신하지 못하면 테이블에서 이 주소를 삭제합니다.

이러한 특성을 가지고 있기 때문에 스위치는 플러그 앤 플레이 장치입니다.

특성

이제 스위치의 특징과 특성을 살펴보고 라우터와 비교함으로써 스위치에 대한 내용을 마무리하겠습니다.

스위치는 다음과 같은 장점을 지니고 있습니다.

  • 충돌 제거: 스위치로 (허브 없이) 구축된 랜에는 충돌로 인해 낭비되는 대역폭이 없습니다. 스위치는 프레임을 버퍼링하며 어느 시점이든 세그먼트에 하나 이상의 프레임을 전송하지 않습니다.
  • 이질적인(heterogeneous) 링크들: 스위치는 링크들을 별개로 분리하기 때문에 랜의 각 링크는 상이한 속도로 동작할 수 있으며 상이한 매체를 사용할 수 있습니다.
  • 관리: 스위치는 향상된 보안을 제공할 뿐만 아니라 네트워크 관리를 쉽게 할 수 있게 해줍니다. 플러그 앤 플레이 장치이기 때문에 지니는 장점 중 하나입니다.

정리하자면 스위치의 장단점은 이와 같습니다.

장점

  1. 플러그 앤 플레이 장치
  2. 상대적으로 높은 패킷 여과 및 전달률
  3. 2계층까지만 패킷을 처리

단점

  1. 실제 사용되는(active) 토폴로지는 스패닝 트리로 제한
  2. 상당한 양의 ARP 트래픽이 생성되고 처리
  3. 브로드캐스트 트래픽의 폭주에 대비한 방안을 제공 X

이와 비교해서 라우터의 장단점은 이와 같습니다.

장점

  1. 최상의 경로를 사용 가능
  2. 인터넷 토폴로지가 자유롭게 구축될 수 있다.
  3. 방화멱 보호 기능

단점

  1. 플러그앤 플레이가 아니다.
  2. 3계층까지 처리하기 때문에 패킷당 처리 시간이 더 크다.

가상 근거리 네트워크(VLAN)

먼저, VLAN에 대해서 알아보기 전에, 일반적으로 스위치를 사용할 때 문제가 될 수 있는 부분을 알아봅시다.

  1. 트래픽 격리의 부족: 계층 구조를 사용함으로써 그룹 트래픽을 단일 스위치내로 격리시켜 주지만, 여전히 브로드캐스트 트래픽은 전체 네트워크로 전달되어야 합니다. 이것은 랜 성능 감소 외에도 보안/개인보안(privacy)의 문제도 발생합니다.
  2. 스위치의 비효율적인 사용: 기관에 그룹이 3개가 아닌 10개가 있는 경우 첫 단계 스위치는 10개가 필요합니다. 만약 그룹 내 인원 수가 10보다 작으면 96포트 스위치 하나로 모든 사람을 수용할 수 있지만 스위치 하나로는 트래픽을 격리를 할 수 없는 문제가 발생합니다.
  3. 사용자 관리: 사원이 한 그룹에서 다른 그룹으로 이동하는 경우 물리적 케이블 연결을 변경해야만 하는데, 두 그룹에 속한 사원의 경우는 문제가 더 복잡합니다.

이러한 문제점을 해결해 주기 위해서 우리는 VLAN 기술을 이용합니다.

VLAN(Virtual Local Area Network)은 물리적인 위치와 상관없이 스위치의 포트를 그룹화하여 가상의 로컬 영역 네트워크를 구성하는 기술입니다.

VLAN을 사용하면, 여러 개의 논리적인 네트워크를 하나의 스위치 내에서 구성할 수 있으며, 이를 통해 네트워크 세분화 및 효율적인 트래픽 관리를 수행할 수 있습니다.

그렇다면, 스위치 내에서 포트를 이용하여 여러 그룹으로 나눈다는 것인데, 만약 같은 스위치 내에서 한 그룹에서 다른 그룹으로 패킷을 전송하려면 어떻게 해야할까요?

같은 스위치라서 포트에서 다른 포트로 전달하는 것은 불가능할 것입니다.

그래서 하나의 포트를 지정 해놓고 이것을 외부 라우터와 연결해서 사용합니다.

외부 라우터를 통해서 논리적 구성을 다르게하는 것입니다.

그림에서는 1번과 16번 포트로 생각하면 되겠습니다.

좀 더 확장된 생각으로 만약 같은 그룹인데 다른 지형에 위치한 상황이라면 어떻게 해야할까? 즉, 하나의 스위치로 커버가 되지 않는 범위의 그룹인 것입니다.

이러한 상황에서 VLAN 스위치들을 연결하기 위해서 VLAN 트렁킹(VLAN trunking)이 있습니다.

트렁크 포트는 모든 VLAN에 속하며, 한 VLAN에서 전송한 프레임들을 트렁크 링크를 통해 다른 스위치로 전달해 줍니다.

그렇다면 여기서, 스위치는 어떻게 트렁크 포트로 온 프레임이 어떤 VLAN에 속하는지 알 수 있을까요?

이것은 VLAN 태크(tag)를 헤더에 갖고있는 표준 이더넷 프레임 덕분입니다.

VLAN 태그는 VLAN 트렁크의 송신 측에 있는 스위치에 의해서 프레임에 추가되며, 트렁크의 수신 측에 있는 스위치에 의해서 파싱되고 제거됩니다.

다중 프로토콜 레이블 스위칭(MPLS)

다중 프로토콜 레이블 스위칭(Multi-Protocol Label Switching, MPLS)은 네트워크에서 데이터 패킷을 전송하는 데 사용되는 고급 전달 및 경로 결정 기술입니다.

이 기술은 IP 라우팅과 같은 기존 프로토콜과 함계 사용되며, 다양한 네트워크 프로토콜과 상호 운용이 가능합니다. MPLS는 다음과 같은 몇가지 주요 특징을 가지고 있습니다.

  1. 레이블 기반 전달: MPLS는 각 패킷에 고유한 '레이블'을 할당하여 전달을 수행합니다. 이 레이블은 패킷이 네트워크를 통해 전달되는 동안 라우터 간에 빠르게 교환되며, 목적지까지 최적의 경로를 따라 패킷을 전달합니다.
  2. 경로 최적화: MPLS는 네트워크에서 최적의 경로를 결정하는 데 도움이 되는 트래픽 엔지니어링 기능을 제공합니다. 이를 통해 서비스 제공 업체는 트래픽 흐름을 최적화하고 대역폭 사용을 개선할 수 있습니다.
  3. 품질 보장(QoS): MPLS는 서로 다른 우선순위를 가진 패킷들에 대해 서비스 수준을 보장할 수 있습니다. 이를 통해 음성, 비디오 및 데이터와 같은 다양한 유형의 트래픽에 대한 성능을 최적화할 수 있습니다.
  4. VPN(Virtual Private Network) 지원: MPLS는 가상 사설 네트워크를 구축하는 데 사용될 수 있습니다. 이를 통해 기업들은 안전하고 격리된 네트워크를 구축할 수 있으며, MPLS 기반 VPN은 고성능과 확장성을 제공합니다.
profile
개발정리블로그

0개의 댓글