1. ARP (Address Resolution Protocol)
ARP는 통신 프로토콜중 하나 입니다. ARP 통신의 목적은 MAC 주소를 알아내기 위해 사용되는 프로토콜 입니다.
사진에서 보는것과 같이 OSI 7 Layer중 2계층에 속한 프로토콜로 라우터 통신이 아닌, 브릿지, 허브, L2 스위치에서 사용되는 로컬 통신 입니다.
2. ARP?? IP??
ARP통신은 상대방의 IP주소는 아는데, MAC 주소를 모를때 사용합니다.
일반적으론 IP주소만 알면 통신이 가능하다고 생각을 하지만, 컴퓨터는 기본적으로 MAC주소를 가지고 통신하게 됩니다.
그럼 왜 IP주소가 아니라 MAC주소를 보고 통신을 할까??
IP주소는 유동적으로 변하고, MAC주소는 고정(static)이기 때문입니다.
MAC주소는 NIC카드의 고유 주소로 공장에서 찍을 때 고유 MAC주소를 가지고 만들어 집니다.
MAC 주소는 16진수 12자리로 구성되며, 맨 앞 6자리는 제조사, 뒤 6자리는 랜덤으로 찍히게 됩니다.
때문에 중복이 없죠. IP주소 같은 경우는 수시로 바뀌게 됩니다. ISP의 DHCP 프로토콜로 인해 수시로 변경되죠.
예를들어 서버가 있다고 가정 했을 때, 서버 IP가 수시로 바뀌게 된다면, 해당 IP에 맞는 주소를 새로 업데이트 시켜줘야할 것입니다. (물론 IP대역을 구매해서 고정 IP로 사용하면 됩니다. 이건 나중에 설명하도록 하겠습니다.)
3. MAC 주소 알아내기 (Who has)
기본적으로 통신은 두가지로 나뉩니다. 로컬환경과 다른 네트워크 환경.
우선 로컬환경에서 MAC을 알아내는 방법에 대해 설명하겠습니다.
로컬 환경에선 IP를 알고 MAC주소를 모를때 Broadcast로 같은 네트워크에 있는 모두에게 통신을 하게 됩니다.
해당 패킷을 뿌릴때는 다음과 같은 형태로 뿌리게 됩니다.
상대방 IP주소가 10.0.0.10/24 라고 가정 한다면,
[그림]
이런식으로 만들어 질 것입니다. (물론 저렇게 생기진 않습니다.....)
중요한것은 목적지 MAC주소가 FF:FF:FF:FF:FF:FF 라는 것이죠.
그럼 같은 네트워크에 있는 모든 노드들에게 해당 패킷이 가며, 해당 IP주소인 노드가 이를 response하게 됩니다.
request한 노드는 해당 MAC주소를 보고 통신을 하게 되죠.
Who has
이렇게 브로드케스트를 통해서 IP주소를 이용해 MAC주소를 알아내는 방식을 Who has 라고 합니다.
해당 패킷을 보면 "내 IP주소를 192.168.1.1 인데, 192.168.1.77의 MAC주소를 알려달라" 라고 broadcast를 뿌리게 되는 것입니다.
4. ARP Cache
매번 통신을 할 때 브로드케스트로 같은 네트워크에 있는 전체 노드들에게 패킷을 보내는 행위는 스팸이 됩니다.
굉장히 비효율 적이죠. 때문에 각 운영체제에선 MAC주소를 ARP Cache라는 곳에 저장해 둡니다.
운영체제마다 다르지만, 보통은 MAC주소를 주고 받을 때, request쪽만(53.2.47.5) 목적지 MAC 주소에 대해서만 ARP Chche에 저장합니다. 즉, response한(10.0.0.10) 노드는 request노드에 대한 MAC주소를 저장하지 않습니다.
때문에 반대로 통신할 경우 response한(10.0.0.10) 노드가 53.2.47.5 목적지에 통신을 하려면 MAC주소를 알아내기 위해서 다시 위와 같은 브로드케스트 과정을 반복하게 됩니다.
MS운영체제 같은 경우에는 response할 때 request한 쪽의 패킷에 있는 MAC주소를 ARP Cache에 저장합니다.
(이게 더 효율적이죠...)
ARP Cache도 수명이 있는데, 2분 ~ 10분 사이로 유지한다고 합니다.
ARP Cache에 계속 MAC주소가 저장되어 있을 경우에는 문제가 되는게, 상대방 IP가 변경되었을 때, 잘못된 주소로 패킷을 보낼 수 있기 때문에, 적절한 수명이 필요한 것입니다.
5. IP Broadcast VS MAC Broadcast
MAC Broadcast를 사용하는 이유는 MAC주소를 알아내기 위해서 사용됩니다.
IP Broadcast는 IP주소 끝자리가 255로 끝나는 주소를 말합니다.
IP Broadcast는 DHCP를 통해 IP가 없는 노드에게 IP를 할당할 때 사용하거나, 네트워크를 관리할 떄 사용하거나,
라우터에서 RIP통신을 할 때 사용합니다.
IP 관련해선 다음에 다루도록 하죠....
'프로그래밍 > 웹, 네트워크' 카테고리의 다른 글
X-Forwarded-For(XFF) 헤더란? (2) | 2023.05.01 |
---|---|
DNS Record란? (0) | 2021.06.28 |
DNS에 대한 설명(디테일 하게....) (7) | 2021.03.29 |
Web Server과 WAS의 차이점(MVC 모델링) 기초부터 설명해욧~ (1) | 2020.11.08 |
http와 tcp/ip의 이해 (21) | 2020.10.31 |
댓글