글 작성자: Sowhat_93

아래 그림은 Ethernet 헤더부터 IP 헤더, 그리고 TCP/UDP 헤더를 통해 패킷의 응용을 어떻게 구별하는지를 그 과정을 보이고 있습니다.

 

 

 

L2: Ethernet Header

Ethernet 헤더는 Destination MAC Address(6B), Source MAC Address(6B) 그리고 Ethernet Type(2B)로 구성이 됩니다.

그리고 위 그림과 같이 Ethernet Type의 값이 1536(0x600) 보다 크면 RFC 894에서 규정한 DIX 2.0 포맷이 되구요(아래 그림 좌측과 같이). 만약 이 보다 작은 값이면 IEEE에서 정의한 SNAP 혹은 SAP 포맷이 됩니다. 현재 유선 Ethernet 망에서 다니는 대부분의 패킷은 이 DIX 2.0 이므로 일단 이 것만 아셔도 될 듯 합니다. 

여기서 이 Ethernet Type 필드는 L3 패킷의 타입을 명시하는 역할을 하는데요. Ethernet Type=0x0800이면 IPv4 패킷, 0x0806이면 ARP 패킷입니다. 그리고 마지막으로 0x8100이면 VLAN Tag(아래 그림의 우측)가 Ethernet 헤더와 L3 패킷 사이에 붙는다는 의미입니다. 이 VLAN Tag에는 VLAN ID와 QoS 정보를 담고 있는 802.1p(CoS라고도 부름)가 포함되어 있습니다. 그리고 VLAN Tag 이후에 L3 패킷 타입을 명시하기 위해 다시 Ethernet Type이 나오게 됩니다.

 

 

 

L3: IP Header

Ethernet Type=0x0800이면 IPv4(IP version 4) 패킷이죠. 현재 전 지구상에 다니는 대부분의 패킷 타입니다. IPv4 헤더는 통상적으로 20B(바이트)이구요. 여기에 Source IP Address(4B)나 Destination IP Address(4B)가 들어 있습니다. 이 중에 Protocol ID(2B)라는 필드가 있는데요. 이 필드가 L4 패킷 타입을 명시하는 역할을 합니다. 그래서 맨 위 그림과 같이 Protocol ID=1이면 ICMP(Ping이 ICMP 패킷의 일종이죠), 2이면 Multicast에서 사용되는 IGMP(여러분들 집에 IPTV에서 채널 바꾸면 셋톱박스에서 망으로 IGMPv2를 보냅니다), 6이면 TCP, 17이면 UDP입니다.

 

 

 

 

L4: TCP/UDP Header

이제 마지막으로 TCP/UDP 헤더입니다. UDP 헤더는 8B(바이트)이고 TCP 헤더는 20B이죠. 이 두 헤더 모두 첫 2B가 Source Port Number(SP)이고, 다음 2B가 Destination Port Number(DP)입니다. 여기서 SP에는 패킷 송신 단말에서 고른 random한 값이 들어가게 되구요(이를 Ephemeral Port라고 부릅니다.), DP에 바로 "응용 트래픽"의 타입이 들어가게 됩니다. HTTP는 TCP를 사용하는 응용이므로 TCP 헤더의 DP=80이고, VoIP에서 사용되는 SIP는 UDP 헤더의 DP=5060이구요.

 

 

이와 같은 방법으로 Ethernet 헤더의 "Ethernet Type", IP 헤더의 "Protocol ID", TCP/UDP 헤더의 "Destination Port Number"를 통해 최종 응용(Application)이 무엇인지 확인이 가능합니다.

 

출처 - https://www.netmanias.com/ko/post/blog/5372/ethernet-ip-ip-routing-network-protocol/packet-header-ethernet-ip-tcp-ip