'Network'에 해당되는 글 2건

  1. [정리] Ethernet Frame의 기능과 구조
  2. [정리] ARP의 기능과 패킷 구조

[정리] Ethernet Frame의 기능과 구조

Data link 계층은 상위 계층의 패킷을 전달받아 프레임 형태로 변환하여 Physical 계층에 전달한다. 이때, 이더넷 헤더에는 상위 계층의 프로토콜 정보와 src, dst MAC address 정보가 담긴다. 


[그림 1] Ethernet V2 구조


위 그림은 Ethernet V2 프레임의 구조를 나타낸 것으로 IEEE802.3의 경우 'Type'이 아닌 'Length' 정보가 담겨있고 DSAP, SSAP, Control 필드가 추가적으로 구성되어 있다.


Preamble : Physical 계층에서 전송된 비트패턴으로 송신자와 수신자의 동기를 맞추는데 사용된다. 7byte크기이며 항상 10101010 으로 설정된다. 패킷 캡쳐 범위 밖이다.


SOF(Start Of Frame) : 물리계층이 끝나고 이제부터는 Ethernet 헤더라고 알려주는 신호 역할을 한다. 1byte크기이며 항상 10101011로 설정된다. 패킷 캡쳐 범위 밖이다.


Destination address : 프레임을 수신할 MAC 주소정보가 담겨있다. 6byte


Source address : 프레임을 송신한 호스트의 MCA 주소가 담겨있다. 6byte


Type : 상위계층 프로토콜 정보를 담고있다. (IP=0800, ARP=0806) 2byte


Data : 상위계층으로 부터 전달받은 데이터가 담긴다. 최소 46byte 최대 1500byte 크기를 가질 수 있다.


PAD : Data가 46byte이하 크기로 설정되면 46byte크기를 임의로 채워주는 역할을 한다.


FCS : 프레임의 오류를 확인한다. 4byte크기를 가지며 패킷 캡쳐 범위 밖이다.


[그림 2] Ethernet 프레임 캡쳐


캡쳐를 해보면 [그림 1]의 캡쳐 범위 내 필드들을 모두 확인 할 수 있다. 또한, [그림 2]에는 Ethernet 헤더의 Type 이 IP(0800) 로 표기되어 있으므로 상위 계층의 프로토콜이 IP임을 알 수 있고 실제로 하단의 IP 탭이 존재한다. IP 탭을 열면 Protocol 필드에 TCP (6) 정보가 담겨있고 아래 탭에 TCP 탭이 존재한다. 이와 같이 프레임-세그먼트-패킷의 프로토콜 조합을 그림으로 도식화 하면 아래와 같은 형식으로 구성 된다.


[그림 3] 프로토콜 조합 도식화


[그림 4]는 ICMP 패킷을 캡쳐한 화면으로 Ethernet Type은 0800 Protocol은 1로 설정된 것을 확인 할 수 있다.


[그림 4] ICMP 패킷


[그림 5] ARP 패킷

[정리] ARP의 기능과 패킷 구조

데이터의 송수신 시 호스트의 IP 주소를 아는것만으로는 MAC 주소를 이용해 통신하는 네트워크 계층에서 프레임을 전달하는 것은 불가능하다. 


때문에 TCP/IP 통신에서 하드웨어 주소 즉, MAC 주소를 알기위해 ARP(Address Resolution Protocol)를 사용해 IP와 MAC 주소간의 동적 매핑을 제공한다. 동적 매핑이라 표현한 이유는 매핑이 자동으로 이뤄지며 변경이 발생하여도 시스템 관리자에 의해 재구성을 요하지 않은 채 변경이 적용되기 때문이다. ARP와 반대로 MAC 주소와 IP 주소간의 매핑을 제공하는 RARP (Rev-

erse Address Resolution Protocol)는 흔히 사용되지 않는다.


ARP는 IPv4에서만 사용되며 IPv6의 경우 ICMPv6에 포함되있는 NDP(Neighbor Discovery Protocol)를 사용한다. (이는 추후 포스팅 예정) 또한 ARP는 동일 브로드캐스트 도메인 내에서 브로드캐스트를 이용해 ARP Request을 송신한다


IANA에서 관리하고 할당하는 IP 주소와는 달리 MAC 주소는 NIC 제조업체에서 정해진 규칙에 의해 임의로 만들어진 주소를 장치 내부의 영구메모리에 저장된다. 48bit로 구성된 MAC주소 중 앞의 24bit는 제조업체의 식별 정보이며 나머지 24bit는 NIC의 시리얼 넘버이다. 

[그림 1] MAC 주소


송신자 A 10.0.0.1 수신자 B 10.0.0.2를 예로 들어 ARP 진행 과정을 설명하겠다. (http://www.example.com 으로 요청 시 실제 통신은 DNS 질의를 통해 알게된 10.0.0.1과 같은 32bit형식의 주소를 이용하여 진행하게 된다. 세부사항은 후에 포스팅 하겠다.) 


1. 송신자 A는 B의 MAC 주소를 알기 위해 ARP Request 패킷을 브로드캐스팅 한다. 이 요청은 동일 브로드캐스트 도메인 내에 존재하는 모든 호스트가 수신한다. (IPv4 또는 IPv6 프로토콜을 아예 운영하지 않는 시스템들도 포함하지만 VLAN이 지원되는 상황에서 다른 VLAN상의 시스템들은 포함하지 않는다.)


2. ARP Request 안에 지정된 IP주소를 가진 호스트 B만이 자신의 MAC 주소를 입력한 ARP Reply 패킷을 송신자 A에게 유니캐스트로 응답한다. 이때, 수신자 B는 송신자 A의 IP와 MAC주소를 알게되며 나중에 사용하기 위해 ARP 테이블에 기록한다. 이는 송신자가 곧 패킷을 전송할 것이며, 그 패킷을 수신한 수신자 B의 시스템또한 A에게 응답을 전송할 것이라는 가정하에 기초한 것이다. 수신자 B 이외에 다른 호스트는 ARP Request 패킷을 무시한다. 


3. ARP Reply를 수신한 A는 B에게 데이터그램을 전송 할 수 있다.


이렇게 IP에 대응되는 MAC 주소를 알게되면 곧바로 ARP 테이블에 저장하여 추후 통신에 이용하게 된다. ARP 테이블의 타임아웃 시간은 RFC1122에선 20분으로 규정되어 있지만 실제로는 해당 테이블이 참조될 때마다 타임아웃이 갱신되는 형식으로 구성되어 있다. ARP 패킷의 구조와 역할은 아래와 같다.


[그림 2] ARP 구조


Hardware Type : 하드웨어 주소의(MAC) 유형을 나타내며 이더넷 통신 시 값은 항상 1로 설정된다. 


Protocol Type : 매핑대상인 프로토콜 주소의 유형을 나타내며 IPv4의 경우 0x0800으로 설정된다.


Hardware Address Length : 하드웨어 주소의(MAC) 길이를 byte로 나타낸다. 이더넷 상에서 6으로 설정된다.


Protocol Address Length : 프로토콜 주소의 길이를 byte로 나타낸다. IPv4의 경우 4로 설정된다.


Operation Code : ARP의 구체적인 동작을 나타낸다. 


[표 1] Operation Code 값

동작

1

ARP Request

2

ARP Reply

3

RARP Request

4

RARP Reply


Source Hardware Address : 송신자의 MAC 주소


Source Protocol Address : 송신자의 IP 주소


Destination Hardware Address : 수신자의 MAC 주소, ARP Request 동작 시 0으로 설정된다. (이더넷 헤더의 Dst 주소가 ff:ff:ff:ff:ff:ff로 설정되어 브로드 캐스팅된다.) 


Destination Protocol Address : 수신자의 IP 주소


[그림 3] ARP 패킷 캡쳐 내용


[그림 3]은 ARP Request 패킷을 캡쳐한 내용으로 [그림 2]의 ARP 구조에 나온 항목들이 모두 표기되어 있음을 볼 수 있다. 패킷의 내용을 해석하면 프로토콜이 IP(0x0800)이고 이더넷상에서(1) 통신중인 송신자가 Operation code를 1로 설정함으로써 ARP Request 패킷을 송신하는 것을 알 수 있다.


[그림 4] Gratuitous ARP


패킷 캡처를 진행하다 보면 ARP 패킷 중 위와 같이 Gratuitous ARP 라는 패킷을 볼 수 있는데 해당 패킷의 내용을 확인해보면 [그림 5]처럼 송수신지의 IP 주소가 동일한 것을 볼 수 있다. 


[그림 5] Gratuitous ARP 값


Gratuitous ARP는 보통 PC의 부팅시에 NIC가 켜지면서 일어난다. Gratuitous ARP 송신 호스트는 응답을 받을것을 기대하지 않지만 응답을 수신한 경우 동일 브로드캐스트 도메인 안의 시스템이 잘못 구성되었음을 의미한다. 또한, MAC 주소가 변경된 호스트가 Gratuitous ARP 패킷을 송신함으로써 이를 수신한 호스트들의(ARP Request는 브로드캐스팅 된다는 점을 기억하자) ARP 테이블에 기록되 있던 송신자의 예전 MAC주소를 새로 갱신시키는 역할도 한다.