Ethernet(이더넷)이란?
데이터 링크(2계층) 프로토콜 중 하나로 기기 고유의 MAC 주소를 갖고 상호간 데이터를 주고받을 수 있도록 만들어진 프로토콜이다.
1. Preamble & SFD (Start Frame Delimiter)
Preamble과 SFD는 헤더로 인식되지 않으며 단지 Frame의 시작을 알려주기 위한 정보이다. 크기는 항상 7byte(Preamble)와 1byte(SFC)로 고정되어 있다.
2. Ethernet Header
Destination Address : 목적지(송신) MAC 주소
Source Address : 출발지(수신)의 MAC 주소
* 다른 프로토콜 구조와 다르게 목적지 MAC 주소가 출발지 MAC 주소보다 앞에 있음
Length : 상위 계층에 사용된 프로토콜이 무엇인지에 대한 정보 (IP : 0x0800, ARP : 0x0806)
3. Data
상위 계층에서 전달받은 데이터 (46 byte – 1500 byte의 크기를 가질 수 있음)
* 만약 최소 전송 단위인 46byte를 넘기지 못하면 잘못 만들어졌다 생각해 버려지므로 padding을 통해 최소 단위를 채운다.
4. Tailer
Frame Check Sequence (CRC) : 프레임의 오류 확인 (Checksum과 비슷한 역할로 2계층에서만 존재)
ARP 프로토콜이란?
Address Resolution Protocol, 주소 결정 프로토콜
네트워크(3계층) 프로토콜 중 하나로 네트워크 상에서 IP 주소를 그에 대응하는 MAC 주소를 가져와준다. 2계층에서 물리적 주소를 사용해 통신하는 경우 목적지 주소를 알아와 캡슐화 하기 위한 목적으로 사용한다.
IP를 이용해 MAC 주소를 알아내기 위해 브로드캐스트 방신으로 연결되어 있는 모든 기기들에 Request 메시지를 보내고 ARP Request 메시지를 받은 장시들은 Request를 확인하고 자신의 IP와 같다면 Reply를 보낸다(자신과 IP가 다르다면 무시함). 만약 다른 네트워크에 Request를 보내야 한다면 게이트웨이로 데이터를 전달하기 위해 게이트웨이로 Request를 보낸다.
ARP 패킷
1. Hardware Type (2 byte)
> 사용 중인 물리 주소(MAC)나 데이터 링크 유형을 정의한다
> 사용 가능한 전체 물리 주소 유형 필드 값 (이더넷은 1)
Type | 하드웨어 타입 설명 | Type | 하드웨어 타입 설명 |
1 | Ethernet | 2 | Experimental Ethernet |
3 | Amateur Radio AX.25 | 4 | Proteon ProNET Token Ring |
5 | Chaos | 6 | IEEE 802.3 networks |
7 | ARCNET | 8 | Hyperchnnel |
9 | Lanstar | 10 | Autonet Short Address |
11 | LocalTalk | 12 | LocalNet (IBM PCNet or SYTEK LocalNet) |
15 | 프레임 릴레이 | 16 | ATM |
17 | HDLC | 18 | 광 채널 |
19 | ATM (Asynchronous Transfer Mode) | 20 | 직렬 연결 |
2. Protocol Type (2 byte)
> 상위 계층에서 어떤 유형의 프로토콜을 사용하는지 정의
> 일반적으로 IPv4를 사용한다 (0x0800)
3. Hardware Address Length (1 byte)
> 하드웨어 주소 값 길이
> 이더넷의 경우 6
4. Protocol Address Length (1 byte)
> 상위 계층 프로토콜의 주소 길이
> IPv4는 4
5. Opcode (2 byte)
> ARP의 구체적인 동작을 나타냄
값 | 동작 |
1 | ARP Request (요청) |
2 | ARP Reply (응답) |
3 | RARP Request |
4 | RARP Reply |
6. Sender Hardware Address (SHA) (6 byte)
> 출발지(송신)의 MAC 주소
7. Sender Protocol Address (4 byte)
> 출발지(송신)의 IP 주소
8. Target Hardware Address (THA) (6 byte)
> 목적지(수신)의 MAC 주소
> ARP 요청의 경우 브로드캐스트로 인해 0으로 설정 (FF:FF:FF:FF:FF:FF)
9. Target Protocol Address (4 byte)
> 목적지(수신)의 IP 주소
ARP 실습
실습 환경 : Windows 10 & Ubuntu 18.4 lts (어댑터에 브리지)
시작하기 전 arp 패킷을 확인 해 패킷이 없음을 확인한다.
* 만약 패킷이 있다면 -d 옵션을 통해 지워준다. 만약 이미 통신을 해본 관계라 arp 테이블에 있다면 처음에 브로드캐스트를 할 필요가 없어져서 해당 패킷을 잡지 못할 것이다.
sudo arp -d ip주소
1. Windows -> Ubuntu
> Windows cmd를 통해 Ubuntu에 ping 보내기
> 와이어샤크에서 잡은 arp 패킷
> Request 패킷 분석
▶ Destination은 목적지 MAC 주소인데 요청 시 브로드캐스트를 이용하므로 ff:ff:ff:ff:ff:ff가 된다
▶ Source는 출발지 MAC 주소로 호스트의 MAC 주소다
▶ Type을 통해 이 패킷이 ARP 프로토콜임을 알 수 있다
▶ 현재 이 패킷은 arp request의 정보를 갖고 있기 때문에 opcode가 1임을 확인할 수 있다
▶ Sender MAC/IP address에는 송신자 호스트의 MAC/IP가 들어간다
▶ Target IP는 ping을 보낼 때 알고 있기 때문에 IP에 대한 정보는 있지만 아직 MAC은 찾지 못해 정보가 없다
> Reply 패킷 분석
▶ Reply는 Ubuntu에서 Windows로 보내는 패킷이다
▶ 목적지가 호스트로 Windows의 MAC 주소임을 볼 수 있다
▶ 당연히 출발지는 게스트로 Ubuntu MAC 주소다
▶ 현재 이 패킷은 arp reply의 정보를 갖고 있기 때문에 opcode가 2임을 확인할 수 있다
▶ Sender MAC/IP address에는 송신자인 우분투의 MAC/IP가 들어간다
▶ Target MAC/IP address에는 수신자인 호스트의 MAC/IP가 들어간다
> ICMP 패킷 분석
> Request 패킷 분석
▶ Destination은 목적지 MAC으로 호스트에서 우분투에 요청을 하므로 우분투 MAC 주소다
▶ Source는 출발지 MAC으로 호스트의 MAC 주소다
▶ Source는 출발지 IP를 담고 있으므로 호스트 IP다
▶ Destination은 목적지 IP를 담고 있으므로 우분투의 IP다
[ Windows -> Ubuntu ICMP 패킷 ]
[ Windows -> Ubuntu ARP 패킷 ]
2. Ubuntu cmd를 통해 Windows에 ping 보내기
* 마찬가지로 arp 테이블을 비우고 실습하였다
> 와이어샤크에서 잡은 arp 패킷
> Request 패킷 분석
▶ Destination은 목적지 MAC 주소인데 요청 시 브로드캐스트를 이용하므로 ff:ff:ff:ff:ff:ff가 된다
▶ Source는 출발지 MAC 주소로 우분투의 MAC 주소다
▶ Type을 통해 이 패킷이 ARP 프로토콜임을 알 수 있다
▶ 현재 이 패킷은 arp request의 정보를 갖고 있기 때문에 opcode가 1임을 확인할 수 있다
▶ Sender MAC/IP address에는 송신자 우분투의 MAC/IP가 들어간다
▶ Target IP는 ping을 보낼 때 알고 있기 때문에 IP에 대한 정보는 있지만 아직 MAC은 찾지 못해 정보가 없다
> Reply 패킷 분석
▶ Reply는 Windows에서 Ubuntu로 보내는 패킷이다
▶ 목적지는 게스트로 우분투의 MAC 주소임을 볼 수 있다
▶ 당연히 출발지는 호스트 Windows의 MAC 주소다
▶ 현재 이 패킷은 arp reply의 정보를 갖고 있기 때문에 opcode가 2임을 확인할 수 있다
▶ Sender MAC/IP address에는 송신자인 우분투의 MAC/IP가 들어간다
▶ Target MAC/IP address에는 수신자인 호스트의 MAC/IP가 들어간다
* ICMP 패킷은 제대로 전달이 되지 않아 계속해 no response가 떠 생략하도록 하겠다
[ Ubuntu -> Windows ICMP 패킷 ]
[ Ubuntu -> Windows ARP 패킷 ]
'Study > Network' 카테고리의 다른 글
AWS (0) | 2020.11.26 |
---|---|
Google Cloud Platform 인스턴스 생성하기 (0) | 2020.11.09 |
[Network] TCP 프로토콜 개념 정리 (0) | 2020.09.20 |
[Network] ARP spoofing 개념 정리 (0) | 2020.09.20 |
[Network] 네트워크 아키텍쳐의 종류 (0) | 2020.09.14 |
댓글