Home [Network] 2. 데이터링크 계층
Post
Cancel

[Network] 2. 데이터링크 계층

본문은 “그림으로 공부하는 TCP/IP 구조” 및 각종 자료를 읽고 재구성한 글임을 밝힙니다.


데이터링크 계층의 특징:

  1. 같은 네트워크에 있는 단말을 식별한다.

    “같은 네트워크”란 동일한 LAN 범위를 의미한다!

  2. 물리 계층만으로는 정정할 수 없는 에러를 감지하고 신뢰성을 확보한다.
  3. MAC 주소를 사용해서 송신 단말과 수신 단말을 식별한다.


1. 이더넷(Ethernet)

유선 LAN(IEEE802.3)으로 표준화된 이더넷 기준

1-1. 이더넷 프레임

ref: https://www.minitool.com/lib/ethernet-frame.html

프레임 구조요소
이더넷 헤더프리앰블, 수신지/송신지 MAC 주소, 타입
이더넷 페이로드IP 패킷(+ 패딩)
이더넷 트레일러FCS
  1. 이더넷 헤더
    1. 프리앰블 (8바이트): 이제부터 이더넷 프레임을 보내는 것을 알리는 비트 패턴
      • 앞에 10101010 7개 / 뒤에 10101011 1개
      • 수신 측 단말은 이 패턴을 보고 이더넷 프레임이 온다고 판단한다.
    2. 수신지/송신지 MAC 주소 (6바이트): 이더넷 네트워크에 접속하고 있는 단말을 식별하는 주소
      • 수신 측 단말은 수신지 MAC 주소가 자신의 MAC 주소라면 해당 프레임을 받고, 아니면 파기한다.
      • 수신 측 단말은 송신지 MAC 주소를 통해 어떤 단말에서 온 이더넷 프레임인지 판별한다.
    3. 타입 (2바이트): 네트워크 계층(L3)에서 어떤 프로토콜을 사용하는지
      • IPv4, IPv6, RARP, ARP 등 프로토콜에 따라 타입 코드가 부여된다.


  2. 이더넷 페이로드 (가변): 네트워크 계층의 데이터 자체 (네트워크 계층에서 IP를 사용한다면 IP 패킷)
    • 이더넷의 경우, 46~1,500바이트로 제한되어 있다.
    • IP 패킷이 46바이트 미만인 경우: 패딩이라는 더미 데이터를 추가하여 46바이트로
    • IP 패킷이 1,500바이트 이상인 경우: 트랜스포트/네트워크 계층에서 데이터를 1,500바이트에 맞게 나누어 줌


  3. 이더넷 트레일러
    1. FCS (4바이트): 이더넷 프레임이 손상되지 않았는지 확인하기 위한 필드 (Frame Check Sequence)
      • <수신지/송신지 MAC 주소, 타입, 이더넷 페이로드>에 대해 일정한 계산(체크섬 계산, CRC)을 수행하고, 그 결과를 FCS로 프레임 마지막에 추가한다.
      • 수신 측 단말은 전달받은 이더넷 프레임에 대해 동일한 계산을 수행하고, 그 값이 FCS와 같은지 확인하여 이더넷 프레임의 손상 여부를 판단한다.

        값이 다르면 이더넷 프레임이 손상되었다고 판단하고 파기한다.

      • 이더넷의 에러 감지를 담당한다.


1-2. MAC 주소

  • 이더넷 네트워크에 접속되어 있는 단말의 식별 ID이다.
  • 6바이트(48비트)로 구성되며, 1바이트(8비트)씩 하이픈이나 콜론으로 구분하여 12자리 16진수로 표기한다.
  • 이더넷 네트워크에서의 통신 종류에 따라 수신지 MAC 주소는 달라진다.
    1. 유니캐스트 (1:1 통신): 수신하는 단말의 MAC 주소를 사용한다.
    2. 브로드캐스트 (1:all 통신): 6바이트가 모두 1인, 즉 ff:ff:ff:ff:ff:ff를 사용한다.

      어떤 단말이 브로드캐스트를 송신하면 같은 이더넷 네트워크에 있는 자신 외의 모든 단말이 그 프레임을 수신한다. (→ 브로드캐스트 도메인)

      이는 ARP와 같이 같은 네트워크 상 모든 단말에 문의하는 프로토콜에서 사용한다.

    3. 멀티캐스트 (1:n 통신): 네트워크 계층에서 사용하는 IP 버전에 따라 달라진다.

      어떤 단말이 멀티캐스트를 송신하면 그 그룹에 있는 단말들만 그 패킷을 수신한다. 애플리케이션을 기동한 단말만 패킷을 수신할 수 있으므로, 네트워크에 있는 모든 단말이 강제로 패킷을 수신하는 브로드캐스트에 비해 트래픽 효율이 높아진다. (ex. 동영상 전송, 주식 거래 애플리케이션 등)

      1. IPv4
        • 상위 25비트는 고정 (01:00:5e 뒤에 0이 하나 붙어있는 형태)
        • 하위 23비트는 멀티캐스트용의 IPv4 주소의 하위 23비트
      2. IPv6
        • 상위 2바이트(16비트)는 고정 (33:33)
        • 하위 4바이트(32비트)는 멀티캐스트 IPv6 주소의 하위 4바이트(32비트)



2. L2 스위치 (스위칭 허브, 스위치)

L2 스위치란 데이터링크 계층에서 동작하는 네트워크 기기이다. 이것이 제공하는 기능을 살펴보자.

2-1. L2 스위칭

  • 이더넷 헤더에 포함된 송신지 MAC 주소자신의 포트 번호MAC 주소 테이블에 관리하면서, 이더넷 프레임의 전송 대상지를 바꾸어 통신 효율을 높인다.
  • MAC 주소 테이블에는 <포트 번호> - <MAC 주소>가 저장되게 된다. 일정 시간 동안 통신하지 않는 단말에 관련된 정보는 일정 시간 후 삭제한다.
  • L2 스위치의 MAC 주소 테이블이 비어있을 때, PC1이 PC2에 대한 이더넷 프레임을 만들어 보내는 상황
    1. PC1 → PC2로 이더넷 프레임을 만들어 케이블로 보낸다.
    2. PC1의 프레임을 전달 받은 L2 스위치MAC 주소 테이블송신지 MAC 주소 & 프레임을 전달 받은 물리 포트 번호를 등록한다.
    3. L2 스위치는 PC2가 몇 번 포트에 접속되어 있는지 모르므로, 플러딩(flooding)을 수행한다.

      PC1의 프레임 사본을 PC1가 접속된 포트를 제외한 모든 포트에 전송한다.

    4. 복사한 프레임을 전달받은 PC2는 PC1에 대한 응답 프레임을 만들어 케이블로 보낸다. PC2를 제외한 다른 단말은 관계 없는 프레임이라고 판단하여 파기한다.
    5. PC2의 프레임을 전달 받은 L2 스위치MAC 주소 테이블송신지 MAC 주소 & 프레임을 전달 받은 물리 포트 번호를 등록한다.
    6. L2 스위치는 이제 PC1과 PC2가 어떤 물리 포트에 접속되어 있는지 알기 때문에, 이후에는 PC1-PC2 간 통신을 직접 전송한다. (→ 3번 단계 수행 X)
    7. L2 스위치는 PC1과 PC2가 일정 시간 동안 통신하지 않으면, MAC 주소 테이블에서 관련 부분을 삭제한다.


2-2. VLAN(Virtual LAN)

  • 1대의 L2 스위치를 여러 대의 L2 스위치로 가상 분할하는 기술이다.
  • L2 스위치의 포트에 VLAN 식별 번호인 VLAN ID라는 숫자를 설정하고, 다른 VLAN ID가 설정된 포트에는 프레임을 전송하지 않도록 한다.
  • 일반적인 LAN 환경에서는 운용 관리나 보안의 목적으로 사용한다.



3. ARP (Address Resolution Protocol)

송신 시, 수신지 IPv4 주소를 통해 수신지 MAC 주소를 찾는 프로토콜

네트워크 세계에서 주소는 두 가지 뿐이다!

  • MAC 주소: NIC 자체에 내장되어 있는 물리적인 주소 (데이터링크 계층에서 동작)
  • IP 주소: OS 상에서 설정한 논리적인 주소 (네트워크 계층에서 동작)
  • ARP는 데이터링크 계층과 네트워크 계층의 다리 역할을 한다. (L2.5 정도?)
  • 데이터를 송신할 때 데이터링크 계층에서는 네트워크 계층으로부터 받은 IP 패킷이더넷 프레임으로 캡슐화하여 케이블로 보내야하는데, NIC에 내장 되어 있는 자신의 MAC 주소(= 송신지 MAC 주소)와는 다르게 수신지 MAC 주소에 대해서는 알 수 없다.
  • 따라서 실제로 이더넷 네트워크에서 통신을 하기에 앞서, ARP를 통해 같은 네트워크 내 수신지 IPv4 주소로부터 수신지 MAC 주소를 구하는 주소 결정(address resolution)을 수행한다.
  • 이렇게 수신지 MAC 주소를 구하고 난 뒤, 비로소 이더넷 프레임을 생성하여 송신할 수 있다.


3-1. ARP 패킷

ref: https://ospace.tistory.com/170

  1. 하드웨어 타입 (2바이트): L2 프로토콜 코드 (ex. 이더넷 = 0x0001)
  2. 프로토콜 타입 (2바이트): L3 프로토콜 코드 (ex. IPv4 = 0x0800)
  3. 하드웨어 주소 크기 (1바이트): MAC 주소의 길이 (= 6)
  4. 프로토콜 주소 크기 (1바이트): IPv4 주소의 길이 (= 4)
  5. 오퍼레이션 코드 (2바이트): ARP 프레임의 종류
    • 1: ARP request (브로드캐스트)
    • 2: ARP reply (유니캐스트)
    • 3: (RARP)
    • 4: (RARP)
  6. 송신지 MAC/IPv4 주소 (가변): ARP를 송신하는 단말의 MAC 주소의 IPv4 주소
  7. 목표 MAC/IPv4 주소 (가변): ARP로 주소를 결정하려는 MAC 주소와 IPv4 주소
    • 최초에는 목표 MAC 주소를 모르므로 더미 MAC 주소00:00:00:00:00:00 설정


⬇️ ARP는 다음의 두 패킷만으로 MAC 주소와 IP 주소를 연결한다.

오퍼레이션 종류통신 방식
ARP Request브로드캐스트
ARP Reply유니캐스트


3-2. ARP 테이블

  • ARP에서 주소를 결정한 정보를 일정 시간동안 저장하는 메모리 상의 테이블로, 단말(PC)마다 가진다.
  • 주소 결정 시, ARP 테이블에 이미 수신지 IP 주소에 해당하는 MAC 주소가 존재한다면, 주소 결정 과정을 거칠 필요가 없다.
  • <MAC 주소> - <IP 주소> 로 구성된다.


3-3. 주소 결정 순서 (수신지 MAC 주소를 찾는 방법)

PC1가 같은 이더넷 네트워크에 존재하는 PC2의 MAC 주소를 결정하는 상황

  1. PC1은 네트워크 계층에서 전달받은 IP 패킷에 포함된 수신지 IPv4 주소를 가지고 자신의 ARP 테이블을 검색한다. 이때, IPv4 주소에 해당하는 MAC 주소가 없다면 ARP request 처리한다.
  2. PC1은 ARP request 용 ARP 패킷을 생성하고, 이더넷 프레임으로 만들어 브로드캐스트로 보낸다.
    1. ARP 패킷의 각 필드 정보 조합하기
      • 오퍼레이션 코드(= 1), 송신지 MAC & IPv4 주소(= PC1 정보)을 기입한다.
      • 목표 MAC 주소: 알 수 없으므로 더미 MAC 주소(00:00:00:00:00:00)를 설정한다.
      • 목표 IPv4 주소:
        • 같은 IPv4 네트워크에 속할 때는, 수신지 IPv4 주소를 그대로 사용한다.
        • 다른 IPv4 네트워크에 속할 때는, 그 네트워크의 출구가 되는 넥스트 홉(next hop)의 목표 IPv4 주소를 사용한다.
    2. 이더넷 헤더 조합하기
      • ARP request 용이므로 브로드캐스트이다.
      • 송신지 MAC 주소는 PC1의 MAC 주소이며, 수신지 MAC 주소브로드캐스트용 MAC 주소(ff:ff:ff:ff:ff:ff)를 사용한다.
  3. ARP request가 같은 이더넷 네트워크 내 모든 단말에게 전달된다. PC2는 자신에 대한 ARP 패킷이라고 판단하고 해당 요청을 받아들이고, 다른 단말은 파기한다.
  4. PC2는 ARP reply 용 ARP 패킷을 생성하고, 이더넷 프레임으로 만들어 유니캐스트로 보낸다.
    1. ARP 패킷의 각 필드 정보 조합하기
      • 오퍼레이션 코드(= 2), 송신지 MAC & IPv4 주소(= PC2 정보), 목표 MAC & IPv4 주소(= PC1 정보)를 기입한다.
    2. 이더넷 헤더 조합하기
      • ARP reply 용이므로 유니캐스트이다.
      • 송신지 MAC 주소는 PC2의 MAC 주소이며, 수신지 MAC 주소는 PC1의 MAC 주소이다.
  5. PC1은 ARP reply의 ARP 필드에 포함된 송신지 MAC 주소송신지 IPv4 주소를 보고 PC2의 MAC 주소를 인식한다. 이를 ARP 테이블에 기록한다.
  6. PC1은 주소 결정한 PC2의 MAC 주소이더넷 헤더의 수신지 MAC 주소에, IPv4 주소IPv4 헤더의 수신지 IPv4 주소에 넣고 통신을 시작한다.


3-4. ARP 캐시 기능

  • 모든 TCP/IP 통신의 처음은 ARP이다. ARP를 통해 패킷을 송신할 MAC 주소를 안 뒤, 비로소 통신할 수 있게 된다.
  • 하지만, 브로드캐스트를 전제로 한다는 점에서 비효율적이다. MAC 주소, IPv4 주소는 자주 변하는 것이 아니기 때문에, ARP는 주소 결정한 내용을 일정 기간 저장하는 캐시 기능을 제공한다.
  • ARP에서 MAC 주소를 알았다면 ARP 테이블의 엔트리로 추가하고, 엔트리를 저장하고 있는 동안 ARP를 송신하지 않는다. 일정 시간(타임아웃)이 경과하면 엔트리를 삭제하고, 다시 ARP request를 송신한다.


3-5. GARP (Gratuitous ARP)

ARP 필드의 목표 IPv4 주소자신의 IPv4를 설정한 ARP이다.

  1. IP 주소 중복 감지
    • OS는 IPv4 주소가 설정되면, 해당 주소를 사용해도 괜찮은지 확인하기 위해 해당 주소를 목표 IPv4 주소로 설정GARP request브로드캐스트로 송신한다.
    • 만약, 해당 IPv4 주소를 사용하고 있는 단말이 있다면, GARP reply를 유니캐스트로 응답한다. 이를 받는다면 OS는 같은 IPv4 주소를 가진 단말이 있다고 판단하여 에러 메시지를 표시한다.
  2. 인접 기기의 테이블(ARP 테이블 & MAC 주소 테이블) 업데이트
    • GARP를 이용해 자신의 IPv4 주소와 MAC 주소를 알림으로써, 인접 기기의 ARP 테이블MAC 주소 테이블의 정보 업데이트를 돕는다.
    • 기기를 교체하게 되면 MAC 주소가 달라지는데, 이렇게 교환된 기기는 네트워크에 접속되는 시점에 GARP를 송출하여 자신의 MAC 주소가 변경되었음을 모두에게 알림으로써 인접한 기기의 테이블들을 업데이트 한다.


3-6. RARP (Reverse Address Resolution Protocol)

What is RARP? - GeeksforGeeks 자료를 참고한다.



References

  • “그림으로 공부하는 TCP/IP 구조(미야타 히로시 저)”, Ch3. 데이터링크 계층
This post is licensed under CC BY 4.0 by the author.

[Python] 스코프(Scope)와 클로저(Closure)

[Python] 데코레이터(Decorator)