본문은 “그림으로 공부하는 TCP/IP 구조” 및 각종 자료를 읽고 재구성한 글임을 밝힙니다.
데이터링크 계층의 특징:
같은 네트워크에 있는 단말을 식별한다.
“같은 네트워크”란 동일한 LAN 범위를 의미한다!
- 물리 계층만으로는 정정할 수 없는 에러를 감지하고 신뢰성을 확보한다.
- MAC 주소를 사용해서 송신 단말과 수신 단말을 식별한다.
1. 이더넷(Ethernet)
유선 LAN(IEEE802.3)으로 표준화된 이더넷 기준
1-1. 이더넷 프레임
ref: https://www.minitool.com/lib/ethernet-frame.html
프레임 구조 | 요소 |
---|---|
이더넷 헤더 | 프리앰블, 수신지/송신지 MAC 주소, 타입 |
이더넷 페이로드 | IP 패킷(+ 패딩) |
이더넷 트레일러 | FCS |
- 이더넷 헤더
- 프리앰블 (8바이트): 이제부터 이더넷 프레임을 보내는 것을 알리는 비트 패턴
- 앞에
10101010
7개 / 뒤에10101011
1개 - 수신 측 단말은 이 패턴을 보고 이더넷 프레임이 온다고 판단한다.
- 앞에
- 수신지/송신지 MAC 주소 (6바이트): 이더넷 네트워크에 접속하고 있는 단말을 식별하는 주소
- 수신 측 단말은 수신지 MAC 주소가 자신의 MAC 주소라면 해당 프레임을 받고, 아니면 파기한다.
- 수신 측 단말은 송신지 MAC 주소를 통해 어떤 단말에서 온 이더넷 프레임인지 판별한다.
- 타입 (2바이트): 네트워크 계층(L3)에서 어떤 프로토콜을 사용하는지
- IPv4, IPv6, RARP, ARP 등 프로토콜에 따라 타입 코드가 부여된다.
- 프리앰블 (8바이트): 이제부터 이더넷 프레임을 보내는 것을 알리는 비트 패턴
- 이더넷 페이로드 (가변): 네트워크 계층의 데이터 자체 (네트워크 계층에서 IP를 사용한다면 IP 패킷)
- 이더넷의 경우, 46~1,500바이트로 제한되어 있다.
- IP 패킷이 46바이트 미만인 경우: 패딩이라는 더미 데이터를 추가하여 46바이트로
- IP 패킷이 1,500바이트 이상인 경우: 트랜스포트/네트워크 계층에서 데이터를 1,500바이트에 맞게 나누어 줌
- 이더넷 트레일러
- FCS (4바이트): 이더넷 프레임이 손상되지 않았는지 확인하기 위한 필드 (Frame Check Sequence)
<수신지/송신지 MAC 주소, 타입, 이더넷 페이로드>
에 대해 일정한 계산(체크섬 계산, CRC)을 수행하고, 그 결과를 FCS로 프레임 마지막에 추가한다.수신 측 단말은 전달받은 이더넷 프레임에 대해 동일한 계산을 수행하고, 그 값이 FCS와 같은지 확인하여 이더넷 프레임의 손상 여부를 판단한다.
값이 다르면 이더넷 프레임이 손상되었다고 판단하고 파기한다.
- 이더넷의 에러 감지를 담당한다.
- FCS (4바이트): 이더넷 프레임이 손상되지 않았는지 확인하기 위한 필드 (Frame Check Sequence)
1-2. MAC 주소
- 이더넷 네트워크에 접속되어 있는 단말의 식별 ID이다.
- 6바이트(48비트)로 구성되며, 1바이트(8비트)씩 하이픈이나 콜론으로 구분하여 12자리 16진수로 표기한다.
- 이더넷 네트워크에서의 통신 종류에 따라 수신지 MAC 주소는 달라진다.
- 유니캐스트 (1:1 통신): 수신하는 단말의 MAC 주소를 사용한다.
브로드캐스트 (1:all 통신): 6바이트가 모두
1
인, 즉ff:ff:ff:ff:ff:ff
를 사용한다.어떤 단말이 브로드캐스트를 송신하면 같은 이더넷 네트워크에 있는 자신 외의 모든 단말이 그 프레임을 수신한다. (→ 브로드캐스트 도메인)
이는 ARP와 같이 같은 네트워크 상 모든 단말에 문의하는 프로토콜에서 사용한다.
멀티캐스트 (1:n 통신): 네트워크 계층에서 사용하는 IP 버전에 따라 달라진다.
어떤 단말이 멀티캐스트를 송신하면 그 그룹에 있는 단말들만 그 패킷을 수신한다. 애플리케이션을 기동한 단말만 패킷을 수신할 수 있으므로, 네트워크에 있는 모든 단말이 강제로 패킷을 수신하는 브로드캐스트에 비해 트래픽 효율이 높아진다. (ex. 동영상 전송, 주식 거래 애플리케이션 등)
- IPv4
- 상위 25비트는 고정 (
01:00:5e
뒤에0
이 하나 붙어있는 형태) - 하위 23비트는 멀티캐스트용의 IPv4 주소의 하위 23비트
- 상위 25비트는 고정 (
- IPv6
- 상위 2바이트(16비트)는 고정 (
33:33
) - 하위 4바이트(32비트)는 멀티캐스트 IPv6 주소의 하위 4바이트(32비트)
- 상위 2바이트(16비트)는 고정 (
- IPv4
2. L2 스위치 (스위칭 허브, 스위치)
L2 스위치란 데이터링크 계층에서 동작하는 네트워크 기기이다. 이것이 제공하는 기능을 살펴보자.
2-1. L2 스위칭
- 이더넷 헤더에 포함된 송신지 MAC 주소와 자신의 포트 번호를 MAC 주소 테이블에 관리하면서, 이더넷 프레임의 전송 대상지를 바꾸어 통신 효율을 높인다.
- MAC 주소 테이블에는
<포트 번호> - <MAC 주소>
가 저장되게 된다. 일정 시간 동안 통신하지 않는 단말에 관련된 정보는 일정 시간 후 삭제한다. - L2 스위치의 MAC 주소 테이블이 비어있을 때, PC1이 PC2에 대한 이더넷 프레임을 만들어 보내는 상황
- PC1 → PC2로 이더넷 프레임을 만들어 케이블로 보낸다.
- PC1의 프레임을 전달 받은 L2 스위치는 MAC 주소 테이블에 송신지 MAC 주소 & 프레임을 전달 받은 물리 포트 번호를 등록한다.
L2 스위치는 PC2가 몇 번 포트에 접속되어 있는지 모르므로, 플러딩(flooding)을 수행한다.
→ PC1의 프레임 사본을 PC1가 접속된 포트를 제외한 모든 포트에 전송한다.
- 복사한 프레임을 전달받은 PC2는 PC1에 대한 응답 프레임을 만들어 케이블로 보낸다. PC2를 제외한 다른 단말은 관계 없는 프레임이라고 판단하여 파기한다.
- PC2의 프레임을 전달 받은 L2 스위치는 MAC 주소 테이블에 송신지 MAC 주소 & 프레임을 전달 받은 물리 포트 번호를 등록한다.
- L2 스위치는 이제 PC1과 PC2가 어떤 물리 포트에 접속되어 있는지 알기 때문에, 이후에는 PC1-PC2 간 통신을 직접 전송한다. (→ 3번 단계 수행 X)
- 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
- 하드웨어 타입 (2바이트): L2 프로토콜 코드 (ex. 이더넷 =
0x0001
) - 프로토콜 타입 (2바이트): L3 프로토콜 코드 (ex. IPv4 =
0x0800
) - 하드웨어 주소 크기 (1바이트): MAC 주소의 길이 (=
6
) - 프로토콜 주소 크기 (1바이트): IPv4 주소의 길이 (=
4
) - 오퍼레이션 코드 (2바이트): ARP 프레임의 종류
1
: ARP request (브로드캐스트)2
: ARP reply (유니캐스트)3
: (RARP)4
: (RARP)
- 송신지 MAC/IPv4 주소 (가변): ARP를 송신하는 단말의 MAC 주소의 IPv4 주소
- 목표 MAC/IPv4 주소 (가변): ARP로 주소를 결정하려는 MAC 주소와 IPv4 주소
- 최초에는 목표 MAC 주소를 모르므로 더미 MAC 주소인
00:00:00:00:00:00
설정
- 최초에는 목표 MAC 주소를 모르므로 더미 MAC 주소인
⬇️ ARP는 다음의 두 패킷만으로 MAC 주소와 IP 주소를 연결한다.
오퍼레이션 종류 | 통신 방식 |
---|---|
ARP Request | 브로드캐스트 |
ARP Reply | 유니캐스트 |
3-2. ARP 테이블
- ARP에서 주소를 결정한 정보를 일정 시간동안 저장하는 메모리 상의 테이블로, 단말(PC)마다 가진다.
- 주소 결정 시, ARP 테이블에 이미 수신지 IP 주소에 해당하는 MAC 주소가 존재한다면, 주소 결정 과정을 거칠 필요가 없다.
<MAC 주소> - <IP 주소>
로 구성된다.
3-3. 주소 결정 순서 (수신지 MAC 주소를 찾는 방법)
PC1가 같은 이더넷 네트워크에 존재하는 PC2의 MAC 주소를 결정하는 상황
- PC1은 네트워크 계층에서 전달받은 IP 패킷에 포함된 수신지 IPv4 주소를 가지고 자신의 ARP 테이블을 검색한다. 이때, IPv4 주소에 해당하는 MAC 주소가 없다면 ARP request 처리한다.
- PC1은 ARP request 용 ARP 패킷을 생성하고, 이더넷 프레임으로 만들어 브로드캐스트로 보낸다.
- ARP 패킷의 각 필드 정보 조합하기
- 오퍼레이션 코드(=
1
), 송신지 MAC & IPv4 주소(= PC1 정보)을 기입한다. - 목표 MAC 주소: 알 수 없으므로 더미 MAC 주소(
00:00:00:00:00:00
)를 설정한다. - 목표 IPv4 주소:
- 같은 IPv4 네트워크에 속할 때는, 수신지 IPv4 주소를 그대로 사용한다.
- 다른 IPv4 네트워크에 속할 때는, 그 네트워크의 출구가 되는 넥스트 홉(next hop)의 목표 IPv4 주소를 사용한다.
- 오퍼레이션 코드(=
- 이더넷 헤더 조합하기
- ARP request 용이므로 브로드캐스트이다.
- 송신지 MAC 주소는 PC1의 MAC 주소이며, 수신지 MAC 주소는 브로드캐스트용 MAC 주소(
ff:ff:ff:ff:ff:ff
)를 사용한다.
- ARP 패킷의 각 필드 정보 조합하기
- ARP request가 같은 이더넷 네트워크 내 모든 단말에게 전달된다. PC2는 자신에 대한 ARP 패킷이라고 판단하고 해당 요청을 받아들이고, 다른 단말은 파기한다.
- PC2는 ARP reply 용 ARP 패킷을 생성하고, 이더넷 프레임으로 만들어 유니캐스트로 보낸다.
- ARP 패킷의 각 필드 정보 조합하기
- 오퍼레이션 코드(=
2
), 송신지 MAC & IPv4 주소(= PC2 정보), 목표 MAC & IPv4 주소(= PC1 정보)를 기입한다.
- 오퍼레이션 코드(=
- 이더넷 헤더 조합하기
- ARP reply 용이므로 유니캐스트이다.
- 송신지 MAC 주소는 PC2의 MAC 주소이며, 수신지 MAC 주소는 PC1의 MAC 주소이다.
- ARP 패킷의 각 필드 정보 조합하기
- PC1은 ARP reply의 ARP 필드에 포함된 송신지 MAC 주소와 송신지 IPv4 주소를 보고 PC2의 MAC 주소를 인식한다. 이를 ARP 테이블에 기록한다.
- 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이다.
- IP 주소 중복 감지
- OS는 IPv4 주소가 설정되면, 해당 주소를 사용해도 괜찮은지 확인하기 위해 해당 주소를 목표 IPv4 주소로 설정한 GARP request를 브로드캐스트로 송신한다.
- 만약, 해당 IPv4 주소를 사용하고 있는 단말이 있다면, GARP reply를 유니캐스트로 응답한다. 이를 받는다면 OS는 같은 IPv4 주소를 가진 단말이 있다고 판단하여 에러 메시지를 표시한다.
- 인접 기기의 테이블(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. 데이터링크 계층