[Network] Link Layer 2 - MAC addressing, ARP 와 이더넷

chxghee·2024년 12월 13일

MAC 주소

각 디바이스에 고유하게 할당된 주소 번호이다.

IP와 다르게 변하지 않으며 고정되어 있다.

IP VS MAC

1. IP 주소

네트워크 계층에서 장치의 위치를 식별한다.

  • 형식
    • IPv4: 32비트 (예: 192.168.0.1)
    • IPv6: 128비트 (예: 2001:0db8:85a3:0000:0000:8a2e:0370:7334)

  • 변경 가능성: 네트워크에 연결될 때마다 동적 할당(DHCP)으로 바뀔 수 있음.

  • 사용 위치: 인터넷과 같은 광역 네트워크(WAN)

  • 기능: 데이터를 전송할 때 장치 간의 네트워크 경로 설정.

  • 3계층을 통해 포워딩 된다.(네트워크 레이어)

  • IP주소는 계층적인 구조를 갖는다.
    perfix과 host part가 존재

2. MAC 주소

데이터 링크 계층에서 장치를 물리적으로 식별한다.

  • 형식: 48비트(6바이트), 16진수 (예: 00:1A:2B:3C:4D:5E)

  • 변경 가능성: 고유하며 네트워크 카드에 영구적으로 할당 (일부 장치에서는 소프트웨어로 변경 가능).

  • 사용 위치: 로컬 네트워크(LAN)에서 데이터 패킷을 전송할 때 사용.

  • 기능: 동일 네트워크 내(서브넷)에서 장치를 식별하고 통신.

  • MAC주소는 평면적인 구조를 갖는다.

구분IP 주소MAC 주소
역할네트워크 상의 위치 식별물리적 장치 식별
계층네트워크 계층 (3계층)데이터 링크 계층 (2계층)
변경 가능성네트워크 연결 시 동적/고정 가능하드웨어 고유, 변경 어려움
형식IPv4: 32비트, IPv6: 128비트48비트 (16진수)
사용 범위인터넷, 글로벌 네트워크로컬 네트워크

  • MAC주소는 IEEE라는 기관에서 관리되고,

  • MAC주소는 일종의 주민등록번호이고 IP주소는 우편번호라고 생각하면 된다.

  • 디바이스를 다른 네트워크로(다른 서브넷)옮기면,
    맥 주소는 바뀌지 않지만, IP주소는 변경이 된다.


MAC 주소를 활용한 어댑터의 송수신

  1. 송신 어댑터는 프레임에 목적지 어댑터의 MAC 주소를 넣고 랜상으로 전송한다.

    • 스위치는 종종 프레임을 자신의 모든 인터페이스로 브로드캐스트한다.
    • 즉, 자신을 목적지로 하지 않는 프레임을 수신할 수도 있다.
  2. 프레임을 수신한 어댑터는 프레임 안의 목적지 MAC 주소와 자신의 MAC 주소가 일치하는지 검사한다.

  3. 일치하면 데이터그램을 추출하여 프로토콜 스택의 위쪽으로 전달한다.

  4. 일치하지 않으면 폐기한다.



ARP

네트워크 계층(3계층)과 데이터 링크 계층(2계층) 사이에서
IP 주소를 MAC 주소로 변환하는 프로토콜.

같은 서브넷 안에서 데이터를 전달할 때
IP 주소는 네트워크 계층(3계층)에서 장치를 식별하지만,
실제로 데이터 패킷을 전송하려면 데이터 링크 계층(2계층)의 MAC 주소가 필요하다.

두 장치가 같은 서브넷에 있는 경우, 데이터는 라우터를 거치지 않고 직접 전송된다.
따라서, 송신자는 타겟 IP 주소에 해당하는 MAC 주소를 반드시 알아야 함.

ARP는 IP 주소를 MAC 주소로 변환하여 로컬 네트워크(LAN) 내에서 장치 간 데이터 전송을 가능하게 한다.

➡️ 즉, 같은 서브넷 안에서 데이터를 보내려면, 타겟 IP에 매칭되는 MAC주소를 알아야 한다.

Q. 송신자는 IP주소를 가지고 어떻게 MAC주소를 알 수 있을까?

각 IP 노드(호스트, 라우터 같은 것들)이 ARP 테이블을 만들어 사용한다.

ARP 테이블은 타켓 IP에 대한 MAC 주소의 정보를 저장하고 있다.

테이블에 저장되는 데이터는 다음과 같이 저장된다.
<IP address; MAC address; TTL>

여기서 TTL은 해당 엔트리가 테이블에서 유효한 시간을 나타낸다.
(보통 20분으로 설정되고 20분이 지나면 테이블에서 삭제된다.)


같은 서브넷 A -> B 로의 데이터 전송

A는 목적지 B의 IP주소만 알고 있는 상태에서 B로 데이터를 보내려고 한다.
(A의 ARP테이블은 현재 비어 있음)

1. A는 같은 서브넷에 연결된 모든 노드(C,D,B)에 ARP query를 broadcast한다.

  • 이때 타켓 MAC주소는 = FF-FF-FF-FF-FF-FF (모두 1로 설정)

  • 자신의 주소인 src IP MAC 주소 또한 담아 보낸다.

  • 이때 각 보내는 프레임의 페이로드에 쿼리 메세지를 캡슐화해서 보낸다.


2. 각 노드가 쿼리를 받았을 떄 쿼리의 dest IP주소와 내 IP주소가 일치하면 A에 응답한다.

  • 각 노드는 자신의 주소와 쿼리 패킷의 타겟 IP를 비교하여
    일치하면 응답 / 일치하지 않으면 drop 한다.

  • ARP 응답 : 타켓 IP, MAC 주소의 자신의 주소를 넣고 프레임을 A에 전송한다


3. A는 받은 응답을 토대로 ARP 테이블을 작성한다.

  • B에게 받은 ARP 응답을 테이블에 TTL을 설정하여 저장한다.

  • 이제 작성한 테이블을 통해 프레임을 전달한다.



다른 서브넷 A -> B 로의 데이터 전송

A는 B의 목적지 IP만 알고 있다.(MAC주소는 모른다.)
A는 first hop 라우터 R의 IP 주소와 MAC주소를 알고있다.

➡️ A는 B로 패킷을 보낼 때 first hop 라우터 R의 MAC주소로 보낸다.
그 후 R이 B로 전달하는 방식을 사용한다.

(이때 같은 서브넷에 속한 노드들은 ARP프로토콜을 통해 ARP 테이블을 미리 작성하였다고 가정한다.)

1. A -> R로 전달

  • A는 받은 데이터 그램을 캡슐화 할 때
    링크 헤더 dest MAC주소에 first hop 라우터의 MAC주소를 저장해 R로 보낸다.

  • 이때 src IP, MAC은 자신의 주소 / dest IP은 B의 주소로 설정한다.


2. R은 받은 프레임을 de캡슐화 하여 새로 링크헤더를 붙여 캡슐화 한다.

  • R은 프레임을 받으면 de캡슐하여 데이터그램을 꺼내,
    src - 자신의 MAC
    dest - B의 MAC
    로 설정하여 다시 캡슐화 한다.

  • 그후 해당 패킷을 B로 전송한다.


3. B는 패킷을 받고 de캡슐하여 위 레이어로 보낸다.

  • B는 패킷을 받아 데이터그램을 꺼내 IP 레이어 스택에 보낸다.

Q. 왜 굳이 MAC주소를 사용하는 걸까?

  1. 네트워크 레이터의 다른 프로토콜을 적용할 때 디바이스의 고유한 MAC주소가 필요한 경우가 있기 때문

  2. IP주소로만 패킷을 보내는 것보다 MAC주소도 같이 사용하여, 구분하는 것이 구현이 간편하고 성능이 훨씬 좋기 때문이다.

  3. 고정된 MAC주소로 간편하게 특정해 보낼 수 있었지만 IP주소로만 보내게 되면 IP 주소를 더욱 복잡하게 구현해야한다.

  4. 링크레이어에서 3계층인 네트워크레이어의 패킷까지 de캡슐을 해야한다.

위의 이유 떄문에 MAC주소를 사용한다.



이더넷

이더넷은 초기에 개발되어 wide하게 사용되고 있다.

다른 프로토콜에 비해 쉽고, 비용이 저렴하기 때문이기도 하고,

다양한 속도로 접속을 제공할 수 있어(10 Mdps ~ 400Gbps) 다양한 버전으로 나누기 용이하기 때문이다.

이더넷의 발전

초기의 이더넷은 버스의 형태로 이루어졌고,
요즘의 이더넷은 스위치를 사용한다.

버스의 단점은 2개의 디바이스가 전송하게 되면 충돌이 가능하다.
하지만 스위치 방식은 따로 따로 연결되어 충돌이 발생하지 않는다.

이더넷 프레임의 구조(포맷)

이더넷 프레임은 다음과 같이 구성된다.

  1. Preamble

    • 송수신자의 동기화를 위한 부분이다.
    • 8바이트로 구성
      • 프리앰블의 첫 7바이트는 10101010
      • 마지막 바이트는 10101011
  2. dest, src주소

    • 각각 6바이트 씩의 MAC 주소 필드를 갖는다.
  3. type

    • 상위 계층 프로토콜의 종류를 알 수 있다.(보통은 IP 프로토콜)
    • 때문에 리시버가 역다중화 할 때 사용한다.
  4. CRC

    • 수신자가 에러를 검출할수 있다. -> 에러 시 drop

이더넷의 비연결형, 비신뢰적인 서비스

  1. 이더넷은 connectionless이다
    송신 어댑터는 데이터그램을 전송할 때 핸드셰이킹 하지 않고 이더넷 프레임에 캡슐화해서 랜으로 전송한다.
  1. 이더넷은 unreliable하다
    수신 어댑터는 CRC 검사를 통해 프레임을 검사하지만,
    이에 대한 확인 응답 혹은 부정 확인 응답을 보내지 않는다.
    (실패시 그저 drop한다.)

이더넷의 MAC프로토콜은 unslotted CSMA/CD 를 사용한다.
(바이너리 backoff도 사용)

profile
다 같이 화이팅! 🙋‍♂️

0개의 댓글