1. MAC 주소를 알아내는 방법, ARP
다른 네트워크에 있는 호스트에 패킷을 송신하고자 할 때, 기본적으로는 상대 호스트의 IP주소를 쳐서 보내지만, 패킷을 올바르게 송신하기 위해서는 MAC주소가 필요하다. 이 과정에서 상대 호스트의 IP주소는 알지만 MAC주소는 모르는 상황이 발생할 수 있다. 이런 상황에서 이용되는 것이 IP주소를 이용해서 MAC주소를 알아오는 프로토콜, ARP(Address Resolutiom Protocol)이다.
실제로 패킷을 보내보면, IP주소만으로는 찾아가고자 하는 호스트의 직전 라우터까지만 가능하다. 마지막 라우터부터 호스트까지는 LAN이기 때문에 MAC주소를 이용하여 호스트를 찾아가게 되는데, 이 때 ARP가 작동한다.
다음은 ARP의 동작 과정을 살펴보자. ARP의 동작 과정은 아래와 같다.
- ARP 요청(Request)
- ARP 응답(Reply)
- ARP Cache Table 갱신
조금 더 상세하게 설명하자면, 우선 A는 같은 네트워크 내 모든 호스트에게 Broadcast 형식으로 ARP 요청을 보냅니다.쉽게 비유하자면 " 1.1.1.5 IP 쓰시는 분 MAC주소 좀 알려주세요~"라고 방송하는 것과 같다.
네트워크 내의 모든 호스트는 ARP요청 메세지를 수신하지만, 목적지 IP가 자신의 IP와 맞지 않는다면 폐기한다. 반면 자신의 IP가 맞다면(E) A에게 Unicast 형식으로 ARP 응답을 보낸다. ARP 응답을 받은 A는 E의 MAC 주소를 알게 된다.
앞선 단계들을 통해 A가 E의 MAC주소를 알게되면 A는 E의 IP주소와 MAC주소를 ARP 캐시 테이블에 저장하게 된다.
그렇다면 다른 네트워크에 있는 호스트에게 패킷을 보내는 상황에서 ARP는 어떻게 작동할까?
A가 모든 라우터와 호스트의 MAC주소를 모른다고 가정했을 때, 우선 앞서 설명한 ARP 요청-응답 과정을 통해 B의 주소를 얻어와 패킷을 전송한다. 하지만 C의 MAC주소도 모르므로, 전송된 패킷을 폐기하고 다시 ARP 요청-응답 과정을 통해 C의 MAC 주소를 얻어온 뒤 다시 패킷을 보낸다. 이러한 과정을 반복하여, C가 D의 MAC주소를 알게 되었을 때, 비로소 A에서 D로 정상적으로 패킷 전송이 가능하다. 한 가지 주의할 점은 A의 ARP 캐시 테이블에 C, D의 MAC주소가 저장되진 않는다는 점이다. A는 B의 MAC 주소만을 알고 B는 C의 MAC주소, C는 D의 MAC주소만을 저장하여 송신이 이뤄진다 (A가 굳이 D의 MAC주소를 알고 직접 보낼 필요 없이 게이트웨이(라우터)까지만 패킷을 정확히 보내면, 그때부터는 라우터가 해결해준다고 생각하면 쉽다).
참고로, 앞선 설명에서 ARP 패킷에서 MAC주소를 모를 경우, Broadcast 형식으로 요청을 보낸다고 했는데, FFFF.FFFF.FFFF는 MAC 주소의 Broadcast 주소이다.
아래는 ARP Cache Table, 종류, Header에 대해 간략하게 정리한 것으로 참고 바란다.
ARP Cache Table
ARP 캐시 테이블은 시스템에서 사용할 IP에 해당하는 MAC주소를 일시적으로 저장하는 기능이다. ARP 패킷을 통해 받아온 MAC주소는 일정 시간이 지나면 삭제되는 특성을 가지고 있다.
ARP의 종류
- ARP
- 논리적인 주소에 해당하는 장비의 물리적인 주소를 획득
- RARP
- 물리적 주소에 해당하는 장비의 논리적인 주소를 획득
- gratuitous ARP
- 충돌 감지(수동 IP 설정 시 겹치는 IP 주소가 있는지 확인)
- gateway 이중화
- proxy ARP
- IP대역은 같지만 물리적인 장비로 분리된 네트워크 통신을 위해 사용됨
ARP Header
- Header 크기→ 28bytes(Ethernet 환경에서 사용된 경우)
- hardware type (2bytes)
- ARP가 동작할 network 환경 정보
- ethernet 환경에서는 MAC주소(1번 코드)
- protocol type(2bytes)
- 논리적인 주소의 종류
- 일반적으로 ip v4주소 (0x0800)
- hardware address length
- 지정된 물리적 주소의 크기 값: MAC주소의 크기 (6bytes = 48bit)
- protocol address length
- IP주소의 크기 값: 4bytes = 32bit
- Opcode
- ARP packet의 종류 - request인가 reply인가?
- ARP packet이 수행하는 동작이 지정됨
- sourse(sender) hardware address
- 보내는 시스템의 물리적 주소
- 자신의 MAC주소
- source protocol address
- 보내는 시스템의 논리적 주소
- 자신의 IP주소
- target(destination) haraware address
- 받는 시스템의 MAC주소
- 모르는 경우 00:00:00:00:00:00 값이 들어감
- target protocol address
- 받는 시스템의 ip 주소
- 상대방의 ip 주소
2. IP를 보완하는 프로토콜, ICMP
ICMP(Internet Control Message Protocol)은 IP의 특징인 비 신뢰성(Unreliability)와 비 연결성(Connectionlessness)를 보완하기 위해 사용되는 3계층의 프로토콜이다. 여기서 비 신뢰성이란 보낸 패킷이 정상적으로 가는 것을 보장하지 않는 성질이고, 비 연결성이란 대상이 연결이 가능한 상태인지 고려하지 않고 패킷을 수신하는 성질이다. ICMP 기능은 네트워크 관리 및 오류 보고이고, 필요시 IP 패킷에 붙여서 보내며, 메세지 형식으로 정보를 알린다.
ICMP Header
- ICMP Header는 Other message에 따라 가변적인 크기를 가짐
- 필수Header크기는 8bytes로 고정되어 있음
- 필수 필드는 단순하지만 ICMP 종류에 따라 추가 메시지 값이 달라짐
- Type
- ICMP 메시지의 종류를 알려주는 값
- Code
- 메시지 종류에 따라 상세원인이나 세부정보가 필요한 경우 추가
- 기본값 : 0
- Network Troubleshooting시 Code값을 이용해 정보를 알아냄
- Checksum
- ICMP Header 의 오류를 검사하기 위한 값
- Other message specific information
- 선택적 추가 정보가 부여되는 필드
'Network' 카테고리의 다른 글
[Network] OSI Layer 4(Transport) - TCP, UDP (0) | 2024.08.23 |
---|---|
[Network] OSI Layer 3 - Router (0) | 2024.08.22 |
[Network] OSI Layer 3(Network) - IP Fragmentation (0) | 2024.08.19 |
[Network] OSI Layer 3(Network) - IP, Subnet Mask (0) | 2024.08.19 |
[Network] TP 케이블 제작 및 스위치 연결 실습 (0) | 2024.08.18 |