각 디바이스에 고유하게 할당된 주소 번호이다.
IP와 다르게 변하지 않으며 고정되어 있다.
네트워크 계층에서 장치의 위치를 식별한다.
형식
• IPv4: 32비트 (예: 192.168.0.1)
• IPv6: 128비트 (예: 2001:0db8:85a3:0000:0000:8a2e:0370:7334)
변경 가능성: 네트워크에 연결될 때마다 동적 할당(DHCP)으로 바뀔 수 있음.
사용 위치: 인터넷과 같은 광역 네트워크(WAN)
기능: 데이터를 전송할 때 장치 간의 네트워크 경로 설정.
3계층을 통해 포워딩 된다.(네트워크 레이어)
IP주소는 계층적인 구조를 갖는다.
perfix과 host part가 존재
데이터 링크 계층에서 장치를 물리적으로 식별한다.
형식: 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 주소를 넣고 랜상으로 전송한다.
프레임을 수신한 어댑터는 프레임 안의 목적지 MAC 주소와 자신의 MAC 주소가 일치하는지 검사한다.
일치하면 데이터그램을 추출하여 프로토콜 스택의 위쪽으로 전달한다.
일치하지 않으면 폐기한다.
네트워크 계층(3계층)과 데이터 링크 계층(2계층) 사이에서
IP 주소를 MAC 주소로 변환하는 프로토콜.
같은 서브넷 안에서 데이터를 전달할 때
IP 주소는 네트워크 계층(3계층)에서 장치를 식별하지만,
실제로 데이터 패킷을 전송하려면 데이터 링크 계층(2계층)의 MAC 주소가 필요하다.
두 장치가 같은 서브넷에 있는 경우, 데이터는 라우터를 거치지 않고 직접 전송된다.
따라서, 송신자는 타겟 IP 주소에 해당하는 MAC 주소를 반드시 알아야 함.
ARP는 IP 주소를 MAC 주소로 변환하여 로컬 네트워크(LAN) 내에서 장치 간 데이터 전송을 가능하게 한다.
➡️ 즉, 같은 서브넷 안에서 데이터를 보내려면, 타겟 IP에 매칭되는 MAC주소를 알아야 한다.
각 IP 노드(호스트, 라우터 같은 것들)이
ARP 테이블을 만들어 사용한다.
ARP 테이블은 타켓 IP에 대한 MAC 주소의 정보를 저장하고 있다.
테이블에 저장되는 데이터는 다음과 같이 저장된다.
<IP address; MAC address; TTL>
여기서 TTL은 해당 엔트리가 테이블에서 유효한 시간을 나타낸다.
(보통 20분으로 설정되고 20분이 지나면 테이블에서 삭제된다.)
A는 목적지 B의 IP주소만 알고 있는 상태에서 B로 데이터를 보내려고 한다.
(A의 ARP테이블은 현재 비어 있음)
ARP query를 broadcast한다.
이때 타켓 MAC주소는 = FF-FF-FF-FF-FF-FF (모두 1로 설정)
자신의 주소인 src IP MAC 주소 또한 담아 보낸다.
이때 각 보내는 프레임의 페이로드에 쿼리 메세지를 캡슐화해서 보낸다.
각 노드는 자신의 주소와 쿼리 패킷의 타겟 IP를 비교하여
일치하면 응답 / 일치하지 않으면 drop 한다.
ARP 응답 : 타켓 IP, MAC 주소의 자신의 주소를 넣고 프레임을 A에 전송한다


B에게 받은 ARP 응답을 테이블에 TTL을 설정하여 저장한다.
이제 작성한 테이블을 통해 프레임을 전달한다.
A는 B의 목적지 IP만 알고 있다.(MAC주소는 모른다.)
A는 first hop 라우터 R의 IP 주소와 MAC주소를 알고있다.
➡️ A는 B로 패킷을 보낼 때 first hop 라우터 R의 MAC주소로 보낸다.
그 후 R이 B로 전달하는 방식을 사용한다.
(이때 같은 서브넷에 속한 노드들은 ARP프로토콜을 통해 ARP 테이블을 미리 작성하였다고 가정한다.)

A는 받은 데이터 그램을 캡슐화 할 때
링크 헤더 dest MAC주소에 first hop 라우터의 MAC주소를 저장해 R로 보낸다.
이때 src IP, MAC은 자신의 주소 / dest IP은 B의 주소로 설정한다.

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

네트워크 레이터의 다른 프로토콜을 적용할 때 디바이스의 고유한 MAC주소가 필요한 경우가 있기 때문
IP주소로만 패킷을 보내는 것보다 MAC주소도 같이 사용하여, 구분하는 것이 구현이 간편하고 성능이 훨씬 좋기 때문이다.
고정된 MAC주소로 간편하게 특정해 보낼 수 있었지만 IP주소로만 보내게 되면 IP 주소를 더욱 복잡하게 구현해야한다.
링크레이어에서 3계층인 네트워크레이어의 패킷까지 de캡슐을 해야한다.
위의 이유 떄문에 MAC주소를 사용한다.
이더넷은 초기에 개발되어 wide하게 사용되고 있다.
다른 프로토콜에 비해 쉽고, 비용이 저렴하기 때문이기도 하고,
다양한 속도로 접속을 제공할 수 있어(10 Mdps ~ 400Gbps) 다양한 버전으로 나누기 용이하기 때문이다.
초기의 이더넷은 버스의 형태로 이루어졌고,
요즘의 이더넷은 스위치를 사용한다.
버스의 단점은 2개의 디바이스가 전송하게 되면 충돌이 가능하다.
하지만 스위치 방식은 따로 따로 연결되어 충돌이 발생하지 않는다.


이더넷 프레임은 다음과 같이 구성된다.
Preamble
dest, src주소
type
CRC
이더넷은 connectionless이다이더넷은 unreliable하다이더넷의 MAC프로토콜은 unslotted CSMA/CD 를 사용한다.
(바이너리 backoff도 사용)