OSI 7Layer 계층중에서 2계층(MAC)와 3계층(IP주소)가 각 주소를 가지고 있고 통신을 할 때 목적지를 찾아 갈수 있도록 하지만 2계층과 3계층은 아무런 관계도 없다는 사실이다
실제로 통신은 IP 주소 기반으로 일어나고 MAC 주소는 상대방의 주소를 자동을 알아내 통신을 하게 되는데 이때 상대방의 MAC 주소를 알아내기 위해서 사용되는 프로토콜이 ARP이다!
데이터 통신을 위해 MAC주소와 IP주소 두개가 사용되는데 이 두개는 전혀 연관성이 없기 때문에 연계시켜주기 위한 매커니즘이 필요함
통신을 시도할 때 목적지의 IP주소는 미리 알고 있어야 캡슐화하는데 문제가 없지만 상대방의 MAC주소를 알 수 없어 2계층 캡슐화를 진행 할 수 없게 된다
상대방의 MAC 주소를 알아내기 위해서 ARP 브로드캐스르틀 이용 네트워크 전체에 상대방의 MAC 주소를 물어본다
ARP 브로드캐스트를 받은 목적지는 ARP 프로토콜을 이용해 자신의 MAC 주소를 응답
이전 작업이 완료되면 출발지, 목적지 둘 다 상대방에 대한 MAC주소를 학습 이후 패킷이 정상적으로 인캡슐레이션이 되어 상대방에 전달
정상적인 통신이 가능해짐
서버 A -> 서버 B로 ping을 보내려 할때 서버 A에서는 IP 주소까지는 캡슐화 가능, 하지만 MAC 주소를 몰라서 정상적인 패킷을 만들 수 없다
이때 서버 B의 MAC 주소를 알아내기위해서 ARP 요청을 네트워크에 브로드캐스트함
MAC주소는 출발지를 자기 자신의 MAC에서 도착지는 브로드캐스트 (FF-FF-FF-FF-FF-FF)로 채우고 ARP 프로토콜 필드의 전송자 MAC과 IP 주소에는 자신의 주소로, 대상자 IP주소 는 1.1.1.2로 정하고 대상자 MAC주소는 00-00-00-00-00-00로 채워 네트워크에 뿌리 된다
여기서 동일 네트워크에 있는 모든 단말에 프로토콜이 보내지고 각 단말은 그 프로토콜을 확인함
여기서 먼저 목적지 IP가 자신이 맞는지 확인하고 자신과 맞지 않으면 ARP 패킷을 버리게된다
만약 자신의 IP와 맞다면 ARP 요청을 처리한 후 그에 대한 응답을 보낸다
IP주소는 아는데 MAC주소를 모르기때문에 처음 ARP 통신을 할때에는 브로드캐스트 방식으로 통신을 한다고 했다 하지만, 통신이 정상적으로 끝난 이후에는 자신의 ARP 캐시테이블을 갱신하여 이제 상대방의 MAC주소를 알게되면 IP주소와 MAC주소 모든 정보를 알게된다
그렇데 된다면 이제는 브로드캐스트 방식의 통신이 아닌 유니캐스트 (1:1) 통신 방법으로 통신을 한다
ARP 패킷을 분석하기 위해서 필터링을 하여 패킷을 분석하기 위해 따왔다
ARP 통신은 IP주소는 알지만 MAC 주소는 모를때 쓰는 통신 방법이라고 하였다
ff ff ff ff ff ff -> 목적지 MAC Address
00 0c 29 da a2 33 -> Source MAC Address (출발지의 MAC Address)
08 06 -> 상위 프토코콜 타입 (ARP를 뜻함)
00 01 -> ARP DATA (Hardware Type: ethernet)
08 00 -> IPv4
06 -> MAC Address length (Hardware size)
04 -> IP Address length (Protocol size)
00 01 -> Opcode ARP Request (Opcode: ARP의 구체적인 동작을 나타낸다)
00 0c 29 da d2 33 -> Source MAC Address
ac 10 01 0a -> Source IP Address (공학용 계산기로 계산해보면 172.16.1.10이 나온다)
00 00 00 00 00 00 -> Target MAC Address (상대방의 MAC 주소를 모르기때문에 00-으로 표기)
ac 10 01 0f -> Target IP Address (공학용 계산기: 172.16.1.15)
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -> Padding
Padding은 상위 계층으로부터 데이터를 받거나 전달한 데이터를 말하는데 최소 46Btye가 안된경우 Padding영역으로 추가하여 46Byte로 만든다 Frame Header 부분을 보면 나오는데
Data는 최소 46Byte 지만 앞에 부분을 모두 포함하여 계산한다면 최소 60 Byte가 되는 것을 볼 수 있다 즉 최소 60byte를 만들기 위해서 Padding을 이용하여 채운다는 것이다
한칸당 ->1byte
한줄에 -> 16byte
Dst Add = 6byte
Src Add = 6byte
Type = 2byte
Data = 46 ~ 1500byte
총 60byte 에서 시작해야 하기 때문에 모두 합하면 60byte 가 되는 것이다