[NW] Use of ARP

Computer Networks 2013. 6. 21. 02:28

※ 질문/내용오류/공유할 내용이 있다면 jinkilee73@gmail.com으로 메일 주세요 :-)


그렇다. 이번 포스팅에서는 앞에서 예고했듯이 ARP의 쓰임에 대해서 이야기 해보고자 한다. ARP는 이전 포스팅에서 이야기 했을 때 모든 통신이 이루어지기 시작할 때 기본적으로 PC가 알고 있는 IP에 대한 MAC 주소를 알기 위해서 사용한다.

그런데 ARP라는 것이 비단 이 때만 쓰이는 것이 아니다. ARP를 응용해서 Inverse ARP, Reverse ARP 등등 여러가지 다른 형태의 ARP가 있는데 이것들의 쓰임을 알아보자.

Inverse ARP는 우선 생략하고자 한다. 이것은 전화 네트워크에서 나오는 개념으로 PC 네트워크를 논하고 있는 지금 이 블로그의 성격과 거리가 조금 있고 네트워크를 처음 접하는 초보자들의 눈높이를 고려했을 때 개념을 혼동시킬 확률이 많다고 생각되어 이 부분에 대한 논의는 잠시 접어두기로 하자. 혹은 영원히 접어둘지도 모른다.(알고 싶으시다면 위의 메일로 메일 주세요)

Reverse ARP 부터는 공부를 해볼 필요가 있다.



아래의 그림을 보면 DHCP 서버를 사용하고 있다는 정보를 볼 수 있을 것이다. DHCP 란 무엇일까?

Dynamic Host Configuration Protocol (http://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol)

The Dynamic Host Configuration Protocol (DHCP) is a network protocol used to configure devices that are connected to a network (known as hosts) so they can communicate on that network using the Internet Protocol (IP). It involves clients and a server operating in a client-server model.


위키피디아를 참고해보면 DHCP는 네트워크에 연결되어있는 장비들의 네트워크 프로토콜을 설정하는 프로토콜이라고 한다. 즉 요즘의 네트워크에서는 보통 IP를 네트워크 프로토콜로 사용하기 때문에 IP를 할당해주는 프로토콜 정도로 이해하면 된다.


DHCP를 사용하는 PC들 같은 경우 PC를 재부팅할 때마다 IP가 바뀔 가능성이 있다. 바로 DHCP 서버가 당신의 IP를 할당해주기 때문이다. 자, 여기서 조금만 생각해보면 내가 왜 Reverse ARP를 이야기 하다가 갑자기 DHCP를 이야기 하는지 알 수 있을 것이다. 바로 MAC 주소로부터 IP 주소를 얻어낼 때 Reverse ARP (RARP)를 사용한다. 말 그대로 ARP의 역방향 동작이다.


조금 구체적으로 알아보자. RARP는 다음과 같이 동작한다. 아래의 6대의 PC를 보자.


RARP 서버는 위의 테이블 정보를 가지고 있다. 즉, IP address와 MAC address가 이미 매핑되어있는 상태에서 서비스를 시작한다. 모든 PC가 꺼져있는 상태에서 PC0가 켜졌다. 부팅을 하는 과정에서 RARP 서버와의 통신이 일어난다.(참 빨리 통신이 일어난다. 우리도 모르는 사이에) 이 때 PC0의 MAC address가 RARP 요청 패킷을 통해 전송된다. (물론 RARP 요청 패킷은 broadcast를 통해 전송된다.) RARP 요청 패킷을 받아본 RARP 서버는 패킷에서 MAC address를 확인한 후 자기가 가지고 있는 테이블과 매핑되는 IP가 있는지 확인한다. 


000A.4181.2029?? 아!! 10.10.123.100이네~


이와 같이 작동한다는 것이다. 따라서 PC0는 정상적으로 자기에게 매핑되어있는 IP인 10.10.123.100을 갖게 된다. 이것이 바로 RARP 서버의 동작원리이며 DHCP가 나오기 이전부터 사용되던 방식이다. 이 방식은 지금은 잘 사용되지 않는다. RARP는 subnet mask나 사용가능한 라우터 또는 그 이외의 것들을 지원하지 않는다고 한다. 그래서 나온 것이 DHCP이다.


이제 DHCP를 논해보자. DHCP와 RARP의 가장 큰 차이점은 이것이다. RARP는 IP와 MAC이 매핑되어있는 반면, DHCP는 단지 MAC address와 그 DHCP 서버가 할당해줄 수 있는 IP 대역(예를 들어, 10.10.0.2 - 10.10.0.254까지)을 가지고 있을 뿐이다. IP 대역에 맞는 것이라면 어떤 IP도 할당해줄 수 있다는 것이다. 


여기서 잠깐, 아까 예를 들었을 때 10.10.0.2 - 10.10.0.254까지라고 이야기 했는데 그렇다면 10.10.0.0, 10.10.0.1, 10.10.0.255는 안 쓴다는 것인가? 정답은 거의 대부분 못 쓴다이다. 대역을 나타내는 IP가 10.10.0.0이고 10.10.0.1과 같이 보통 1로 끝나는 IP들은 게이트웨이일 가능성이 매우 높다. 마지막으로 10.10.0.255는 알지? broadcasting 용이다. 해당 LAN에 있는 모든 PC가 255로 끝나는 IP로부터 패킷을 받으면 이 패킷은 broadcasting 패킷이므로 CPU는 적어도 자기가 읽어볼 필요가 있는 패킷이라는 것은 안다.


다시 DHCP 이야기로 돌아오자. 


DHCP는 네 가지 과정으로 이루어져 있다.

1. DHCP DISCOVER

2. DHCP OFFER

3. DHCP REQUEST 

4. DHCP ACK


DHCP DISCOVER

DHCP 서버를 찾는 과정이다. 어떻게 찾을까? 전수 조사이다. Broadcast 메세지를 보낸다. 이 때는 IP가 할당이 되어있지 않다. 그렇지만 같은 네트워크이고 LAN 카드가 제데로 되어있기 때문에 2계층에서 통신이 가능하다. 즉 MAC address로 통신이 가능하다. 아무튼 이 과정에서 모두에게 "DHCP 서버는 응답하라. 나 IP좀 줘라" 라는 메세지를 보낸다. 아래의 패킷이 DHCP DISCOVER 패킷이다.



3계층 IP부분을 보면 자기의 IP는 모르기 때문에 0.0.0.0으로 세팅되어 있고 목적지도 255.255.255.255.로 세팅되어있다. 2계층 부분은 이전에 설명한 그대로 작동한다.


DHCP OFFER

DHCP 서버가 클라이언트 PC에게 응답을 하는 것이다. 이 때 DHCP 서버는 사용가능한 IP를 할당해서 클라이언트에게 응답을 한다. 이 과정에서는 IP 계층의 출발지와 도착지 주소가 채워진다.



위의 그림 중에서 가장 상위 계층 프로토콜인 Bootstrap 프로토콜이 클라이언트에게 요청할 IP를 가지고 있다. Bootstrap 프로토콜에 대해서는 다음에 설명할 기회가 있다면 하도록 하겠다. (안 할 수도 있어용)


DHCP REQUEST

이제 우리가 기다리던? REQUEST 하는 부분이 나온다. 이 부분은 정확히 말하면 요청하는 부분이라기 보다는 확인시켜주는 과정이랄까? DHCP DISCOVER에서 broadcast 주소(255.255.255.255)를 사용하여 요청을 보내면 그 LAN에 속해있는 모든 PC가 DISCOVER 패킷을 받게 된다. 이 말인 즉, DHCP OFFER 패킷을 한 개 이상 받을 수도 있다는 것이다. 여러 개의 DPCP OFFER를 받았으면 그 중에 한 개만 선택해야 하지 않나? 바로 그 과정이다. 여러 개의 DHCP OFFER 패킷을 받았을 경우 그 중 하나를 선택해서 "나 이 서버가 준 IP를 쓸께"라고 얘기 해주는 것이다. 


DHCP ACK

DHCP ACK 패킷은 한 마디로 서버가 클라이언트에게 "그래 알겠어"라고 대답을 해주는 과정일 뿐이다. 중요한 것은 이 ACK 패킷 이후의 패킷은 아까전의 DHCP DISCOVER 패킷에서처럼 출발지가 0.0.0.0이 아니라는 것이다. 이 이후의 패킷들은 할당받은 IP 주소를 사용하여 통신을 한다는 것이다.


위의 과정을 전체적으로 한번 봐보자.



위의 그림에서 98 104 105 106번 패킷이 위에서 설명한 4가지의 패킷이다. 그리고 107번을 봐라. 출발지 IP가 제대로 세팅되어있다는 것이 확인되었다.


이 정도면 어느 정도 ARP가 언제 어떻게 적용되고 있는 프로토콜인지 잘 설명한 것 같다. 따라서 이제 IP 얻는 방법도 알아냈으니 IP를 공부해보자. 나도 정리를 조금 하고 포스팅을 해야하기 때문에 다음 포스팅은 조금 시간이 걸릴지도 모른다.

'Computer Networks' 카테고리의 다른 글

[NW] Internet Protocol in detail  (0) 2013.07.28
[NW] Internet Protocol  (0) 2013.07.26
[NW] Use of ARP  (0) 2013.06.21
[NW] Packet structure  (0) 2013.06.16
[NW] Address Resolution Protocol (ARP)  (2) 2013.06.13
[NW] Media Access Control (MAC)  (0) 2013.06.13
Posted by 빛나유

댓글을 달아 주세요

※ 질문/내용오류/공유할 내용이 있다면 jinkilee73@gmail.com으로 메일 주세요 :-)


패킷 구조를 다시 공부해보자. 이전에도 말했듯이 아직은 패킷의 구조라는 것은 패킷이 만들어지는 순서이고 상위계층부터 하위계층 순으로 만들어진다고만 알아두기로 했다. 아래의 패킷을 다시 보자.



여기에 보이는 Address Resolution Protocol, Ethernet 등등에 있는 내용을 헤더라고 한다. 헤더란 각 계층이 포함하는 내용을 담고 있는 요약본이라고 보면 된다. 예를 들어, Address Resolution Protocol이 속해있는 계층에 포함되어있는 내용은 Hardware type, Protocol Type 등등이 있는 것이다. 즉, 통신에 필요한 정보들이 있는 것이다. 


위의 패킷에서는 ARP Header는 Hardware type 등등의 정보를 가지고 있는 것이다. 또한 그 아래 계층의 Ethernet Header는 Destination Source 등등의 정보를 가지고 있는 것이다.


이번 포스팅에서는 각각의 헤더가 의미하는 바를 알아보자.


그러기 전에 다시 한번 현재 상황을 정리해보자. PC A(192.168.6.2, 00:50:56:ea:ae:9d)가 PC B(192.168.6.128, 00:0c:29:8c:71:fa)와 통신을 하려고 하는데 A는 B의 IP만 알고 MAC은 모르는 상태이다. 따라서 A의 MAC을 알기 위해서 아래와 같은 패킷을 보내는데 그것을 우리는 ARP request 패킷이라고 하고 이 패킷은 하나의 LAN에 있는 모든 PC들에게 전달된다.



그러면 위의 패킷을 만드는 과정을 보자. 우선은 ARP header를 만들어야겠지? 만들어보자. 출발지 IP와 MAC은 자기가 알고 있으니까 집어 넣고 Target의 IP는 아니까 집어넣고 MAC은 모르니까 비워두고 Hardware type과 나머지 부분은 아래의 내용을 먼저 보고 만들어 보자.


Hardware type : LAN 카드의 종류이다. Ethernet LAN 카드냐? Token Ring LAN 카드냐? 그거다.

Protocol Type : 하드웨어가 사용할 주소(MAC)과 매칭되는 상위계층 주소가 무엇인지 묻는다. 요즘은 대부분 TCP/IP모델을 사용하기 때문에 거의 모든 MAC 주소는 IP 주소와 매핑된다고 봐도 무방하다.

Hardware Size : Hardware address(MAC) size를 바이트 단위로 표시한 것이다.

Protocol Size : 하드웨어가 사용할 주소와 매칭되는 상위층 주소의 사이즈를 묻는다. IP는 32 bit 즉 4바이트이기 때문에 대부분의 여러분이 캡쳐한 패킷은 이 부분이 4일 것이다.

Opcode : Operation code 이다. 이 부분은 request이냐 reply이냐 등등을 묻는 곳이다. 


각 필드가 무엇을 의미하는지 이제 알았으니까 다시 설명을 해보자. A와 B는 당연히 Ethernet 기반으로 통신을 하고 있기 때문에(LAN카드가 Ethernet LAN카드) Ethernet을 의미하는 값 1이 기록되어있다. 그리고 해당 Ethernet LAN 카드의 주소인 MAC 주소를 IP라는 상위 계층의 주소와 매핑할 것이기 때문에 IP를 의미하는 0x0800을 적는다. MAC과 IP 주소의 사이즈는 각각 6과 4이므로 그렇게 적는다. 자 이렇게 해서 하나의 ARP header 정보를 다 만들었다. 아래와 같다.


그 다음에 만들 과정은 Ethernet header이다. Ethernet header에는 무슨 정보가 있는지 확인해보자.


Destination : 도착지의 MAC 주소이다.

Source : 출발지의 MAC 주소이다.

Type : 바로 아래의 계층에 어떤 프로토콜이 만들어졌는지 알려준다. 0x8086은 ARP를 의미하는 숫자이며 일반적으로는 TCP/IP 를 많이 사용하므로 IP에 해당하는 0x0800이라는 값이 대부분이다.


Source와 Type은 그냥 보면 이해가 간다. 그런데 Destination이 조금 이상하다. ff:ff:ff:ff:ff:ff 라고 되어있다. 이건 뭐지? 정상적인 MAC 주소가 이렇게 f로 쭉 이어질수 있나? 이것은 broadcast를 의미하는 MAC주소이다. 무슨 말이냐?! Broadcast는 그 LAN에 속해있는 모든 PC에게 보내는 것이다. 그렇다고 n개의 pc가 있으면 똑같은 패킷을 n개 만들어서 보내나? 그렇지 않다. 그냥 ff:ff:ff:ff:ff:ff라고 찍어서 보내면 그거는 모든 PC가 받아보라고 이야기 하는 것과 같은 것이다. 그래서 broadcast MAC 주소는 무조건 ff:ff:ff:ff:ff:ff라고 약속되어 있다. Ethernet header도 다 만들었다. 그러면 이렇게 된다.



마지막 Frame 부분은 보지 않겠다. 워낙 low level이기도 하고 아직 공부를 못 했다.-_- 만들었다고 치자 그러면 아래와 같이 되겠지?



자 이렇게 패킷을 하나 만들어보니까 이제 어떤 기분이 드는가? PC A가 말하기를, "나는 이제 패킷을 보내야지~ 그니까 패킷을 만들어보자. 우선 내가 보낼 정보 ARP header를 만들고... 뚝딱!! 출발지 목적지 적어줘야겠군 Ethernet header 만들고... 뚝딱!! Frame header 만들고... 뚝딱!! 됐다!! 이제 보내자!!" 하면 위에 만들어 놓은 최종 결과물(11.......01001001010100101110.....001000101011001...01011)을 보내는 것이다. 디지털 회선에서는 이와 같이 0과 1의 조합으로 보내는 것이다.


이것을 받는 목적지는 Frame header부터 역순으로 header의 내용을 하나하나 까보는 것이다.

사실 이것이 계층 구조의 핵심 내용이다. 이 말이 이해가 안 가도 좋다. 앞으로 주구장창 이야기할 것이기 때문이다.


자 여기서 ARP에 대해서 하나 물어보자. ARP는 언제 쓰냐? MAC 주소를 알아올 때 쓴다!! 맞다!! 그런데 ARP도 여러 가지 종류가 있다. Reverse ARP, Inverse ARP, DHCP ARP 등등 여러 가지 변형이 있다. 각각의 변형에 대해서 알아보고 어떤 때 쓰이는 것인지 알아보자. 그리고 대망의 TCP/IP를 들어갈 생각이다.

'Computer Networks' 카테고리의 다른 글

[NW] Internet Protocol  (0) 2013.07.26
[NW] Use of ARP  (0) 2013.06.21
[NW] Packet structure  (0) 2013.06.16
[NW] Address Resolution Protocol (ARP)  (2) 2013.06.13
[NW] Media Access Control (MAC)  (0) 2013.06.13
[NW] Hub, Bridge and Switch  (2) 2013.06.11
Posted by 빛나유

댓글을 달아 주세요

※ 질문/내용오류/공유할 내용이 있다면 jinkilee73@gmail.com으로 메일 주세요 :-)


이전에 사용한 그림을 재사용해보자.



6대가 연결되어있는 PC와 그 PC들의 주요 정보들이다. 각각의 PC들은 IP address와 MAC address를 가지고 있다. IP address도 PC를 구별할 identifier 같은 것이고 MAC address도 identifier이다. 이 6대의 PC는 기본적으로 LAN 카드를 가지고 있기 때문에 전원만 키면 PC는 자신의 MAC address를 알수 있다. 


하나의 PC가 통신을 하려면 상대방 주소와 내 주소를 알아야 한다. 그렇지? 그런데 우리가 가지고 있는 주소 Type은 두 가지가 있다. MAC address와 IP address이다. 


가령, PC0이 PC3에게 데이터를 보내려고 한다. 이 때 PC0이 아는 것은 다음과 같다.


PC0의 IP : 10.10.123.100

PC0의 MAC : 000A.4181.2029

PC3의 IP : 10.10.123.300


PC3의 MAC address은 아직 모르고 있다. PC0이 통신을 하려면 반드시 PC3의 MAC address도 알아야 하는데, 이 때 사용하는 것이 ARP이다. PC3의 MAC address를 알기 위해서 PC0은 자기가 속한 LAN에 있는 모든 PC들에게 이렇게 물어본다. 


"너희들중에 IP address가 10.10.123.300 인 PC의 MAC address가 뭐냐?"


(지금부터는 패킷이라는 단어를 데이터 대신 사용하겠다.) 이렇게 모든 PC들에게 패킷을 보내는 것을 broadcasting이라고 한다. 이렇게 물어봤을 때 모든 LAN에 있는 PC들은 자신의 IP와 비교해보고 자기의 IP가 맞을 경우에만 응답을 한다. PC3이 해당 패킷을 받았을 때는 자신의 IP와 맞으니까 응답을 하는 것이다. 


"내 IP가 10.10.123.300인데, 내 MAC은 0007.EC7C.C8B9야"


이 과정을 실제 패킷을 보고 이야기해보자. 이 과정부터 우리는 실제로 오가는 데이터를 보면서 로컬 네트워크에서 어떻게 패킷을 주고 받으며 통신을 하는지 확인해볼 것이다.


하나의 LAN에 있는 두 대의 PC A와 B가 있다.



PC A가 B와 통신을 시도하려고 한다. 이 상황에서 PC A는 자신의 IP와 MAC은 전부 알고 있다. A는 B의 IP만 알고 MAC은 모른다. A와 B가 통신을 하려면 A는 B의 MAC도 알아야 한다. 이 때 ARP가 쓰이는 것이다. 즉 본격적인 통신이 이루어지기 전에 사전에 이루어져야하는 작업 정도로 볼 수 있다. 아래의 패킷은 A가 보내는 ARP request이다.



패킷 캡쳐 프로그램을 이용하여 두 PC간의 ARP 패킷을 캡쳐한 것이다. 빨간 네모 안을 보면 목적지(B)의 MAC을 모르기 때문에 0으로 채워져있다. 이전의 포스팅에서 말했듯이 위와 같은 ARP request 패킷들은 broadcast 패킷이다. A가 속해있는 네트워크에 있는 모든 PC에 위와 같은 패킷이 전송된다. 각 PC들은 Target IP address 필드를 확인한 후 자신의 IP가 아니면 무조건 버린다. B가 해당 패킷을 받았을 경우, Target IP address가 자신의 IP와 일치한다는 것을 확인하고 자기의 MAC 주소를 A에게 알려준다. 아래와 같다.



ARP request 패킷과 달리 출발지와 목적지에 해당하는 MAC과 IP가 바뀌어있음을 알 수 있다. 당연하다. 위의 패킷은 B가 A에게 보내는 것이니까. 자 이제는 A와 B가 모두 서로의 IP와 MAC을 알고 있다. 따라서 통신이 가능하다. 


갑자기 캡쳐된 패킷들을 보니까 뭔말인가 싶을 것이다. 패킷에 대한 소개를 잠깐 하도록 하자. 패킷은 여러개의 헤더로 구성되어있다. 위의 패킷들은 3개의 헤더가 있다. Frame 113, Ethernet Ⅱ, Address Resolution Protocol 이 그것이다. 각각의 헤더는 계층 구조로 되어있다. 여기서 계층 구조란 무엇인가? 사실 계층 구조를 이해하려면 많은 공부가 필요하다. 간단하게 말하면 단계 같은 것이다. 공장에서 물건을 만들 때 물건을 만들어내는 순서가 다 있겠찌? 마찬가지로 보낼 패킷을 만드는데도 순서가 있다. 가장 먼저 만드는 패킷을 상위 계층 패킷이라고 하고 가장 나중에 만들어지는 패킷을 하위계층 패킷이라고 한다.


나중에 배우게 될 TCP/IP 계층 구조는 지금 현재의 통신과정에서 항상 쓰이는 구조이다. 그 구조에는 TCP라는 계층과 IP라는 계층이 있을 것이다. 아무튼 지금까지 계층구조는 그냥 이렇게 생각하자. 패킷이 만들어지는 순서이며 항상 상위 계층부터 만들어지고 하위계층이 나중에 만들어진다.


다음 포스팅에서는 Ethernet Ⅱ부분과 ARP 부분을 조금 더 자세하게 공부해보자.

'Computer Networks' 카테고리의 다른 글

[NW] Use of ARP  (0) 2013.06.21
[NW] Packet structure  (0) 2013.06.16
[NW] Address Resolution Protocol (ARP)  (2) 2013.06.13
[NW] Media Access Control (MAC)  (0) 2013.06.13
[NW] Hub, Bridge and Switch  (2) 2013.06.11
[NW] CSMA/CD  (0) 2013.06.07
Posted by 빛나유

댓글을 달아 주세요

  1. 유희 2013.10.14 10:38  댓글주소  수정/삭제  댓글쓰기

    왜 pc0이 pc3의 맥주소를 모르는 상태가 생기나요?
    그렇다면 어떻게 ip주소만 알죠?

    • 빛나유 2013.10.19 11:27 신고  댓글주소  수정/삭제

      안녕하세요!! 14일에 질문 올리셨는데.. 조금 늦게 확인해서 죄송합니다..ㅠㅠ 요즘 또 이 블로그에 새롭게 올리고 싶은 분야가 있는데 그 분야에 대해서 계속 공부하느라 몇일간 블로그를 신경 못 썼네요ㅠㅠ 관심갖고 읽어 주셔서 감사합니다!!(꾸벅ㅋㅋ)

      질문에 대한 제 생각은 그래요.. 사실은 우리가 통신을 할 때 IP는 항상 알고 있지 않나요? 한가지 예를 들어보면, 같은 네트워크 내에 있는 어떤 PC에 원격접속을 한다고 했을때 저희는 실행창에 mstsc 치고 IP주소를 입력하죠? 즉 우리는 이미 explicit 하게 IP를 알고 있는 상황이죠.. 그런데 위에 포스팅해놨듯이 통신하기 위해서는 MAC 주소도 알아야 하는데... 그걸 모르고 있는 상황인거죠.. 이 문제를 해결하기 위해 ARP 서버가 역할을 하고 있는 것일테고요.

      제가 질문의 의도를 잘 파악하고 있는지는 모르겠습니다 ㅠㅠ 혹시라도 무언가 의도가 엇나갔다면 다시 질문해주세요ㅋㅋㅋ 답변드릴게요!!