본문 바로가기
학교공부/[컴퓨터 네트워크]

[컴퓨터 네트워크] - Network Layer_Generalized Forwarding

by 윈디개 2025. 6. 6.

 이전 정리글까지는 IPv4, IPv6의 datagram 포맷, IP 프로토콜 동작 방식, 그리고 routing과 forwarding에 대해서 알아보았다.

 

 이전에는 각 라우터가 forwarding을 할 때, forwarding table을 참고해 목적지 IP 주소에 따라 패킷을 forward는 방식인 destination-based forwarding을 중심으로 정리했다.  이번 정리글에서는 조금 더 일반화된 forwarding 방식을 정리해보려고 한다.


1. Flow table

 Generalized Forwarding은, 기존의 destination-based forwarding 방식과는 조금 다른 아이디어를 가지고 있다.

  • IP주소뿐만 아니라 다른 헤더 필드도 action을 결정할 수 있다.
  • forwarding 말고도 많은 action들 이루어진다. drop/copy/modify/log packet
  • 라우터의 flow table(많은 헤더 필드 value에 의해 결정됨)을 match+action 규칙으로 만든다.

 기존의 destination-based forwarding은 단순히 IP 주소가 match되면, forwarding하는 action을 취하는 방식이었다. 그렇지만, generalized forwarding은 match와 action을 조금더 확장해, match에 IP 주소 뿐아니라 여러 헤더의 field값을 조합하고, drop,forward,copy,modify 등 action을 다양화시킨 것이다.

 

  다음 그림을 살펴보자.

한 라우터에서의 flow table을 나타낸 것인데, flow table에 왼쪽의 파란 부분은 match, 초록 부분이 action 부분이다.

 

flow table의 첫째줄 부터 차례대로 살펴보면,

  1. src = *.*.*.* 이고 dest = 3.4.*.*로 match되면, 2번 ouput port로 forward(2)하라는 action을 취하라는 것이다.
  2. src = 1.2.*.*이고 dest = *.*.*.*로 match되면, 즉, 1.2로 시작하는 IP주소로부터 패킷이 온다면, drop이라는 action을 취하라는 것이다.
  3. src=10.1.2.3이고 dest=*.*.*.*로 match되면, controller로 보내라는 것이다.                                                                    이때, 10.0.0.0/8은 앞서 NAT의 local network의 private IP 주소였다. 따라서 이런 src로 부터 패킷이 오면 이상함을 감지하고 controller로 보내 처리해달라는 것이다.

2. OpenFlow

 OpenFlow는 flow table을 위한 표준이다. Open이기 때문에 모두에게 열려있는 표준이다. 다음 그림을 한 번 살펴보자.

 먼저, Match 부분부터 살펴보자.

  • Ingress Port : 어느 포트로 들어왔는지에 대한 필드이다.
  • Src MAC~VLANPri : 2계층의 MAC 주소, VLAN ID, VLAN 우선순위 등
  • IPSrc~IPToS : 3계층의 IP 주소 및 ToS
  • TCP/UDP Src Port, TCP/UDP Dst Port : 4계층의 포트 번호 정

그 다음 Action 부분을 살펴보자.

  1. 패킷을 output port로 Forward하라는 action이 명시되어 있다.
  2. 패킷을 Drop하라는 action이다.
  3. 헤더 필드를 Modify하라는 action이다. 주로, NAT에서 주소를 맵핑하고 바꿔줄 때 사용한다.
  4. Encasulate하고 controller로 Forward하라는 action이다.

마지막으로 Stats 부분인데, 이 부분은 Packet + byte counters로 이루어져 있다. 이 부분은 Drop 시킨 패킷이 얼마나 될지를 기록하기 위한 부분이다.

 

 다음 예시들을 그림과 함께 한 번 살펴보자.

먼저, Destination-based forwarding 방식인데, destination-based forwarding 방식은 IP datagram의 IP 주소만 확인하고 Forwarding action만을 취한다. 즉 위 그림은, IP Dst값이 51.6.0.8이라면, port 6로 forward하라는 flow table이다.

 

위 그림은 우리가 흔히 아는 firewall, 방화벽에 명시된 flow table이다. 위의 flow table은 TCP d-port가 22인 모든 datagram을 Drop시키라는 것이다. 또 TCP d-port 뿐 아니라 IP Src 부분의 IP 주소를 명시함으로써 해당 datagram은 forward하지 말고 drop하라는 경우의 flow table도 작성할 수 있다.

 

위는 2계층 기반 destination-based forwarding할 때 쓰이는 flow table이다. Ethernet 스위치 같은 친구들에 작성되어 있는데, MAC dst를 보고 forwarding하는 방식이다. 위 그림은 22:A7:23:11:E1:02라는 도착지 MAC 주소와 match되면 port3으로 forwarding하라는 것이다.

 

OpenFlow의 match+action에 대해서 간단히 정리하면,

  • Router:
    • match : longest destination IP prefix
    • action : forward out a link
  • Switch:
    • match : destination MAC address
    • action : forward or flood(flood는 Switch에서만 가능한 일이며, 목적지 정보를 모를 때, 데이터를 뿌리는 것이다.)
  • Firewall
    • match : IP addresses and TCP/UDP port numbers
    • action : permit or drop(=deny)
  • NAT
    • match : IP address and port
    • action : rewrite address and port

 

OpenFlow의 예시에 대해서도 살펴보자.

 사실, OpenFlow의 방식은, 라우터끼리 정보를 공유해서 forwarding table을 작성하는 기존의 destination-based forwarding 방식과 달리 중앙 controller server에서 전체 네트워크 상황을 파악한 뒤, Flow table을 작성해서 각 라우터에 전달한다. 위 그림에서도 OpenFlow controller 서버가 s1~s3의 라우터에 flow table을 제공해줘야 하는 것이다.

 

 그리고 이때, h5,h6로부터 전송된 datagram은 s1과 s2를 거쳐 h3,h4로 도착을 보장해야 되게 flow table을 작성해야 한다고 가정하자. 

 

 그럼, server는 이 조건을 보고 다으모가 같이 forward table을 만들어 각 라우터에 제공한다.

이렇게 되면, 가정한 상황에 맞게 datagram을 전달할 수 있게 된다.

 

위의 예시 상황과 같이 network 상황에 맞게 program을 할 수 있게 만드는 것과 더불어 프로그램을 패킷 단위로 처리가능하게 만드는 것이OpenFlow의 목적이다. 요즘은 P4라는 프로그래밍 언어로 program을 만들고 있다.