본문 바로가기

개발이야기

ARP 개념 정리


ARP 개념 정리


ARP는 동일한 LAN 내에 연결된 컴퓨터의 IP 주소를 얻는데 사용된다.
네트워크에서 데이터를 전송할 때 데이터는 컴퓨터간의 물리적 주소를 이용하여 전송된다. 이 물리적 주소는 각각의 랜카드 마다 고유하게 갖는 값으로 네트워크에서는 실제로 데이터를 전달할 때 네트워크 카드가 가진 물리적 주소를 이용하여 전달 하지만 소프트웨어 차원에서는 IP주소라는 것을 사용한다.
ARP라는 프로토콜은 바로 개념적인 IP주소를 실질적인 네트워크 어댑터의 물리적 주소와 연관시킬때 사용되는것이다.

같은 LAN 내에 있는 컴퓨터가 아닌 인터넷상에 연결된 다른 컴퓨터에 연결할때는 네트워크와 인터넷을 연결해 주는 중간 과정인 게이트웨이를 거친다.
접속할 서버가 불려있는 게이트웨이의 물리적 주소를 알기 위해 ARP라는 프로토콜을 사용해서 게이트웨이의 물리적 주소를 알아낸 다음 데이터를 게이트웨이에 보내면 게이트웨이는 보낸 데이터를 자신의 LAN안에 전달하여 데이터를 받을 대상을 찾게 되는 것이다.

네트웨크 내에서 데이터를 전달할 때 데이터를 교환하는 컴퓨터의 IP 주소와 물리적인 주소 목록을 잠시 동안 보관하게 되며 이를 ARP 캐쉬라고 한다.
LAN 상의 다른 컴퓨터와 성공적으로 데이터를 교환하려면 ARP 프로토콜에 의해 IP주소로부터 실제 물리적 주소를 얻을수 있어야 한다. 
ARP 명령어를 사용하여 게이트웨이와 LAN상의 다른 컴퓨터와의 연결이 제대로 되어있는지 확인된다면, 일단 하드웨어 설정이나 TCP/IP 상의 문제는 없다는 것을 알수있다.

예제)

모든 인터페이스에 대한 ARP 캐시 테이블을 표시하려면 다음과 같이 입력합니다.
arp -a

IP 주소 211.41.10.220을 실제주소 00-AA-00-4F-2A-9C로 확인하는 고정 ARP 캐시 항목을 추가하려면 다음과 같이 입력한다.
arp -s 211.41.10.220 00-AA-00-4F-2A-9C





운영자는 아니지만, 제가 아는 한도 내에서 알려드리죠.

arp(address resolution protocol)은 쉽게 말해서 통신을 원하는 호스트의 ip address를 알고 있을 때,
그 호스트의 mac address를 알고자 할 경우에 사용하는 프로토콜입니다.


rarp(reverse arp)는 arp와 반대의 경우로 mac address를 이용하여 ip address를 알고자 할 경우에
사용되어지는 프로토콜입니다.


arp를 이용하여 mac주소를 알아내는 과정을 살펴보면...
lan구간에서 통신을 하기 위해서는 상대방 호스트의 mac address가 반드시 필요합니다.


mac address는 각 nic(=랜카드)마다 고유의 6바이트값을 가지고 있습니다.


mac 주소를 알기 위해서 내 컴퓨터는 상대방 컴퓨터의 ip address를 포함하고 있는 arp 패킷을 랜구간에 브로드캐스트
통신으로 전송을 하게 됩니다.


랜구간에 있는 모든 호스트들의 nic는 이 패킷을 받아들여서 cpu에게 이 패킷을 분석하게 해서 자신의 ip address와 비교하게 되고, 일치하지 않으면 무시하게 되고 일치한다면 nic의 mac주소를 포함하고 있는 패킷을 내 컴퓨터로 전송합니다.


이와 같은 과정을 거쳐서 알아낸 상대방 호스트의 mac주소를 이용하여, 원하는 데이타에 이 주소를 포함시킨 패킷을 전송해서 유니캐스트 통신을 하게 됩니다.


이더넷의 특성상 이 패킷들도 랜구간의 모든 호스트의 nic들이 받아들이게 됩니다.

하지만 상대방 호스트를 제외한 다른 호스트의 경우 자신의 mac주소와 다르기 때문에 cpu로 보내지 않고 nic들이 알아서 드롭시켜 버립니다.


따라서 브로드캐스트 패킷과는 달리 cpu에 영향을 주지 않습니다.


rarp가 이루어지는 과정은 위 과정에서 mac주소와 ip주소만 달라진다고 보시면 됩니다.


통신을 원하는 호스트의 mac주소를 포함하는 패킷을 브로드캐스트시키면, 랜구간의 모든 호스트들은 자신의 nic의 mac주소와 비교하게 되고, 일치할 경우만 자신의 ip address를 포함하는 패킷을 만들어서 내 컴퓨터로 전송하게 됩니다.


참고로 ping을 해보시면 맨 처음 패킷의 전송시간이 긴 이유가 바로 arp를 이용하여 상대방 컴퓨터의 mac주소를 알게 되기까지 걸리는 시간이 길기 때문입니다.


이렇게 알아낸 mac주소값들은 arp캐시에 저장되어서 일정시간동안에는 저장된 값을 사용하게 되어서 통신을 더 빠르게 할 수 있습니다.


무조건 arp패킷을 전송하는 것이 아니라, 우선 arp캐시에 원하는 값이 없을 경우에 한해서 전송을 하게 됩니다.


원도우의 경우 도스창에서 arp 명령을 통해 arp캐시 테이블을 확인하거나 조정이 가능합니다.


참고가 되시기를....




우선 arp 동작원리를 이미 이해를 하셨다고 봅니다.


그러면 이더넷방식의 단점이 무엇인지는 아시겠지요?
송신자가 데이타를 전송시 상대방과 세션을 맺고서 보니는 것이 아니라 불특정 다수에게 broadcast한다는 것이죠?
이 broadcast에 약점이 있다는 것이죠....
송신자가 arp request로 broadcast를 하게되면 상대방 컴퓨터가 나의 mac주소는 이런 것이야... 하고 응답을 하게 됩니다.

...
그런데 여기에서 해커의 컴퓨터에서 찾고자 하는 mac주소 대신 자기가 상대방mac주소인 것처럼 먼저 잽싸게 응답을 한다면 어떤 일이 벌어질까요???
송신자는 무조건 내가 원하는 상대방mac주소인줄 알고 해커의 컴퓨터에 패킷을 전송합니다.


해커의 컴퓨터는 이제 원하는 데이타를 읽어보고 다시 원래의 수신자의 컴퓨터로 데이타를 전송합니다.

...
이러한 중간에 끼어서 장난을 칠 수 있다는 것이 바로 arp spoofing의 원리입니다.

...
그러면 이런 장난을 칠 수 있는 근본적인 원리는 뭘까요???
바로 tcp/ip 프로토콜이 데이타를 보내고 받으면서 인증의 절차를 거치지 않는다는 점과 데이타가 암호화되지 않고 전송이 되기 때문에 브로드캐스트 네트워크에서 지나가는 데이타패킷을 훔쳐보기가 가능하다는 것이죠....
도움이 되었나요???

 


안녕하세요.
네트워크 부분을 공부하다가 궁금한 것이 있어서 질문을 드리고자 합니다.
제가 질문을 드리고자 하는 것은 arp protocol 에 대한 것인데요. 내용은 다음과 같습니다.
가정 : 로컬 네트워크(lan) ethernet 으로 구성되어 있고 h1, h2, h3, h4 라 이름을 편의상 붙인 4 개의 로컬 네트워크의 호스트들은 또한 편의상 r1 이라 이름을 붙인 게이트웨이(라우터)를 통해서 외부의 원격지로 데이터를 전송한다고 단순화합니다.

질문1 : 이 질문은 arp 프로토콜과는 무관한 것으로 생각이 됩니다.
ethernet 은 기본적으로 csma/cd 방식을 사용하고 있습니다. 따라서 ethernet 으로 상호 연결되어 있는 호스트들은
호스트들 간 상호연결되어 있는 회선을 공유하는 방식을 취합니다.
모식도를 그리자면 다음과 같습니다.
------------------------- ( -> 호스트간 공유되는 회선)
1 1 1 1
1 1 1 1
1 1 1 1
1-----1 1-----1 1-----1 1-----1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1-----1 1-----1 1-----1 1-----1
h1 h2 h3 h4
따라서, h1 호스트가 h4 호스트에게 데이터를 전달하기 위해서는 h1 호스트는 2 가지의 방법을 취할 수 있다고 (개인적으로) 생각이 듭니다. 즉, ethernet frame 의 destination address 필드에 h4 호스트의 mac address 를 담아서 유니캐스팅으로 보내는 방법과 ff-ff-ff-ff-ff-ff 의 브로드캐스팅 주소를 실어서 회선에 뿌리는 방법의 두 가지가 있다고 생각합니다.
물론 전자는 h4 호스트만이 ethernet frame 을 수신해서 처리할 것이고 후자는 h2, h3, h4 호스트들이 모두 ethernet frame 을 수신하여 처리할 것이라 생각이 듭니다. 하지만 다른 호스트들을 고려하지 않고 h4 호스트 입장에서만 생각해 보자면 결국은 유니캐스팅으로 데이터를 전송하나 브로드캐스팅으로 데이터를 전송하나 동일한 것이 아닐까요?
단지 h4 호스트만이 회선에 뿌려진 ethernet frame 들을 수신하느냐 아니면 h2, h3, h4 호스트가 모두 회선에 뿌려진 ethernet frame 을 수신하느냐의 차이일 뿐 (다시말해서 ethernet frame 의 destination address 필드에 h1 호스트의 mac address 를 담아서 회선에 뿌리느냐 broadcasting address(ff-ff-ff-ff-ff-ff) 를 담아서 회선에 뿌리느냐의 차이일 뿐)
유니캐스팅과 브로드캐스팅과의 차이는 없는 것으로 생각이 됩니다. 제 생각이 맞는 것인지 확신이 서지 않아서요.
유니캐스팅과 브로드캐스팅이 어떤 차이가 있을 지 궁금하네요.
질문2 : 이번에는 arp 프로토콜에 대한 것입니다.
1-----1
---------------------------------1 1 (->라우터)
1 1 1 1 1-----1
1 1 1 1
1 1 1 1
1-----1 1-----1 1-----1 1-----1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1-----1 1-----1 1-----1 1-----1
h1 h2 h3 h4
처음으로 위와 같은 lan 을 ethernet 으로 구성했다고 하면 h1 호스트는 h2 호스트에 data 를 전송하고자 하여도 h2 의 mac address를 알지 못하기 때문에 data 를 보낼 수 없을 것입니다. 따라서, h1 호스트는 로컬 네트워크에 arp 요청 패킷을 브로드캐스팅하게 되고 h2 호스트는 arp 응답 패킷을 h1 호스트에 유니캐스팅하게 될 것입니다. 이와 같은 과정의 반복으로 인하여 h1 호스트는 로컬 네트워크의 모든 호스트들의 ip : mac 주소 매핑 테이블을 가지게 될 것이고 결과적으로 h1
호스트는 h2, h3, h4 호스트들에 data 를 보낼 수 있게 될 것입니다.
그런데 만약 h1 호스트가 gateway(router) 를 통해서 원격지에 있는 호스트에게 데이터를 보내려고 하는 상황에서는 또한
h1 호스트는 원격지의 호스트의 mac 어드레스를 ip : mac 주소 매핑 테이블(즉, arp cache table)에서 찾지 못할 것이므로 데이터를 보내고자 하는 원격지 호스트의 ip address 를 arp 요청 패킷에 담아서 동일하게 브로드캐스팅을 할 것이고 이 때는 router 가 arp 응답 패킷에 자신의 mac address 를 담아서 h1 호스트의 arp 요청에 응답을 하게 됩니다. 따라서, h1 호스트의 arp cache table 에는 h2, h3, h4 호스트의 ip address 이외의 ip address 에 대해서는 gateway(router)의 mac address 가 매핑되게 됩니다.
따라서, h1 호스트가 원격지의 호스트로 데이터를 전송할 때 데이터는 arp cache table 에서 gateway 의 mac address 를 find 하여 gateway 로 data 를 전송하게 됩니다.
제가 알고 있기로는 위와 같은 과정을 통한 다고 알고 있는데요.
궁금한 점은 다음과 같습니다.
그렇다면 gateway 는 도데체 어떻게 로컬 네트워크의 ip 와 원격 네트워크의 ip를 구분하느냐는 것입니다. 즉, h1 호스트는 원격지의 호스트로 데이터를 전송하기 위해서 arp cache table 에서 원격지 호스트의 ip address 에 해당하는 mac
address 를 찾을 것이고 만약 찾지 못한다면 다음과 같은 ethernet frame 을 브로드캐스팅 할 것입니다.
----------------ethernet header--------------------
1 ethernet destination address : ff-ff-ff-ff-ff-ff 1
1 ethernet source address : h1 호스트 mac address 1
1 ether type : 0x806 1
1---------------arp pachet ------------------------1
1 h/w type : 1 1
1 protocol type : 0x800 1
1 h/w address length : 6 bytes 1
1 protocol address length : 4 bytes 1
1 message type : 1(arp request) 1
1 source h/w address : h1 호스트 mac address 1
1 source ip address : h1 호슽 ip address 1
1 destination h/w address : 00-00-00-00-00-00 1
1 destination ip address : 원격지 호스트 ip addr. 1
1--------------------------------------------------1
1 crc 1
1--------------------------------------------------1
그러면 gateway(router) 는 이 frame 에 대한 응답으로 자신의 mac address 를 담은 arp 응답 패킷을 h1 호스트로 유니캐스팅하게 됩니다.
제 개인적인 생각으로는 위와 같이 브로드캐스팅된 메세지를 수신한 gateway(router) 는 이에 대한 응답은 내가 해야한다고 판단을 내려야 한다고 생각을 합니다.
따라서 판단을 내리기 위해서는 router 는 로컬 네트워크을 ip address 에 대한 데이터베이스를 가지고 있어야 하고 만약 위의 arp 요청 패킷의 destination ip address 가 로컬 네트워크의 것이 아니라고 판단이 되면 이 때는 gateway(router) 자신이 자신의 mac address 를 arp 응답 패킷에 담아서 h1 호스트에 유니캐스팅해 주게 된다고 생각이 됩니다.
따라서 gateway(router) 는 자신이 gateway 의 역할을하는 로컬 네트워크의 호스트들의 ip address 에 대한 데이터베이스를 가지고 있어야 하고 이 것은 각각의 호스트 h1, h2, h3, h4 가 인터넷 설정에서 위의 라우터를 gateway 로 설정함에 의해서 이러한 정보를 라우터에게 알려 준다고 생각이 됩니다.
제 생각이 맞는 것인지 아니면 틀린 것인지 확신이 서지 않네요.
장황하게 글을 너무 너무 많이 써서 정말 정말 죄송합니다. 하지만 꼭 알고 싶은 내용이라서 질문을 드립니다.
꼭 좀 답변을 부탁 드립니다.
감사드립니다.;   
           
이해하고 계신 내용의 대부분은 맞는 내용입니다.

먼저 그럼 자신의 컴퓨터에 설정된 환경을 보시기 바랍니다.

...
보시면 우선적으로 자신의 컴퓨터에 설정된 ip주소와 서브넷마스크, 그리고 게이트웨이를 설정하지요?
그러면 여기서 게이트웨이는 뭘까요?
서브넷 마스크라는 것을 뭘까요?
어플리케이션 계층으로부터 transport layer를 거쳐서 네트워크계층(3계층에 내려온 패킷까지는 가고자 하는 목적지주소가 설정되었다고 봅시다.

(즉 여기에서 http://www.abc.co.kr이라는 것이 어떤 주소인지를 알기위해서 dns query를
하는 과정은 이미 끝났다는 가정)
1. 소스ip주소, 목적지ip주소는 이미 설정이 되었다.


2. 데이타링크 계층의 주소를 알고싶다.

lan에서는 arp 프로토콜을 수행한다.

wan구간에서는 encapsulation의 과정를 한다.


여기에서 arp를 수행하기 전에 거치는 과정이 있다는 것입니다.

....
컴퓨터에 올라온 tcp/ip 프로토콜에서 처리한다고 보시면 됩니다.


바로 자신의 소스ip주소와 자신의 서브넷마스크간에 and연산을 합니다.

결과값이 나오겠지요????
목적지ip주소와 자신의 서브넷마스크와 and연산을 합니다 결과값은 ???? 가고자 하는 목적지 주소가 인접한 컴퓨터의 ip주소라면 결과값은 동일하다.

...
(의심이 가시면 컴퓨터간에 서브넷을 다르게 설정하여 서로간에 같은 네트워크가 아니도록 설정하시고 ping test를 해보세요 물리적으로 연결되었다고해서 꼭 응답이 올 것이라고는 생각치 말아주세요)
결과값이 서로다르다면 이때 게이트웨이로 설정된 ip주소의 mac주소를 arp 캐쉬에서 참조를 하여 있다면 mac주소를 라우터의 mac주소로 설정을 합니다.

...
캐쉬에 라우터 mac주소가 없다면 당연히 arp 브로드캐스트를 하는 것이죠......
질문1에 대한 답변]
이더넷방식의 lan이 가지는 근본적인 원리는 하나의 물리적인 회선에 하나의 논리적인 회선 즉 하나의 채널을 가진 회선상에서 여러대의 단말들이 서로간에 통신을 하기위해서는 어떻게 동작을 해야하나 해서 나온 기술이라는 것이죠....
(x.25, f/r, atm은 하나의 물리적인 회선에 여러개의 논리적인 회선 구성이 가능한 기술)
동일한 회선을 공유하여 사용된 기술이다보니 하나의 단말이 보내는 패킷은 모든 단말들이 다 받습니다.

..(허브에서는)
패킷은 유니캐스트도 있고 브로드캐스트 패킷도 있습니다.


그러면 둘간의 차이는 뭐냐????
유니캐스트 패킷도 연결된 모든 단말들은 다 받습니다만 lan카드상에서 즉 mac계층에서 자신의 mac주소와 도착된 패킷의 mac주소를 비교하여 틀리면 그동안 받았던 일부패킷을 버린다.

...
즉 단말(컴퓨터)상에 부하를 주지 않습니다.

...
브로드캐스트 패킷은 모든 단말들이 다 받습니다.

lan 카드상에서 주소가 ff:ff:ff:ff이므로 상위계층으로 올려줍니다.

..
상위계층에서는 자신의 ip주소와 도착된 패킷의 ip주소가 다르다면 패킷을 버리구요.
....
자신한테 온 패킷이면 상대방에게 응답을 줍니다.

....
여기서 상위계층이라는 것은 mac계층 프로토콜구조에 보시면 ethertype이라는 필드가 있습니다.


16진수로 800이면 ip, 806이면 arp, 805면 x.25 등등....
브로드캐스트 패킷이 많아지면 네트워크에 많은 부하를 줍니다.

...
컴퓨터단말들이나 서버에 불필요한 트래픽 유발이 많아진다는 것이죠.....
궁금중이 풀리셨나요????
이 처리동작을 보다 더 자세히 알고 싶다면 ohm사에서 나온 고속이더넷이란 책자를 한번 보시기 바랍니다.


항공대 윤종호 교수님이 저술한 책자입니다


출처:http://blog.naver.com/endfirst/20009517112

[출처] ARP 개념 정리|작성자 그냥


[출처] ARP 개념 정리|작성자 그냥