KR102151987B1 - 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법 및 이를 수행하는 프록시 서버 - Google Patents

프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법 및 이를 수행하는 프록시 서버 Download PDF

Info

Publication number
KR102151987B1
KR102151987B1 KR1020190105013A KR20190105013A KR102151987B1 KR 102151987 B1 KR102151987 B1 KR 102151987B1 KR 1020190105013 A KR1020190105013 A KR 1020190105013A KR 20190105013 A KR20190105013 A KR 20190105013A KR 102151987 B1 KR102151987 B1 KR 102151987B1
Authority
KR
South Korea
Prior art keywords
proxy server
host
network adapter
tcp
connection
Prior art date
Application number
KR1020190105013A
Other languages
English (en)
Other versions
KR20200061286A (ko
Inventor
박경수
문영균
이승언
Original Assignee
한국과학기술원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한국과학기술원 filed Critical 한국과학기술원
Publication of KR20200061286A publication Critical patent/KR20200061286A/ko
Application granted granted Critical
Publication of KR102151987B1 publication Critical patent/KR102151987B1/ko

Links

Images

Classifications

    • H04L67/2861
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/59Providing operational support to end devices by off-loading in the network or by emulation, e.g. when they are unavailable

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

본 발명은 프록시 서버 기능의 동적 이양하는 방법 및 프록시 서버에 관한 것으로, 더욱 상세하게는 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양할 수 있는 방법 및 이를 수행하는 프록시 서버에에 관한 것이다.
본 발명의 실시 형태에 따른 방법은, 호스트와 네트워크 어댑터를 갖는 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법으로서, 상기 네트워크 어댑터가 클라이언트로부터 수신된 메시지 중 일부를 상기 호스트로 전달하여 상기 호스트가 상기 클라이언트와 서버 사이의 데이터를 중계하는, 중계 단계; 상기 호스트가 상기 네트워크 어댑터에 스플라이싱 규칙(splicing rules)을 인스톨하는, 인스톨 단계; 및 상기 네트워크 어댑터가 상기 클라이언트와 서버 사이의 데이터를 중계하는, 이양 단계;를 포함한다.

Description

프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법 및 이를 수행하는 프록시 서버{METHOD FOR DYNAMIC OFFLOADING PROXY SERVER FUNCTION FROM HOST TO NETWORK ADAPTER IN PROXY SERVER AND PROXY SERVER PERFORMING THE SAME}
본 발명은 프록시 서버 기능의 동적 이양하는 방법 및 프록시 서버에 관한 것으로, 더욱 상세하게는 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양할 수 있는 방법 및 이를 수행하는 프록시 서버에 관한 것이다.
프록시(Proxy)는 컴퓨터 네트워크에서 다른 서버 상의 자원을 찾는 클라이언트로부터 요청을 받아 중계하는 서버를 말한다.
프록시(또는 프록시 서버)는 클라이언트가 필요한 서버로부터 파일, 연결, 웹 페이지 등과 같은 자원을 프록시에 요청하면 프록시는 클라이언트와의 사이에서 대신 통신을 수행한다. 프록시에는 클라이언트로부터 원격에 요청된 자원들이 캐시되어 임시로 저장되어 있다. 클라이언트는 자원 재요청 시 원격 서버에 접속할 필요 없이 프록시 내의 정보를 제공받을 수 있으며, 따라서 데이터 전송 시간과 외부 트래픽이 줄어들고 서버 측의 네트워크 병목 현상을 방지할 수 있다. 또한 프록시 측에서 위험이 예상되는 웹 콘텐츠 및 악성코드를 필터링 함으로써 클라이언트 측의 보안을 향상시킬 수 있다. 또한 익명의 사용자가 서버에 접근하는 것을 막고 외부 침입을 방지함으로써 방화벽 역할을 담당하기도 한다.
프록시는 실제 사용자의 로컬 컴퓨터에 상주할 수도 있고, 독립적인 서버로 존재할 수도 있으며, 인터넷 상에서 클라이언트와 서버 사이 어느 곳이든 놓여질 수 있다.
한편, TCP(Transmission Control Protocol)는 오늘날의 네트워크에서 가장 널리 사용되는 전송 계층 프로토콜이다. TCP는 두 종단 간 신뢰성 있는 연결을 보장하며, 네트워크 링크와 호스트의 트래픽 처리를 위한 연산 자원 등이 부족해지는 상황을 방지하도록 혼잡 제어(Congestion control) 및 흐름 제어(Flow control)를 지원한다. TCP는 IP(Internet Protocol)가 동작하는 어떤 네트워크의 호스트에서도 동작 가능하며, 네트워크 경로 내에 존재하는 네트워크 노드에서도 IP 기반 라우팅 이외의 어떤 특별한 추가적인 기능도 필요 없다는 장점이 있다.
이러한 이유로 TCP는 WAN 및 데이터센터 네트워크 등에서 양 종단 간 신뢰성 있는 데이터 전송을 위해 널리 사용되어 왔다. 실제로 최근 연구에 따르면 TCP 트래픽은 셀룰러 네트워크를 통해 전송되는 트래픽의 95% 이상을, 그리고 데이터센터 네트워크를 통해 전송되는 트래픽의 절반 이상을 차지하는 것으로 나타났다.
한편, 최근 네트워크 내에서 보안, 성능 향상의 목적으로 새로운 기능들을 추가하고자 하는 노력이 계속되고 있으며, 이로 인해 TCP 트래픽을 처리하는 미들박스 장비들이 크게 증가하고 있다.
이러한 미들박스 장비들 중 대표적인 종류로 TCP 기반의 프록시 서버(proxy server)가 있다. 프록시 서버는 애플리케이션 레벨 프로토콜을 기반으로 동작하는 게이트웨이, 부하 분산기, 그리고 웹/애플리케이션 방화벽 (Web Application Firewall) 등을 포함한다. 따라서 효율적인 TCP 기반의 프록시 서버의 구현이 네트워크 서비스 성능에 있어 중요한 요소가 되었다.
종래의 TCP 기반의 프록시 서버의 애플리케이션(들)의 경우, (1) TCP 스택 연산에 많은 CPU 사이클(cycle)을 소모하고, (2) 네트워크 스택 내 한 쪽 TCP 연결에 대한 소켓 버퍼(socket buffer)로부터 다른 쪽 TCP 연결에 대한 소켓 버퍼(socket buffer)로 데이터를 전달하기 위한 높은 비용과, (3) 네트워크 어댑터(또는, 네트워크 인터페이스 카드(NIC)) - 호스트(Host) 간 메모리 복사를 위한 많은 비용을 요구했다. 이로 인해 TCP 기반의 프록시 서버를 통해 높은 대역폭의 데이터를 전달하는 상황에서 성능이 크게 저하되는 문제가 발생했다.
종래에 커널(kernel) 네트워크 스택 내의 TCP 스택의 비효율적인 구현 문제를 해결하고자 2010년도 초반부터 인텔(Intel) 사에 의해 DPDK와 같은 고속 패킷 I/O 라이브러리들이 제안되고, mTCP, IX 등 효율적인 TCP 네트워크 스택 디자인들이 학계 및 산업계에서 개발되고 있는 실정이다. 이러한 솔루션들은 리눅스(Linux) 등 커널 네트워크 스택의 비효율적인 디자인으로 인해 TCP 연산에 많은 비용이 소요되는 문제를 해결하고자 했다.
하지만, 네트워크 트래픽이 지속적으로 증가하고 있는 상황에서 이러한 솔루션들이 모두 적용되더라도, 네트워크 스택에서 발생하는 최소한의 패킷 처리 비용은 피할 수 없으며, 더 나아가 네트워크 어댑터(NIC)에서 PCI 채널을 통해 호스트(Host)로, 또한 호스트(Host)에서 PCI 채널을 통해 다시 네트워크 어댑터(NIC)로 패킷이 전달되는 과정에서 지연 및 대역폭 성능에 근본적인 병목이 발생하게 된다.
본 출원의 발명자의 실험 결과에 따르면 현존하는 가장 높은 성능을 보여주는 TCP 스택 중 하나인 mTCP에서 다음과 같이 많은 수의 짧은 연결들을 동시에 처리하는 경우 TCP 기반의 프록시 서버로 인한 성능 한계를 보이고자 다음 조건에서 실험을 진행하였다.
(1) mTCP 기반의 프록시를 통해 총 16,000개의 동시 연결을 처리. (클라이언트 쪽 8,000개 동시 연결 - 서버 쪽 8,000개 동시 연결)
(2) 각 TCP 연결이 유지된 상태에서 지속적으로(persistently) 64B/1500B 패킷을 주고 받는 트랜잭션(transaction) 연산을 반복적으로 수행하는 경우에 대해 성능 측정.
상기 실험의 결과는 아래의 표 1과 같다.
64B 1500B
L7 proxy (mTCP) 2.1 Gbps 5.3 Gbps
L7 proxy with spilce() (mTCP) 2.3 Gbps 6.3 Gbps
L3 forward at host (DPDK) 7.3 Gbps 39.8 Gbps
L3 forward at NIC 28.8 Gbps 40.0 Gbps
상기 표 1은 단일 CPU 코어(single CPU core)에서 L7 프록싱(L7 proxying)과 L3 포워딩(L3 forwarding) 성능(performance)을 보여준다.
상기 표 1을 참조하면, 성능 측정 결과, 네트워크 어댑터(NIC)에서 곧바로 패킷 헤더를 업데이트해서 네트워크로 내보내는 경우(마지막 줄, L3 forward at NIC)와 비교해서 TCP 기반의 프록시 서버의 성능(첫 줄, L7 proxy (mTCP))이 약 1/10에 가까운 현저히 낮은 성능을 보였다.
한편, 도 1은 종래의 프록시 서버의 문제점을 설명하기 위한 도면이다.
도 1을 참조하면, 종래에 프록시 서버(Proxy)의 호스트(Host)가 프록시 기능을 수행하는 경우, 모든 패킷이 네트워크 어댑터(NIC)를 거쳐 호스트(Host)로 전달이 필요하였다. 따라서, 종래의 프록시 서버는, 성능 병목 및 많은 연산 및 메모리 자원을 소모하는 문제가 있다. 또한, 패킷을 네트워크 어댑터(NIC)에서 호스트(Host)로 전달 및 복사하고, 다시 소켓 버퍼(socket buffer)를 거쳐 복사하는 과정에서 성능 병목 및 지연 시간이 발생하는데, 이는 프록시 서버의 CPU 자원 및 메모리 자원을 상당히 소모하는 문제가 있다.
특허문헌 1과 특허문헌 2는 프록시 서버의 기능을 호스트(Host)에서 구동시키는 형태로 구현했으며, 이로 인해 네트워크 어댑터(NIC) - 호스트(Host)간 패킷 전달에 CPU 자원 및 메모리 대역폭이 소요되어 성능에 한계가 있다.
KR 10-0926230 B1 KR 10-1082786 B1
Wu, Zhong-Zhen, and Han-Chiang Chen. "Design and implementation of TCP/IP offload engine system over gigabit Ethernet." Computer Communications and Networks, 2006. ICCCN 2006. Proceedings. 15th International Conference on. IEEE, 2006. Sidler, David, et al. "Scalable 10Gbps TCP/IP stack architecture for reconfigurable hardware." Field-Programmable Custom Computing Machines (FCCM), 2015 IEEE 23rd Annual International Symposium on. IEEE, 2015.
본 발명의 해결하고자 하는 과제는 프록시 서버에서 TCP 기반의 프록시 서버의 기능을 호스트에서 네트워크 어댑터로 동적으로 이양할 수 있는 방법 및 이를 수행하는 프록시 서버를 제공한다.
다만, 본 발명의 목적은 상기 목적들로 한정되는 것이 아니며, 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위에서 다양하게 확장될 수 있을 것이다.
본 발명의 실시 형태에 따른 방법은, 호스트와 네트워크 어댑터를 갖는 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법으로서, 상기 네트워크 어댑터가 클라이언트로부터 수신된 메시지 중 일부를 상기 호스트로 전달하여 상기 호스트가 상기 클라이언트와 서버 사이의 데이터를 중계하는, 중계 단계; 상기 호스트가 상기 네트워크 어댑터에 스플라이싱 규칙(splicing rules)을 인스톨하는, 인스톨 단계; 및 상기 네트워크 어댑터가 상기 클라이언트와 서버 사이의 데이터를 중계하는, 이양 단계;를 포함한다.
본 발명의 실시 형태에 따른 프록시 서버에서 TCP 기반의 프록시 서버의 기능을 호스트에서 네트워크 어댑터로 동적으로 이양할 수 있는 방법 및 이를 수행하는 프록시 서버를 사용하면, 프록시 서버의 기능 중에 하나인 패킷 중계 기능이 네트워크 어댑터로 이양되어, 네트워크 어댑터에서 호스트로 패킷을 전달할 필요없이, 클라이언트-서버 간 패킷을 중계할 수 있다. 따라서, 프록시 서버의 성능 향상 및 비용 절감 가능한 이점이 있다.
또한, 기존 TCP 네트워킹 스택에서 요구하던 비싼 CPU 연산 자원 및 메모리 대역폭 자원을 소모하지 않고도 두 연결 간 프록시 서버 기능을 제공할 수 있는 이점이 있다.
또한, TCP 연결 관리가 호스트에서 네트워크 어댑터로 이양될 수 있기 때문에, DMA 작업 및 제어 패킷 처리를 위한 CPU 사이클을 절약하고 수명이 짧은 연결의 플로우 완료 시간을 줄일 수 있는 이점도 있다.
또한, 특허문헌 1 및 2에서 개시된 프록시 서버를 이용한 데이터 통신 및 컨텐츠 분배 등을 보다 효율적으로 수행할 수 있을 것으로 예상되는 이점이 있다.
또한, 기업 망, 데이터센터 망, 컨텐츠 전달 사업자망 등 다양한 네트워크에 적용하여 전송 성능 및 지연 성능 최적화에 활용 가능하다. 해당 네트워크에서 프록시 서버의 형태로 동작하는 다양한 네트워크 애플리케이션에 적용 가능하며, 예를 들어 Layer-4(L4) 트래픽 부하 분산기, Layer-7(L7) 트래픽 부하 분산기, 애플리케이션 전송 컨트롤러, 웹 방화벽 등이 있다. 이러한 네트워크 애플리케이션들은최근 네트워크 가상화 (NFV) 등의 기술 발전으로 인해 flexible 한 네트워크 구축에 핵심적인 기능으로 부상하고 있다. 따라서, 본 발명의 적용을 통해 효율적인 고성능 프록시 기반 미들박스 솔루션을 쉽게 개발할 수 있을 것으로 예상된다.
또한, 데이터센터, 컨텐츠 전송 네트워크 등 대용량의 트래픽을 처리해야 하는 네트워크에서 적용될 수 있다.
또한, 고성능, 저지연 전송 프로토콜을 위한 핵심 기술 중 하나로, AR/VR 및 대용량 컨텐츠 전송 등에 대한 요구 사항이 증가함에 따라 관련 시장이 점차 성장할 것으로 보이며 따라서 기술사업화 전망이 밝을 것으로 예상된다.
다만, 본 발명의 효과는 상기 효과들로 한정되는 것이 아니며, 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위에서 다양하게 확장될 수 있을 것이다.
도 1은 종래의 CPU 호스트(Host)에서 동작하는 프록시 서버의 문제점을 설명하기 위한 도면이다.
도 2는 본 발명의 실시 형태에 따른 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양할 수 있는 방법 및 이를 수행하는 프록시 서버를 설명하기 위한 도면이다.
도 3은 프록시 서버 기능을 프록시(Proxy)의 호스트에서 네트워크 어댑터(NIC)로 동적 이양하는 메커니즘을 설명하기 위한 도면이다.
도 4는 효율적인 체크섬 계산을 설명하기 위한 도면이다.
도 5는 호스트(500)에서 프록시 서버 기능의 이양 명령 패킷 (Offload Flag)이 네트워크 어댑터(700)의 파서(proto parser, 750)로 도착한 경우에, 연결 변환 테이블에 프록시 서버의 연결 변환 정보를 추가(AddToConnTable)하는 것을 설명하기 위한 도면이다.
도 6은 네트워크(Network)에서 도착한 패킷이 연결 변환 테이블에 속한 패킷인 경우에, 네트워크 어댑터(700)의 파서(750)가 연결 변환 정보에 따라 패킷을 변환하여 네트워크로 전달하는 방법을 설명하기 위한 도면이다..
도 7은 네트워크 어댑터(700)로 이양된 프록시 서버 기능의 연결 종료를 설명하기 위한 도면이다.
도 8은 서버(300)측 연결 혹은 클라이언트(100)측 연결을 재사용하는 것을 설명하기 위한 도면이다.
도 9는 본 발명의 실시 형태에 따른 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법 및 이를 수행하는 프록시 서버의 효과를 설명하기 위한 그래프이다.
도 10은 본 발명의 실시 형태에 따른 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법 및 이를 수행하는 프록시 서버의 다른 효과를 설명하기 위한 그래프이다.
도 11은 본 발명의 실시 형태에 따른 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법 및 이를 수행하는 프록시 서버의 또 다른 효과를 설명하기 위한 도면이다.
후술하는 본 발명에 대한 상세한 설명은, 본 발명이 실시될 수 있는 특정 실시 형태를 예시로서 도시하는 첨부 도면을 참조한다. 이들 실시 형태는 당업자가 본 발명을 실시할 수 있기에 충분하도록 상세히 설명된다. 본 발명의 다양한 실시 형태는 서로 다르지만 상호 배타적일 필요는 없음이 이해되어야 한다. 예를 들어, 여기에 기재되어 있는 특정 형상, 구조 및 특성은 일 실시 형태에 관련하여 본 발명의 정신 및 범위를 벗어나지 않으면서 다른 실시 형태로 구현될 수 있다. 또한, 각각의 개시된 실시 형태 내의 개별 구성요소의 위치 또는 배치는 본 발명의 정신 및 범위를 벗어나지 않으면서 변경될 수 있음이 이해되어야 한다. 따라서, 후술하는 상세한 설명은 한정적인 의미로서 취하려는 것이 아니며, 본 발명의 범위는, 적절하게 설명된다면, 그 청구항들이 주장하는 것과 균등한 모든 범위와 더불어 첨부된 청구항에 의해서만 한정된다. 도면에서 유사한 참조부호는 여러 측면에 걸쳐서 동일하거나 유사한 기능을 지칭한다.
본 발명은 프록시 서버를 이용하는 데이터 통신 및 컨텐츠 분배와 같은 응용 애플리케이션들보다는, 보다 근본적으로 프록시 서버를 효율적으로 구현하기 위한 새로운 기법을 제안한다. 구체적으로, 프록시 서버 기능을 호스트에서 네트워크 어댑터로 이양하는 방법, 프록시 서버 기능을 수행하는 네트워크 어댑터, 그리고 프록시 서버 연결의 종료 처리 등을 수행하는 방법을 제안한다.
본 발명은 종래의 클라이언트와 서버의 애플리케이션에만 적용되던 네트워크 어댑터로의 기능 이양을 통한 성능 향상이 프록시 서버의 애플리케이션에서도 가능하도록 새로운 방식을 제안한다. 더불어, 이러한 프록시 서버 기능의 네트워크 어댑터로의 기능 이양은 사용자 애플리케이션의 판단에 따라 동적으로 이뤄질 수 있으며, 종래에서는 제안되지 않은 새로운 기법으로서, HTTP 요청 메시지에 따라 로드를 분산하는 Layer-7(L7) 부하 분배기 등에서는 필수적인 기능일 수 있다.
이하, 첨부되는 도면을 참조하여 본 발명의 실시 형태에 따른 프록시 서버를 설명한다.
최근 네트워크에서 다양한 형태의 프록시 서버 및 애플리케이션들은 사용자 규칙에 따라 트래픽을 분배하거나 전달하는 등 다양한 역할을 수행하고 있다. 전통적으로 이더넷 혹은 IP(Internet Protocol) 수준의 헤더 정보만으로 트래픽 분배 및 전달하는 기존 애플리케이션들과는 다르게 최근 프록시 서버 기반 애플리케이션들은 TCP(Transmission Control Protocol) 등 전송 계층 프로토콜이나 HTTP(HyperText Transfer Protocol) 등 애플리케이션 계층 프로토콜의 정보에 기반하여 트래픽을 분배하고 전달하는 등 보다 복잡한 기능을 요구로 하고 있다. 따라서 이러한 프록시 서버들을 소프트웨어 기반으로 호스트에서 동작하도록 구현하는 형태로 널리 사용되었다.
최근에 따르면, 그러나, 호스트에서 동작하는 프록시 서버 등 네트워크 애플리케이션들의 성능 및 수행 능력은 의문을 가져왔다. 최근의 업적에 따르면, 멀티 코어(core) CPU 구조를 고려하여 효율적으로 병렬화된 프록시 서버 구현을 진행하더라도 성능에 한계가 있음이 확인되었다.
본 발명에서는, 프록시 서버를 구현하는 형태에 대한 최근의 연구를 다시 검토하고자 한다. 심사숙고한 실험들과 추론을 통해, 본 발명에서는 다음과 같은 관찰 결과를 만들 수 있다. 처음으로, 호스트에서 프록시 서버 기능이 동작하는 경우, 패킷을 네트워크 어댑터로부터 호스트로 전달하기 위해서는 필연적으로 DMA (Direct Memory Access) 오버헤드가 발생함을 발견하였다. 또한, 해당 패킷들의 헤더 및 연결 정보를 호스트에서 처리하는데 상당한 CPU 처리 비용이 소요됨을 발견하였다. 그리고, 프록시 서버를 통해 두 연결 간 전달되는 패킷들은 그 내용에 변경 사항이 없는 경우에도 네트워크 어댑터에서 소켓 버퍼를 통해 애플리케이션 버퍼에 복사되고, 또 다시 애플리케이션 버퍼에서 소켓 버퍼로 복사되어 네트워크 어댑터로 전달됨을 확인하였다.
본 발명은 프록시 서버의 성능을 향상시키기 위해, 위와 같은 불필요한 패킷 처리 및 메모리 복사 연산을 최소화하는 방법으로서, 네트워크 어댑터로의 프록시 서버 기능 이양 방식을 제안한다. 네트워크 어댑터에 도착한 패킷이 호스트에 전달되고, 호스트의 네트워크 스택에서 처리된 후 다시 네트워크 어댑터로 전달되어 나가는 과정에서 발생하는 불필요한 연산을 최소화하여, 네트워크 어댑터에서 정해진 규칙에 따라 패킷을 변환하여 네트워크로 전달하는 방식으로 효율적으로 구현한 경우, 기존 대비 6에서 7배(x)의 성능 향상을 달성할 수 있음을 확인하였다.
그러나, 프록시 서버 기능을 호스트에서 네트워크 어댑터로 이양하는 것은 실체적인 도전과제가 존재한다.
첫째로, 대부분의 프록시 서버(들)은 사용자 트래픽의 TCP(Transmission Control Protocol) 등 전송 계층 프로토콜이나 HTTP(HyperText Transfer Protocol) 등 애플리케이션 계층 프로토콜의 정보에 기반하여 트래픽을 분배한다. 따라서 연결 생성 및 처음 일정량의 패킷을 호스트에서 처리한 이후, 동적으로 포워딩 규칙(forwarding rule)을 네트워크 어댑터로 전달하는 메커니즘이 필요하다.
둘째로, 패킷을 변환하는 포워딩 규칙(forwarding rule)을 저장하기 위한 메모리 사용량과 포워딩 규칙(forwarding rule)에 따라 패킷을 변환하기 위한 연산을 최소화해야 한다. 네트워크 어댑터는 포워딩 규칙(forwarding rule) 등 상태 정보를 저장할 수 있는 한정적인 메모리 공간을 가지고 있으므로, 많은 수의 연결을 처리하기 위해서는 메모리 사용량의 최소화가 필수적이다. 더불어, 본 발명은 패킷을 처리할 수 있는 많은 수의 임베디드 코어(embedded core)들로 구성된 매니코어(many-core) 형태로 구현된 네트워크 어댑터를 고려하여 최적의 성능을 달성할 수 있는 디자인을 제안한다. 이를 위하여 도착한 패킷에 따라 적용할 포워딩 규칙(forwarding rule)을 찾고, 이에 따라 패킷을 변환하는 과정에서 발생하는 연산량을 최소화해야 한다.
셋째로, 해당 연결이 종료될 때 애플리케이션의 요구 사항에 따라 포워딩 규칙(forwarding rule)을 제거하는 방법이 필요하다. 예를 들어, 프록시로 연결된 두 연결 중 하나의 연결을 재사용해야 하는 경우 네트워크 어댑터는 연결 종료를 감지하고 두 연결 간 변환에 사용하던 포워딩 규칙(forwarding rule)을 제거한 후, 재사용할 연결을 호스트로 전달하는 메커니즘이 필요하다.
도 2는 본 발명의 실시 형태에 따른 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양할 수 있는 방법 및 이를 수행하는 프록시 서버를 설명하기 위한 도면이다.
본 발명의 실시 형태에 따른 프록시 서버(proxy)는 호스트(500)와 네트워크 어댑터(700)를 포함한다. 호스트(500)의 네트워크 스택은 유저 영역인 어플리케이션(Application), 커널 영역인 소켓(Sockets), TCP, IP, 이더넷(Ethernet)을 포함할 수 있다. 네트워크 어댑터(700)는 디바이스 영역에 포함되며, 실제로 패킷을 송수신한다.
본 발명의 실시 형태에 따른 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양할 수 있는 방법은, 네트워크 어댑터(700)가 클라이언트(100)로부터 수신된 메시지(예를 들어, 패킷) 중 일부를 프록시 서버의 호스트(500)로 전달하는 단계; 프록시 서버의 호스트(500)가 프록시 서버의 네트워크 어댑터(700)에 스플라이싱 규칙(splicing rules)을 인스톨하는 단계; 및 네트워크 어댑터(700)가 클라이언트(100)와 서버(300)를 중계하는 프록시 서버로 동작하는 단계;를 포함할 수 있다.
도 2를 참조하면, 클라이언트(client, 100)에서 입력되는 각 연결의 초기에는 일정량의 패킷(예를 들어, HTTP 요청)이 네트워크 어댑터(700)를 통해 호스트(500)에서 처리된다.
호스트(500)는 네트워크 어댑터(700)에 스플라이싱 규칙(splicing rules)을 설치하도록 제어한다. 네트워크 어댑터(700)에 스플라이싱 규칙이 설치되면, 클라이언트(100)측 연결과 서버(300)측 연결이 스플라이싱된다. 클라이언트(100)측 연결과 서버(300)측이 연결된 후, 호스트(500)에서 수행하는 패킷 중계 기능이 네트워크 어댑터(700)로 이양되어, 네트워크 어댑터(700)가 호스트(500)로 패킷 전달 필요없이, 네트워크 어댑터(700)가 클라이언트(100)-서버(300)간 패킷을 중계할 수 있으며, 이를 통해 프록시 서버의 성능 향상 및 비용 절감 가능하다.
도 2에 도시된 본 발명의 실시 형태에 따른 네트워크 어댑터(NIC, 700)는 네트워크 인터페이스 카드로서, 네트워크 포트, 패킷 처리 프로세서, 내부 메모리, 및 호스트 연결 인터페이스를 포함할 수 있다. 여기서, 네트워크 포트는 네트워크 케이블을 통해 외부 네트워크에 연결 가능한 모듈이다. 패킷 처리 프로세서는 네트워크 포트를 통해 도착한 패킷을 처리할 수 있는 프로세서이다. 내부 메모리는 네트워크 포트를 통해 네트워크 어댑터에 도착한 패킷 정보를 저장하거나, 패킷 처리 및 TCP 연산 처리 과정에서 필요한 메타데이터를 저장하기 위한 저장 장치이다. 예를 들어, SRAM, DRAM 등이 있다. 그리고, 호스트 연결 인터페이스는 호스트와의 통신을 위한 인터페이스이다. 예를 들어, PCI 등이 있다.
이하, 좀 더 구체적으로, 본 발명의 실시 형태에 따른 프록시 서버 기능을 프록시 서버(Proxy)의 호스트(500)에서 네트워크 어댑터(700)로 동적으로 이양(dynamic offload)하는 방법, 프록시 서버 기능을 수행하는 네트워크 어댑터(700)를 포함하는 프록시 서버(Proxy), 및 네트워크 어댑터의 프록시 서버 기능의 연결 종료 처리 등을 수행하는 방법을 첨부된 도면을 참조하여 상세히 설명하도록 한다.
1. 프록시 서버 기능을 프록시 서버의 호스트에서 네트워크 어댑터로 동적 이양하는 메커니즘
도 3은 프록시 서버 기능을 프록시(Proxy)의 호스트에서 네트워크 어댑터(NIC)로 동적 이양하는 메커니즘을 설명하기 위한 도면이다.
도 3을 참조하면, TCP 기반의 프록시 서버(Proxy)는, 예를 들어 종래의 방법으로, 클라이언트(100)쪽 연결과 서버(300)쪽 연결을 맺는다(① 단계).
상기 ① 단계는 프록시 서버(Proxy)의 애플리케이션(Application)에서 수행될 수 있다. 상기 ① 단계에서 프록시 서버(Proxy)는 메시지 라우팅 또는 부하 분산의 목적으로 클라이언트(100)측에서 보낸 메시지(예를 들어, HTTP 요청 메시지 헤더)를 기반으로 연결할 서버(300)를 결정할 수 있다.
상기 ① 단계에 있어서, 프록시 서버(Proxy)의 애플리케이션에서 클라이언트(100)와 서버(300)간의 두 연결을 생성한 후, 처음에는 프록시 모드(proxy mode; or Layer-7(L7) proxy mode)로 동작한다. 상기 프록시 모드에서는 프록시 서버(Proxy)의 호스트가 직접 클라이언트(100)측 연결과 서버(300)측 연결 사이에서 데이터를 중계할 수 있다. 상기 프록시 모드에서는 한 쪽 연결에서 받은 데이터를 수정하여 다른 쪽 연결로 전송하는 것이 가능하다. 예를 들어, 클라이언트(100)에서 도착한 HTTP 요청 메시지 헤더에서의 특정 필드를 필요에 따라 업데이트하여 서버(300)로 전달하는 것이 가능하다.
상기 ① 단계가 수행되는 중에, 즉, 프록시 서버(Proxy)가 클라이언트(100)측 연결과 서버(300)측 연결 간 데이터 중계를 진행하는 상황에서, 프록시 서버(Proxy)의 애플리케이션이 두 연결 간 데이터를 수정 없이 단순히 중계만 하는 경우, 스플라이스 모드(splice mode; or Layer-4 switch mode)로 전환한다(② 단계). 구체적으로, 다음의 1) 내지 4) 과정들을 통해 두 연결 간 데이터 중계를 위한 프록시 서버 기능을 프록시 서버의 호스트에서 네트워크 어댑터(NIC, 700)로 동적 이양시킬 수 있다.
1) 프록시 서버의 애플리케이션은 데이터 중계가 필요한 두 TCP 연결에 해당하는 소켓을 참조하여 두 TCP 연결 간의 프록시 서버 기능을 네트워크 어댑터로의 이양을 개시한다. 예를 들어, 프록시 서버의 애플리케이션이 두 TCP 연결에 해당하는 소켓들을 참조하여 스플라이싱 함수(nsplice())를 호출할 수 있다.
2) 상기 스플라이싱 함수가 호출되면, 프록시 서버의 네트워크 스택은 두 TCP 연결에 대한 정보를 네트워크 어댑터(700)로 전달한다. 여기서, 상기 호스트의 네트워크 스택에서 네트워크 어댑터(700)로 전달되는 TCP 연결 정보는 다음의 정보를 포함할 수 있다.
- 각 연결의 양 쪽 호스트(클라이언트 및 서버)가 사용하는 IP 주소와 TCP 포트 번호,
- 스플라이스 모드의 진입 시점에서의 TCP 순서 번호(TCP sequence number), TCP 응답 번호(TCP acknowledgement number)
한편, 프록시 서버의 네트워크 스택이 네트워크 어댑터(700)에 두 TCP 연결들의 정보를 전달하는 방법은, 네트워크 어댑터(700)와 프록시 서버의 네트워크 스택 간에 정해진 어떤 프로토콜을 사용해도 무관하다. 예를 들어, 프록시 서버의 호스트의 스택과 네트워크 어댑터(700)의 스택은 대부분의 경우 정상 패킷의 제어 정보를 피기백하여(piggybacking) 서로 통신할 수 있다. 이더넷 헤더에서 오프로드 유형을 사용되지 않는 EtherType 값으로 인코딩하고 이더넷과 IP 헤더 사이의 특수 헤더에 다른 정보와 함께 태그를 붙일 수 있다. 스플라이싱 오프로드의 경우, 호스트의 스택은 0x090C를 EtherType으로 사용하고, 시퀀스 및 ACK 번호 오프셋(각 4 바이트) 및 특수 헤더에 연결의 4 튜플(4-tuple)을 쓴다. 스플라이싱 오프로드 패킷이 네트워크 어댑터(700)의 스택으로 전달될 때, 일부 패킷이 동시에 호스트 스택으로 전달되면 경쟁 조건이 발생할 수 있다. 올바른 전달을 보장하기 위해, 호스트의 네트워크 스택은 일부 임계 시간(예 : 100ms)동안 연결 항목을 유지하고 이 기간 동안 다른 쪽에 패킷을 전달할 수 있다.
3) 네트워크 어댑터(700)에서 두 TCP 연결들의 TCP 연결 정보를 각각 수신하면, 두 TCP 연결을 중계할 수 있는 Layer-4(L4) 포워딩 규칙(forwarding rule)을 네트워크 어댑터(700)의 내부 메모리(SRAM 등)에 저장한다. 여기서, 상기 Layer-4(L4) 포워딩 규칙은, 2)에서 언급한 TCP 연결 정보를 기초로 하나의 TCP 연결에 도착한 패킷이 반대편 TCP 연결로 전달되기 위해서 도착한 패킷의 TCP/IP (Layer-4 까지의) 헤더를 어떻게 업데이트 해야하는지에 대한 규칙이다.
4) 네트워크 어댑터(700)로 해당 TCP 연결 정보들을 모두 전달한 뒤, 프록시 서버의 네트워크 스택 내의 TCP 연결 정보 테이블에서 해당 연결들의 정보를 제거한다.
상기 ② 단계가 수행된 이후에, 네트워크 어댑터(700)에 두 TCP 연결 중 어느 하나로부터 소정의 패킷이 수신되는 경우, 상기 Layer-4(L4) 포워딩 규칙에 따라 IP 주소, TCP 포트 번호, TCP 순서 번호(TCP sequence number), TCP 응답 번호(TCP acknowledge number), 및 TCP/IP 체크섬을 업데이트하여 중계한다(③ 단계).
상기 ③ 단계에서, 상기 TCP/IP 체크섬을 업데이트 하는 방식에는 다양한 방식들이 존재할 수 있으나, 본 발명의 실시 형태에서는 효율적인 체크섬 계산을 위해 다음 방식을 제안한다.
효율적인 체크섬 계산을 위해, 네트워크 어댑터(700)가, 도 4에 도시된 바와 같이, 두 TCP 연결(좌측, 우측) 간 데이터를 중계해주는 프록시 서버 기능을 이양 받아 동작하고 있다고 가정한다.
TCP/IP 체크섬을 계산하는 종래의 방식의 경우, 패킷의 전체 페이로드(payload)를 바이트/워드 단위로 일일이 연산하게 되므로, 필연적으로 네트워크 어댑터(700)의 많은 연산 자원을 낭비하게 된다. 본 발명의 실시 형태에서는, 효율적인 체크섬 계산을 위해, 상술한 가정 아래에서, 1의 보수에 대한 연산에 대한 교환 및 결합 법칙이 성립한다는 점을 이용하여 프록시 서버를 위한 효율적인 TCP/IP 체크섬 업데이트 방식(differential checksum update)을 제안한다.
앞서 언급한 TCP 기반의 프록시 서버의 스플라이스 모드에서는 패킷 내의 특정 필드들에 대해서만 업데이트가 이루어지게 되므로, 상기 ②의 3)에서 Layer-4 포워딩 규칙을 생성할 때, 네트워크 어댑터(700)는 각 포워딩 규칙에 대해 다음의 수학식 1로 체크섬 오프셋을 미리 계산하고 네트워크 어댑터(700)의 내부 메모리에 저장한다.
Figure 112019087971758-pat00001
상기 수학식 1은, 체크섬 오프셋 계산 알고리즘으로서, CSOIP는 IP 체크섬 오프셋을 의미하고, CSOTCP 는 TCP 체크섬 오프셋을 의미한다. IPS는 서버의 IP 주소, IPC는 클라이언트의 IP 주소, PS는 서버의 포트 번호, Pps는 프록시가 서버와 연결을 맺기 위해 사용한 포트 번호, PC는 클라이언트의 포트 번호, Ppc는 프록시가 클라이언트와 연결을 맺기 위해 사용한 포트 번호, ΔSEQ는 두 연결 간 TCP 순서 번호(TCP sequence number)의 차이, ΔACK는 두 연결 간 TCP 응답 번호(TCP acknowledge number)의 차이를 의미한다.
단, 상기 수학식 1에서, +, - 연산은 모두 1의 보수 기반의 연산이라고 가정한다.
이후, 상기 ③ 단계와 같이, 해당 TCP 연결들에 대한 패킷이 도착하는 경우, 앞서 계산한 체크섬 오프셋을 네트워크 어댑터(700)의 내부 메모리에서 읽어온 뒤, 다음의 수학식 2를 이용하여 해당 패킷의 TCP/IP 헤더 내 체크섬들을 업데이트 한다.
Figure 112019087971758-pat00002
상기 수학식 2는, 저장된 체크섬 오프셋을 이용한 프록시 서버의 체크섬 업데이트 알고리즘으로서, CSIP는 새로운 IP 체크섬을 의미하고, CSTCP는 새로운 TCP 체크섬을 의미한다.
다시, 도 3을 참조하면, 상기 ③ 단계가 수행된 후 해당 연결이 종료되는 경우, 네트워크 어댑터(700)는 상기 연결 종료를 탐지하여 연결 종료 시점에 상기 Layer-4(L4) 포워딩 규칙을 네트워크 어댑터(700)에서 제거한다(④ 단계).
상기 ④ 단계가 수행된 후, 제거된 TCP 연결 정보를 프록시 서버의 호스트에 알리면, 프록시 서버의 호스트에서 동작하는 네트워크 스택은 프록시로 연결된 두 TCP 연결이 종료되었음을 확인하고 필요한 기능을 수행한다(⑤ 단계).
상기 ⑤ 단계에서, 네트워크 어댑터(700)가 종료된 두 TCP 연결들에 대한 정보를 프록시 서버의 네트워크 스택에 전달하는 방법은 네트워크 어댑터(700)와 네트워크 스택 간에 정해진 어떤 프로토콜을 사용해도 무관하다. 예를 들어, 스플라이스 모드의 연결 종료를 보고하기 위해, 네트워크 어댑터(700)는 EtherType 0x090D로 연결 정보 및 트래픽 통계를 보유하는 특수 제어 패킷을 생성하여 호스트의 네트워크 스택으로 보낼 수 있다.
2. 프록시 서버 기능을 수행하는 네트워트 어댑터
2.1. 패킷 헤더를 검사하여 프록시 서버 규칙에 따라 변환하는 구현
도 5를 참조하면, 호스트(500)에서 프록시 서버 기능의 이양 명령 패킷 (Offload Flag)이 네트워크 어댑터(700)의 파서(proto parser, 750)로 도착한 경우에, 연결 변환 테이블에 프록시 서버의 연결 변환 정보를 추가(AddToConnTable)할 수 있다.
네트워크 어댑터(700)는 프록시 서버 기능의 이양 명령 패킷으로부터 다음 정보를 추출하여 연결 변환 테이블에 추가된 프록시 서버의 연결 변환 정보를 추가할 수 있다.
- 클라이언트(100)와 호스트(500) 간 연결에 대한 클라이언트(100)의 이더넷 주소
- 클라이언트(100)와 호스트(500) 간 연결에 대한 호스트(500)의 이더넷 주소
- 클라이언트(100)와 호스트(500) 간 연결에 대한 클라이언트(100)의 IP (Internet Protocol) 주소
- 클라이언트(100)와 호스트(500) 간 연결에 대한 호스트(500)의 IP (Internet Protocol) 주소
- 클라이언트(100)와 호스트(500) 간 연결에 대한 클라이언트(100)의 TCP 포트 번호
- 클라이언트(100)와 호스트(500) 간 연결에 대한 호스트(500)의 TCP 포트 번호
- 서버(300)와 호스트(500) 간 연결에 대한 서버(300)의 이더넷 주소
- 서버(300)와 호스트(500) 간 연결에 대한 호스트(500)의 이더넷 주소
- 서버(300)와 호스트(500) 간 연결에 대한 서버(300)의 IP (Internet Protocol) 주소
- 서버(300)와 호스트(500) 간 연결에 대한 호스트(500)의 IP (Internet Protocol) 주소
- 서버(300)와 호스트(500) 간 연결에 대한 서버(300)의 TCP 포트 번호
- 서버(300)와 호스트(500) 간 연결에 대한 호스트(500)의 TCP 포트 번호
네트워크 어댑터(700)는 프록시 서버 기능의 이양 명령 패킷으로부터 추출한 정보를 바탕으로 계산을 통해 연결 변환 테이블에 다음 정보들을 추가할 수 있다.
- {클라이언트(100)와 호스트(500) 간 연결에 대해 호스트(500)가 이양 전에 마지막으로 전송한 데이터에 대한 TCP 순서 번호 (TCP sequence number)}와 {서버(300)와 호스트(500) 간 연결에 대해 호스트(500)가 이양 전에 마지막으로 전송한 데이터에 대한 TCP 순서 번호 (TCP sequence number)} 간의 차이 값
- {클라이언트(100)와 호스트(500) 간 연결에 대해 호스트(500)에서 이양 전에 마지막으로 전송받은 데이터에 대한 TCP 응답 번호 (TCP acknowledge number)} 와 {서버(300)와 호스트(500) 간 연결에 대해 호스트(500)에서 이양 전에 마지막으로 전송받은 데이터에 대한 TCP 응답 번호 (TCP acknowledge number)} 간의 차이 값
도 6을 참조하면, 네트워크(Network)에서 도착한 패킷이 연결 변환 테이블에 속한 패킷인 경우에, 네트워크 어댑터(700)의 파서(750)가 연결 변환 정보에 따라 패킷을 변환하여 네트워크로 전달할 수 있다. 한편, 네트워크에서 도착한 패킷이 연결 변환 테이블에 속한 패킷이 아닌 경우에, 네트워크 어댑터(700)의 파서(750)가 호스트(500)로 패킷을 전달할 수 있다.
2.2. 패킷 헤더 내 체크섬을 업데이트하는 효율적인 알고리즘
L3-L4 중계 후에 TCP/IP 체크섬을 업데이트(TCP/IP checksum update after the L3-L4 translation)
기본적으로 IP 체크섬과 TCP 체크섬은 교환 법칙과 분배 법칙이 성립하는 1의 보수 가산기(1's complement adder)를 사용하여 각각 L3 헤더 또는 L4 헤더를 16-비트 단위로 나누어 그 값을 모두 더한 후 1의 보수(1's complement)를 취하는 방식으로 계산된다. 기존 프록시 서버에서는 프록시 서버를 거쳐서 나가는 매 패킷에 대하여 새로 L3 헤더 및 L4 헤더를 계산하였다.
본 발명의 실시 형태에서는 보다 적은 연산량으로 체크섬을 업데이트할 수 있는 효율적인 알고리즘을 제안한다.
2.2.1 IP 체크섬 업데이트 알고리즘
A. 프록시 서버 기능의 이양 명령 패킷이 도착하는 경우, 다음 값들을 16-비트 단위로 나누어 1의 보수 가산기로 합산하여 IP 체크섬 오프셋(IP checksum offset)을 계산할 수 있다.
1) 클라이언트(100)와 호스트(500) 간 연결에 대한 클라이언트(100)의 IP (Internet Protocol) 주소
2) 클라이언트(100)와 호스트(500) 간 연결에 대한 클라이언트(100)의 IP (Internet Protocol) 주소
3) 서버(300)와 호스트(500) 간 연결에 대한 서버(100)의 IP (Internet Protocol) 주소의 1의 보수 (1's complement)
4) 서버(300)와 호스트(500) 간 연결에 대한 서버(100)의 IP (Internet Protocol) 주소의 1의 보수 (1's complement)
B. 서버(300)에서 호스트(500)로 전달된 패킷이 도착하면, 해당 패킷의 IP 체크섬에 A.에서 계산한 IP 체크섬 오프셋 (IP checksum offset)을 1의 보수 가산기로 합산하여 업데이트할 수 있다.
C. 클라이언트(100)에서 호스트(500)로 전달된 패킷이 도착하면 해당 패킷의 IP 체크섬에 A.에서 계산한 IP 체크섬 오프셋 (IP checksum offset)의 1의 보수를 1의 보수 가산기로 합산하여 업데이트할 수 있다.
2.2.2 TCP 체크섬 업데이트 알고리즘
A. 프록시 서버 기능의 이양 명령 패킷이 도착하는 경우, 다음 값들을 16-비트 단위로 나누어 1의 보수 가산기로 합산하여 TCP 체크섬 오프셋(TCP checksum offset)을 계산할 수 있다.
1) 클라이언트(100)와 호스트(500) 간 연결에 대한 클라이언트(100)의 IP (Internet Protocol) 주소
2) 클라이언트(100)와 호스트(500) 간 연결에 대한 호스트(500)의 IP (Internet Protocol) 주소
3) 클라이언트(100)와 호스트(500) 간 연결에 대한 클라이언트(100)의 TCP 포트 번호
4) 클라이언트(100)와 호스트(500) 간 연결에 대한 호스트(500)의 TCP 포트 번호
5) 서버(300)와 호스트(500) 간 연결에 대한 서버(100)의 IP (Internet Protocol) 주소의 1의 보수 (1's complement)
6) 서버(300)와 호스트(500) 간 연결에 대한 호스트(500)의 IP (Internet Protocol) 주소의 1의 보수 (1's complement)
7) 서버(300)와 호스트(500) 간 연결에 대한 서버(100)의 IP (Internet Protocol) 주소의 1의 보수 (1's complement)
8) 서버(300)와 호스트(500) 간 연결에 대한 호스트(500)의 IP (Internet Protocol) 주소의 1의 보수 (1's complement)
9) {클라이언트(100)와 호스트(500) 간 연결에 대해 호스트(500)가 이양 전에 마지막으로 전송한 데이터에 대한 TCP 순서 번호 (TCP sequence number)}와 {서버(300)와 호스트(500) 간 연결에 대해 호스트(500)가 이양 전에 마지막으로 전송한 데이터에 대한 TCP 순서 번호 (TCP sequence number)} 간의 차이 값
10) {클라이언트(100)와 호스트(500) 간 연결에 대해 호스트(500)에서 이양 전에 마지막으로 전송받은 데이터에 대한 TCP 응답 번호(TCP acknowledge number)} 와 {서버(300)와 호스트(500) 간 연결에 대해 호스트(500)에서 이양 전에 마지막으로 전송받은 데이터에 대한 TCP 응답 번호(TCP acknowledge number)} 간의 차이 값
B. 서버(300)에서 호스트(500)로 전달된 패킷이 도착하면, 2.1 항의 패킷 변환 과정에서 TCP 순서 번호(TCP sequence number) 혹은 TCP 응답 번호(TCP acknowledgement number) 변환 시 랩 어라운드(wrap-around)의 발생 여부에 따라 다음 알고리즘 적용할 수 있다.
B.1. 랩 어라운드(wrap-around) 미발생 시, 해당 패킷의 IP 체크섬에 A에서 계산한 TCP 체크섬 오프셋 (TCP checksum offset)을 1의 보수 가산기로 합산한 결과값으로 업데이트할 수 있다.
B.2. 랩 어라운드(wrap-around) 발생 시, 해당 패킷의 IP 체크섬에 A에서 계산한 TCP 체크섬 오프셋 (TCP checksum offset)을 1의 보수 가산기로 합산한 결과값에서 1을 뺀 값으로 업데이트할 수 있다.
C. 클라이언트(100)에서 호스트(500)로 전달된 패킷이 도착하면, 2.1 항의 패킷 변환 과정에서 TCP 순서 번호(TCP sequence number) 혹은 TCP 응답 번호(TCP acknowledgement number) 변환 시 랩 어라운드(wrap-around) 의 발생 여부에 따라 다음 알고리즘 적용할 수 있다.
C.1. 랩 어라운드(wrap-around) 미발생 시, 해당 패킷의 IP 체크섬에 A에서 계산한 TCP 체크섬 오프셋(IP checksum offset)을 1의 보수 가산기로 합산한 결과값으로 업데이트할 수 있다.
C.2. 랩 어라운드(wrap-around) 발생 시, 해당 패킷의 IP 체크섬에 A에서 계산한 TCP 체크섬 오프셋(IP checksum offset)을 1의 보수 가산기로 합산한 결과값에서 1을 뺀 값으로 업데이트할 수 있다.
3. 네트워크 어댑터(700)로 이양된 프록시 서버 기능의 연결 종료 시 처리 메커니즘
3.1. 서버(300)-클라이언트(100) 간 직접 연결 종료
도 7을 참조하면, 프록시 서버로 동작하는 네트워크 어댑터(700)는, 양 쪽(클라이언트(100) 및 서버(300))에서 서로 FIN 패킷과 그에 대한 ACK 패킷을 모두 받으면, 2.1에서 언급한 연결 변환 테이블에서 프록시 서버의 연결 변환 정보를 제거할 수 있다.
3.2. 서버(300)측 연결 혹은 클라이언트(100)측 연결을 재사용
도 8을 참조하면, 프록시 서버의 양측 연결(클라이언트(100)측, 서버(300)측) 중 일 측 연결을 재사용 하는 경우에, 재사용할 연결 정보(connection state)는 네트워크 어댑터(700)에서 호스트(500)로 전달할 수 있다.
호스트(500)에서는 연결 정보(connection state)를 전달받아 다른 프록시 서버의 연결에 재사용 가능하다.
도 9는 본 발명의 실시 형태에 따른 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법 및 이를 수행하는 프록시 서버의 효과를 설명하기 위한 그래프이다.
도 9를 참조하면, 본 발명자의 개발 및 성능 측정 결과, 비슷한 가격의 네트워크 어댑터(프로그래머블 네트워크 어댑터)를 사용하여 기존 8-core CPU 성능 대비 약 4 ~ 7배의 전송 용량 향상을 달성함을 확인하였다.
도 10은 본 발명의 실시 형태에 따른 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법 및 이를 수행하는 프록시 서버의 다른 효과를 설명하기 위한 그래프이다.
도 10을 참조하면, 본 발명의 실시 형태가 적용된 AccelTCP 기반 서버의 경우, 기존 mTCP 기반 서버에 비해 약 1.8배에서 2.4배에 가까운 성능 향상을 달성함을 확인하였다.
도 11은 본 발명의 실시 형태에 따른 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법 및 이를 수행하는 프록시 서버의 또 다른 효과를 설명하기 위한 도면이다.
도 11은, 실제 Layer-7 부하 분산기 애플리케이션 (HAProxy) 에 적용 시 성능을 보여주는 테이블(Performance for SpecWeb2009-like workload)이다.
도 11을 참조하면, 본 발명의 실시 형태가 적용된 AccelTCP 기반 부하 분산기인 HAProxy-AccelTCP 는 기존 기술 기반 부하 분산기인 HAProxy-mTCP 대비 12배 이상의 성능 향상을 달성함을 확인하였다.
상기에서는 본 발명의 실시 형태들을 참조하여 설명하였지만, 해당 기술분야에서 통상의 지식을 가진 자는 하기의 특허청구범위에 기재된 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위 내에서 본 발명을 다양하게 수정 및 변경시킬 수 있음을 이해할 것이다.
100: 클라이언트
300: 서버
500: 호스트
700: 네트워크 어댑터

Claims (9)

  1. 호스트와 네트워크 어댑터를 갖는 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법에 있어서,
    상기 네트워크 어댑터가 클라이언트로부터 수신된 메시지 중 일부를 상기 호스트로 전달하여 상기 호스트가 상기 클라이언트와 서버 사이의 데이터를 중계하는, 중계 단계;
    상기 호스트가 상기 네트워크 어댑터에 스플라이싱 규칙(splicing rules)을 인스톨하는, 인스톨 단계; 및
    상기 네트워크 어댑터가 상기 클라이언트와 서버 사이의 데이터를 중계하는, 이양 단계;
    를 포함하는, 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법.
  2. 제 1 항에 있어서, 상기 인스톨 단계는,
    상기 호스트의 애플리케이션이 상기 클라이언트 측 연결과 상기 서버 측 연결 간의 데이터를 수정없이 중계하면, 스플라이스 모드로 전환하는, 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법.
  3. 제 1 항에 있어서, 상기 인스톨 단계는,
    상기 호스트의 애플리케이션이 상기 클라이언트와의 TCP 연결과 상기 서버와의 TCP 연결에 해당하는 소켓을 참조하여 스플라이스 함수를 호출하는 단계;
    상기 스플라이스 함수가 호출되면, 상기 클라이언트와의 TCP 연결에 대한 정보와 상기 서버와의 TCP 연결에 대한 정보를 상기 네트워크 어댑터로 전달하는 단계;
    상기 네트워크 어댑터에서 상기 클라이언트와의 TCP 연결에 대한 정보와 상기 서버와의 TCP 연결에 대한 정보를 수신하면, 상기 클라이언트와의 TCP 연결과 상기 서버와의 TCP 연결을 중계하기 위한 L4 포워딩 규칙을 상기 네트워크 어댑터의 내부 메모리에 저장하는 단계; 및
    상기 호스트 내의 TCP 연결 정보 테이블에서 상기 클라이언트와의 TCP 연결에 대한 정보와 상기 서버와의 TCP 연결에 대한 정보를 제거하는 단계;
    를 포함하는, 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법.
  4. 제 1 항에 있어서, 상기 이양 단계는,
    상기 네트워크 어댑터에 상기 클라이언트와의 TCP 연결과 상기 서버와의 TCP 연결 중 하나에 해당하는 패킷이 도착하는 경우, L4 포워딩 규칙에 따라 IP 주소, TCP 포트 번호, TCP 순서 번호(TCP sequence number), TCP 응답 번호(TCP acknowledge number), 및 TCP/IP 체크섬을 업데이트하여 중계하는, 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법.
  5. 제 4 항에 있어서,
    상기 TCP/IP 체크섬을 업데이트하는 방법은, 상기 네트워크 어댑터가 1의 보수에 대한 연산을 이용하여 상기 L4 포워딩 규칙에 대해 하기의 수학식으로 체크섬 오프셋을 미리 연산하고, 연산된 상기 체크섬 오프셋을 상기 네트워크 어댑터의 내부 메모리에 저장하는, 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법.
    <수학식>
    Figure 112019087971758-pat00003

  6. 제 5 항에 있어서,
    상기 클라이언트와의 TCP 연결과 상기 서버와의 TCP 연결 중 어느 하나에 대한 패킷이 상기 네트워크 어댑터로 수신되면, 상기 연산된 체크섬 오프셋을 상기 네트워크 어댑터의 내부 메모리에서 읽어온 뒤, 하기의 수학식으로 상기 수신된 패킷의 TCP/IP 헤더 내 체크섬들을 업데이트하는, 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법.
    <수학식>
    Figure 112019087971758-pat00004

  7. 제 1 항에 있어서,
    상기 이양 단계 후에, 상기 클라이언트와의 TCP 연결 또는 상기 서버와의 TCP 연결이 종료되면, 상기 네트워크 어댑터가 연결 종료를 탐지하여 상기 연결 종료 시점에 L4 포워딩 규칙을 상기 네트워크 어댑터에서 제거하는, 연결 종료 단계를 더 포함하는, 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법.
  8. 제 1 항에 있어서, 상기 이양 단계는,
    상기 호스트로부터 상기 프록시 서버 기능을 이양한다는 오프로드 패킷(Offload Flag)이 상기 네트워크 어댑터로 수신되면, 상기 프록시 서버의 연결 변환 정보를 연결 변환 테이블에 추가하는 단계;
    네트워크를 통해 수신된 패킷이 상기 연결 변환 테이블에 속한 패킷이면, 상기 연결 변환 정보에 따라 상기 패킷을 변환하여 상기 네트워크로 전달하는 단계; 및
    상기 네트워크를 통해 수신된 패킷이 상기 연결 변환 테이블에 속한 패킷이 아니면, 상기 호스트로 상기 패킷을 전달하는 단계;
    를 포함하는 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법.
  9. 제 1 항 내지 제 8 항 중 어느 한 항의 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법을 수행하는 프록시 서버.
KR1020190105013A 2018-11-23 2019-08-27 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법 및 이를 수행하는 프록시 서버 KR102151987B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR1020180146553 2018-11-23
KR20180146553 2018-11-23

Publications (2)

Publication Number Publication Date
KR20200061286A KR20200061286A (ko) 2020-06-02
KR102151987B1 true KR102151987B1 (ko) 2020-09-04

Family

ID=71090833

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190105013A KR102151987B1 (ko) 2018-11-23 2019-08-27 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법 및 이를 수행하는 프록시 서버

Country Status (1)

Country Link
KR (1) KR102151987B1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230126064A (ko) 2022-02-22 2023-08-29 (주) 엑스인터넷정보 근로현장을 위한 안전 및 환경 통합감시 시스템
KR20230125995A (ko) 2022-02-22 2023-08-29 (주) 엑스인터넷정보 컴퓨터 비전 및 IoT 센서 기반의 안전보호구 감시 시스템

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102605213B1 (ko) * 2021-12-10 2023-11-24 한국과학기술원 프로그래머블 nic를 활용한 http/2 기반 l7 로드 밸런서의 리퀘스트 처리 이양방법 및 이를 이용한 l7 로드 밸런서

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100938519B1 (ko) 2002-04-30 2010-01-25 마이크로소프트 코포레이션 네트워크 스택으로 오프로딩된 네트워크 스택 연결을 동기화 및 업로딩하는 방법, 공유 방법, 제어 방법, 및 컴퓨터 판독가능 매체
KR101577034B1 (ko) 2014-06-26 2015-12-14 (주)모두텍 소프트웨어적인 네트워크 부가기능 추가가 용이한 멀티코어 기반의 toe 시스템 및 그 제어 방법

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100926230B1 (ko) 2003-06-30 2009-11-09 주식회사 케이티 Ip망에서 프락시 서버를 이용한 데이터 통신방법
US7715321B2 (en) * 2007-01-30 2010-05-11 International Business Machines Corporation Network interface card transmission control protocol acceleration offload failure detection and recovery mechanism
KR100932968B1 (ko) * 2008-02-14 2009-12-21 부산대학교 산학협력단 호스트 컴퓨터의 개입이 없는 toe의 tcp 재전송 처리방법
KR101082786B1 (ko) 2008-10-06 2011-11-14 에스케이플래닛 주식회사 프록시 서버를 이용한 컨텐츠 분배 시스템 및 방법
KR101221045B1 (ko) * 2008-12-22 2013-01-10 한국전자통신연구원 패킷 처리 방법 및 이를 이용한 toe 장치

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100938519B1 (ko) 2002-04-30 2010-01-25 마이크로소프트 코포레이션 네트워크 스택으로 오프로딩된 네트워크 스택 연결을 동기화 및 업로딩하는 방법, 공유 방법, 제어 방법, 및 컴퓨터 판독가능 매체
KR101577034B1 (ko) 2014-06-26 2015-12-14 (주)모두텍 소프트웨어적인 네트워크 부가기능 추가가 용이한 멀티코어 기반의 toe 시스템 및 그 제어 방법

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230126064A (ko) 2022-02-22 2023-08-29 (주) 엑스인터넷정보 근로현장을 위한 안전 및 환경 통합감시 시스템
KR20230125995A (ko) 2022-02-22 2023-08-29 (주) 엑스인터넷정보 컴퓨터 비전 및 IoT 센서 기반의 안전보호구 감시 시스템

Also Published As

Publication number Publication date
KR20200061286A (ko) 2020-06-02

Similar Documents

Publication Publication Date Title
Moon et al. {AccelTCP}: Accelerating network applications with stateful {TCP} offloading
KR102151987B1 (ko) 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법 및 이를 수행하는 프록시 서버
CN107005532B (zh) 用于在通信网络中分流客户端和服务器之间的信息传送系统和方法
CN104283939B (zh) 用于灵活流卸载的装置、方法及非暂时性计算机可读媒体
US20130094501A1 (en) Processing data packets in performance enhancing proxy (pep) environment
US8316276B2 (en) Upper layer protocol (ULP) offloading for internet small computer system interface (ISCSI) without TCP offload engine (TOE)
CN101217493A (zh) 一种tcp数据包的传输方法
JP4398354B2 (ja) 中継システム
CN110609746B (zh) 管理网络系统的方法、设备和计算机可读介质
US20030229702A1 (en) Server network controller including packet forwarding and method therefor
US7831731B2 (en) Method and system for a modular transmission control protocol (TCP) rare-handoff design in a streams based transmission control protocol/internet protocol (TCP/IP) implementation
US9210094B1 (en) Utilization of TCP segmentation offload with jumbo and non-jumbo networks
US11902184B2 (en) Methods and systems for providing a virtualized NVMe over fabric service
US11949589B2 (en) Methods and systems for service state replication using original data packets
CA3158683A1 (en) Methods and systems for service distribution using data path state replication and intermediate device mapping
CN104782081B (zh) 用于转移套接字状态的系统以及用于迁移tcp连接的方法
US11593294B2 (en) Methods and systems for loosely coupled PCIe service proxy over an IP network
US11444882B2 (en) Methods for dynamically controlling transmission control protocol push functionality and devices thereof
US20150288763A1 (en) Remote asymmetric tcp connection offload over rdma
Papathanasiou et al. KNITS: switch-based connection hand-off
CN115988108A (zh) 数据包处理方法、系统、存储介质和电子设备
US20090271521A1 (en) Method and system for providing end-to-end content-based load balancing
CN113098925B (zh) 一种基于F-Stack和Nginx实现动态代理的方法和系统
Hayakawa et al. Prism: a proxy architecture for datacenter networks
CN107707546A (zh) 一种报文复制方法及支持报文复制功能的新型网络适配器

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant