출처 : https://www.youtube.com/watch?v=LDsp-Xb168E&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=7

'따라하면서 배우는 IT' 강의를 보고 실습을 해보며 정리한 내용입니다.


이더넷 헤더 마지막 2byte에는 상위 계층이 IPV4가 오면 0x0800 /   ARP 프로토콜이 오면 0x0806 

 

3계층 에 있는 프로토콜 을 알아보자

 

Ipv4 프로토콜  :  4Byte , 10진수로 쓴다. ( vs MAC 주소는 6Byte 16진수로 쓴다. )

ARP 프로토콜  

ICMP 프로토콜

Ipv6 프로토콜

 

 

현재는 Ipv6 로 넘어가려는 과도기이고( 아직 한참 멀었다. )

사설IP 공인IP 와 서브넷 마스크를 통해 부족한 IP를 구분지어준다.


 

- 내가 직접 ARP 프로토콜을 요청할 일은 없지만 컴퓨터가 꾸준히 하고 있다.

- (보안) ARP Spoofing 은 여전히 위협적이다. 

 

지난 글에서 알아본 이더넷 프로토콜만 목적지 맥 주소가 먼저온다. ( 나머지들은 출발지가 먼저 )

 

Soruce Hardware Address : 출발지 MAC 주소 6byte

Source protocol Address : 출발지 IP 주소 4byte

Destination Hardware Address : 목적지 MAC 주소 6byte

Destination protocol Address : 목적이 IP 주소 4byte

 

도합 20 byte

 

 

Hareware type : 2byte : 우리가 볼 2계층 포로토콜은 이더넷 프로토콜만 온다고 생각하면 된다.( 깊게 파면 다른게 있다고 한다.)   -> 0 0 0 1 ( Hex )

 

protocol type : 2byte  : 마찬가지로 ipv4 밖에 없다. source protocol 의 타입을 적어준다.   -> 0 8 0 0 ( ipv4, Hex )

 

hard ware address length :  맥 주소 길이 ->  0 6 ( Hex )

protocol address length : ipv4 길이 -> 0 4 ( Hex )

 

opcode : 응답을 하는지 요청을 하는지 나타내는 코드 ( ARP 는 ip 주소를 주고 맥 주소를 요청하고 응답하는 프로토콜 )

물어보는거면 0 1  / 응답하는거면 0 2

 

 

 

A 랑 C랑 통신을 하고 싶은데 C의 IP 주소인 192.168.0.30 밖에 모르는 상태이다.

 

그래서 ARP 프로토콜을 보내게 되고 ARP 프로토콜은 3계층 프로토콜이니 2계층 프로토콜인 이더넷 프로토콜을 앞에 붙혀서 인캡슐레이션 하게 된다. 

 

아니 근데 목적지 맥주소를 알아내려고 하는건데 2 계층인 이더넷 헤더 붙힐때 목적지 맥주소 어떻게 쓰서 보내지?

그리고 ARP 프로토콜만 봐도 목적지 MAC 주소 담겨야되는데 모르는데 어떻게 쓰지?

 

 

같이 알아보자.

 

 

00 01 : 요청

출발지 맥주소 : 자기 mac 주소 ( aa aa aa aa aa aa ) 6byte

출발지 ip 주소 : 자기 ip 주소 ( c0 a8 00 0a ) = 192. 168.0.10 4byte

 

목적지 mac 주소 : 모르는깐 0  으로 비워둔다. ( 00 00 00 00 00 00 )

목적지 ip 주소 : 목적지 ip 주소 ( c0 a8 00 1e ) = 192.168.0.30 4byte

 

 

그 다음 이더넷 프로토콜을 알아보자.

 


 

목적지의 Mac 주소를 모르니깐 FF FF FF FF FF FF 로 채운다. 

=> 그런데 맥 주소를 전부 1로 채우면 broad cast 주소가 된다.

 

 

모르니깐 같은 네트워크 대역에 있는 모든 host 에 보낸다.

 

가운데 있는 장비는 스위치 ( 대표적인 2계층 장비 ) => 2계층 까지만 프로토콜을 확인한다. ( 디캡슐레이션 ) 

-> ARP는 안까본다. 이더넷 프로토콜만 까보고 목적지 Mac 주소가 어디인지 확인하고 broadcast니깐

 

같은 네트워크  대역의 모든 사람한테 보낸다.

 

 

그 다음 받은 host들이 디캡슐레이션하게 되고 이더넷을 까본다.

까보니깐 목적지 맥 주소가 FF:FF:FF:FF:FF:FF 니까 우선 나한테 온게 맞다. ( 브로드 캐스팅 )

 

그리고 다시 ARP 프로토콜도 까본다. ( 3계층 )

 

 

 

 

여기서 본인의 ip 주소와 목적지 ip 주소가 일치하는 애는 ARP 응답 프로토콜을 만들어서 준다.

 

일치 하지 않는 애들은 패킷을 버린다.

 

 

 

응답 ARP 프로토콜을 만들어서 보내보자.

 

 

opcode 는 00 02 . ( 응답 )

 

그리고 이더넷 프로토콜을 수정하는데, 출발지 mac 주소의 자신의 mac주소를 써서 준다.

그리고 요청 온 맥주소를 목적지 맥주소로 해서 이번에는 broadcast 말고 특정 ip 주소로 보내준다. ( 유니 캐스트 )

 

 

 

그럼 다시 

 

 

응답 받은 호스트가 ARP 프로토콜을 까보고 ARP 캐시 테이블을 등록한다.

 

" 30번 ip주소를 쓰는 컴퓨터의 mac 주소는 cc:cc:cc:cc:cc:cc 구나 "

 

이렇게 ARP 통신을 한번하고 나서 우리가 원하는 통신이 이뤄지게 된다.

 

cmd 에서 "arp -a" 명령어로 arp 캐시 테이블 확인 가능.

 

같은 네트워크 대역에서 나랑 통신했던 사람의 ip주소를 보여준다.

 

캐시테이블은 일정 시간이 지나면 없어지기 때문에 다시 알아오는 작업이 필요하다. 

( 수동으로 등록하면 영구적으로 사용할 수 있다. )

 


[ 실습 ]

 

ping 으로 같은 대역에 있는 192.168.75.134를 하고 wireshark로 봐보자.

 

필터로 arp 쳐보면 아래와 같이 나온다

info 칼럼에 who has ~~ ? 붙은거는 요청하는거고,

? 없는건 응답이 온거다.

 

 

 

타겟 MAC 주소는 모르니깐 00:00::00:00:00:00 으로 되있는것을 알 수 있다.

 

그 위에 덮는 ethernet을 보면

 

여기서 내 맥주소가 출발지로 나오고

목적지는 broadcast니깐 ff:ff:ff:ff:ff:ff 인것을 알 수 있다.

 

 

프레임 ( 이더넷의 패키징 용어, ip는 패킷 혹은 데이터그램, TCP는 세그먼트 )의 최소 단위는 60 바이트인데

이더넷 14 바이트 + ARP 는 28 바이트 라서

 

18 바이트가 부족하다.

 

그래서 padding 이라고 해서 000000000.. 으로 18바이트를 채우게 된다.

 

근데 위에서 내가 wireshark로 봤을때 처럼, padding이 안보이는 애가 있는데

 

얘는 padding 이 안붙는게 아니라 wireshark라는 프로그램이 패킷을 캡쳐하는 시점이 달라서 그렇다.

문제 없다.

 

프레임 길이가 최소단위인 60바이트 가 안되면 패딩이 붙는다.

 

+ Recent posts