KR100890996B1 - 분산 흐름 제어 시스템 - Google Patents

분산 흐름 제어 시스템 Download PDF

Info

Publication number
KR100890996B1
KR100890996B1 KR1020060134124A KR20060134124A KR100890996B1 KR 100890996 B1 KR100890996 B1 KR 100890996B1 KR 1020060134124 A KR1020060134124 A KR 1020060134124A KR 20060134124 A KR20060134124 A KR 20060134124A KR 100890996 B1 KR100890996 B1 KR 100890996B1
Authority
KR
South Korea
Prior art keywords
server
packet
client
sequence
network
Prior art date
Application number
KR1020060134124A
Other languages
English (en)
Other versions
KR20080060054A (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 주식회사 타오네트웍스
Priority to KR1020060134124A priority Critical patent/KR100890996B1/ko
Publication of KR20080060054A publication Critical patent/KR20080060054A/ko
Application granted granted Critical
Publication of KR100890996B1 publication Critical patent/KR100890996B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

본 발명은 클라이언트로부터 수신한 서비스 요청에는 수신 서버가 대응하고 클라이언트로의 응답에는 송신 서버가 전담하며, 수신 서버는 이후의 데이터 송신에 관여하지 않도록 함으로써, 부하를 분산 시켜 병목 현상을 해소하고 효율적인 데이터 통신이 가능하며, 송신 서버와 클라이언트 간의 네트워크를 구성하는 회선의 상태와, 클라이언트와 수신 서버 간의 네트워크를 구성하는 회선의 연결 상태에 따라, 데이터 통신의 송수신을 효율적으로 조정함으로써 클라이언트와 송신 서버 및 수신 서버간에 보다 안정적인 데이터 송수신이 가능한 서비스 처리 시스템을 제공한다.
부하 분산, 클라이언트, 송신 서버, 수신 서버, 병목 현상, 플로우 컨트롤

Description

분산 흐름 제어 시스템{DISTRIBUTED FLOW CONTROL SYSTEM}
도 1은 본 발명의 일례에 따른 서비스 처리 시스템의 구성도를 도시한 도면이다.
도 2a는 본 발명에 따른 서비스 요청 패킷을 도시한 도면이다.
도 2b는 본 발명에 따른 제 1 정보를 도시한 도면이다.
도 2c는 본 발명에 따른 응답 패킷을 도시한 도면이다.
도 3은 본 발명의 또 다른 일례에 따른 분산 흐름 제어 시스템의 구성도를 도시한 도면이다.
도 4a는 본 발명에 따른 제 1 시퀀스 맵을 도시한 도면이다.
도 4b는 본 발명에 따른 제 2 시퀀스 맵을 도시한 도면이다.
도 5a는 본 발명에 따른 제 1 시퀀스 맵의 일례를 도시한 도면이다.
도 5b는 본 발명에 따른 제 2 시퀀스 맵의 일례를 도시한 도면이다.
도 5c는 본 발명에 따른 제 2 시퀀스 맵의 또 다른 일례를 도시한 도면이다.
도 5d는 본 발명에 따른 제 2 시퀀스 맵의 또 다른 일례를 도시한 도면이다.
도 6은 본 발명의 일례에 따른 수신 서버를 도시한 도면이다.
도 7은 본 발명의 일례에 따른 분산 흐름 제어 시스템의 흐름도를 도시한 도면이다.
<도면의 주요 부분에 대한 부호의 설명>
100: 송수신 네트워크
110: 클라이언트
120: 수신 서버
130: 송신 서버
140: 서비스 요청 패킷
150: 제1 정보
160: 응답 패킷
본 발명은 서비스 처리 시스템에 관한 것으로, 더욱 상세하게는 네트워크에서 서버에 집중되는 부하를 분산시켜 클라이언트로부터의 서비스 요청을 효율적으로 처리하는 경우의 흐름 제어에 관한 것이다.
여러 대의 컴퓨터가 작업을 분담하여 처리하는 환경을 분산 처리 환경이라고 한다. 분산 처리 환경에서는 네트워크를 통해 서로 자원을 공유하거나 주고 받을 수 있다. 클라이언트와 서버로 구성된 네트워크에서는 사용자의 단말기가 클라이언트로, 호스트 컴퓨터가 서버로 구성된 통신 시스템이다. 즉, 서비스를 요청하는 클라이언트와 이에 대응하는 서비스를 제공하는 서버가 원격 접속을 통하여 데이터 통신이 가능한 구조를 의미한다. 클라이언트는 데이터의 집중이나 자원의 공유가 목적인 작업을 위하여 서버에 접속한다. 그러나, 인터넷을 기반으로 한 네트워크 환경이 날이 갈수록 복잡해지고 있다. 예를 들어, HTTP(hypertext transfer protocol)라는 하나의 서비스를 받기 위해 사용자 클라이언트들은 인터넷 어느 공간상의 실제 HTTP 서버에 접속하여 원하는 서비스를 받게 된다. 즉 서버가 인터넷이라는 네트워크 환경에 접속만 되어있다면 사용자들은 그것의 물리적인 위치나 주소는 문제가 되지 않고 서비스를 받을 수 있다. 그러나 서버의 입장에서는 사용자 클라이언트들의 입장보다 더 복잡한 문제를 갖는다. 서비스를 안정적으로 그리고 지속적으로 많은 사용자들에게 제공하기 위해서 서버가 서비스를 처리할 수 있는 능력이 커야만 한다. 더 많은 사용자에게 정확한 서비스를 하기 위해서는 더 강력한 성능의 서버로 업그레이드하는 대신에, 복수 개의 서버를 설치하고 클라이언트로부터의 서비스 요청을 상기 복수 개의 서버에 할당하는 스위치가 사용되고 있다. 그러나, 네트워크에서 처리해야 하는 트래픽이 급증하게 되면서, 모든 패킷의 헤더를 처리해야만 하는 스위치에서 정체 현상이 빈번하게 발생하기 시작했다. 스위치에서 정체가 발생하면, 스위치는 수신된 패킷을 처리하지 못하고 이는 다시 클라이언트의 재전송을 초래하여 상황이 더욱 악화되기도 한다.
이에 대한 해결 방안으로서 연결 분배 방식이 사용되었다. 연결 분배 방식은 4계층(Layer-4: L4) 스위치에 의한 서버 부하 분산 방법으로, 연결되어 있는 각각의 서버의 로드(load)를 분석하여 각각의 서버로 로드를 분산시키는 방식이다. L4 스위치에 의한 서버 부하 분산 방법은 DNS(domain name server)에 의존하지 않고 다수의 서버들을 하나의 가상 IP(Virtual IP: VIP) 주소로 묶어 사용자들에게는 VIP 만을 알려주고 IP 어드레스뿐 만 아니라, 4계층의 TCP/UDP 포트에서도 특정 서버에 장애가 발생하였을 경우에도 서버들간에 올바른 부하 분산이 가능하도록 한다.
그러나, 종래의 L4 스위치를 사용하는 연결 분배 방식은, L4 스위치가 모든 패킷(packet)을 수신하고 해당 패킷의 커넥션 튜플(connetion tuple)을 추출하여, 커넥션 튜플에 매핑 테이블(mapping table)이 존재하는 경우에 매핑 테이블에서 튜플에 맞는 서버를 추출하여 해당 서버로 패킷을 전달하게 된다. 따라서 모든 패킷이 L4 스위치를 거쳐가야 하므로 L4 스위치에 모든 부하가 집중되어 병목현상이 발생하는 단점이 있다. 또한, 클라이언트로부터 수신되는 사용자 요청 패킷뿐 아니라 복수 개의 서버에서 생성되어 클라이언트로 전달되는 응답 패킷들도 모두 L4 스위치를 통과하기 때문에, L4 스위치에 병목 현상이 발생된다.
따라서, 본 발명은 L4, L7 스위치와 같은 장치의 사용 없이도, 클라이언트로부터 수신한 서비스 요청에는 수신 서버가 대응하고 클라이언트로의 응답에는 송신 서버가 전담하도록 하고, 수신 서버는 이후의 데이터 송신에 관여하지 않도록 함으로써, 부하를 분산 시켜 병목 현상을 해소하고 효율적인 데이터 통신이 가능하도록 하고, 또한 이러한 분산 시스템에서의 흐름 제어 방법을 제안하고자 한다.
또한, 클라이언트와 수신 서버 또는 송신 서버간의 데이터의 송수신에 있어서, 수신 측의 속도 지연으로 인하여 송신 측의 전송속도가 느려지지 않도록 데이터 흐름을 조정하는 플로우 컨트롤(Flow Control)을 이용하여, 클라이언트와 수신 서버 및 송신 서버간의 효율적인 데이터 통신이 가능한 분산 흐름 제어 시스템을 제안하고자 한다.
또한, 클라이언트와 수신 서버 또는 송신 서버간의 데이터의 송수신에 있어서, 클라이언트 측으로 수신되지 않은 데이터가 재전송되도록 하는 에러 컨트롤(Error Control)을 이용하여, 클라이언트와 수신 서버 및 송신 서버간의 안정적인 데이터 통신이 가능한 분산 흐름 제어 시스템을 제안하고자 한다.
본 발명은 상기와 같은 종래 기술을 개선하기 위해 안출된 것으로서, L4, L7 스위치와 같은 부하 분산 장치의 사용 없이도 서버에 집중되는 부하를 분산시켜 병목 현상을 해소하고 효율적인 데이터 통신이 가능한 분산 흐름 제어 시스템을 제공하는 것을 목적으로 한다.
또한 본 발명은 클라이언트로부터의 데이터 수신은 수신 서버가 전담하고, 클라이언트로의 데이터 송신은 송신 서버가 전담하므로, 특정한 지점에 병목 현상이 발생하지 않는 분산 시스템을 제공하는 것을 목적으로 한다. 특히, 종래의 L4 스위치 등이 수신되는 패킷뿐 아니라 송신하는 패킷도 모두 L4 스위치를 통하여야 하던 것에 비하여, 본 발명은 수신되는 패킷은 수신 서버로만 수신되고, 송신되는 패킷은 상기 수신 서버를 통하지 않고, 바로 송신 서버에 의하여 송신되므로, 종래기술에 따른 병목 현상의 문제가 해결된 분산 흐름 제어 시스템을 제공하는 것을 목적으로 한다.
또한 본 발명은 클라이언트와 수신 서버간의 네트워크와 클라이언트와 송신 서버간의 네트워크가 서로 분리되어 있으므로, 클라이언트와 수신 서버간의 네트워 크의 지연 상태를 시퀀스 넘버로 구성된 시퀀스 맵들 간의 비교를 통하여 판단하고, 클라이언트와 송신 서버간의 네트워크 지연 상태를 시퀀스 맵에서 누락되어 있는 시퀀스 넘버를 통하여 판단하여, 각각 클라이언트와 수신 서버간의 네트워크와 클라이언트와 송신 서버간의 네트워크의 송수신 속도를 조절하고, 클라이언트로 수신되는 패킷의 재전송이 이루어지도록 하는 것이 가능하므로, 각 네트워크의 지연 상태에 따라서 효율적이고 안정적인 데이터의 송수신이 가능한 분산 흐름 제어 시스템을 제공하는 것을 목적으로 한다.
상기의 목적을 이루고 종래기술의 문제점을 해결하기 위하여, 본 발명의 일측에 따른 분산 흐름 제어 시스템은, 제 1 패킷 및 상기 제 1 패킷과 관련한 시퀀스 넘버를 생성하여 클라이언트로 송신하는 송신 서버 및 상기 시퀀스 넘버를 이용하여 상기 클라이언트에 의해 생성된 제1 시퀀스 맵을 포함하는 제 2 패킷을 상기 클라이언트로부터 수신하는 수신 서버를 포함한다. 상기 제1 시퀀스 맵은, 상기 시퀀스 넘버를 소정의 개수만큼 묶어서 생성된다. 상기 수신 서버는, 상기 제1 시퀀스 맵에 포함되어 있는 시퀀스 넘버가 누락되어 있는가의 여부를 판단하여 상기 송신 서버로부터 상기 클라이언트로의 패킷 송신을 조절하도록 하는 명령을 포함한 흐름 제어 패킷을 상기 송신 서버로 송신한다. 상기 수신 서버는, 가장 최근에 수신한 최종 시퀀스 맵을 저장하고, 상기 클라이언트로부터 수신한 상기 제1 시퀀스 맵 및 상기 최종 시퀀스 맵을 비교하여, 상기 클라이언트로부터 상기 수신 서버로의 패킷 송신을 조절하도록 하는 명령을 포함한 흐름 제어 패킷을 상기 송신 서버 로 송신한다.
본 발명의 또 다른 일측에 따르면, 상기 클라이언트로부터 상기 송신 서버에 수신된 서비스 요청에 대응하여, 상기 송신 서버가 상기 서비스 요청 패킷에 대한 응답 패킷(reply packet)을 생성하여 상기 클라이언트에게 송신하고, 상기 응답 패킷의 목적지 네트워크 주소는 상기 서비스 요청 패킷의 상기 소스 네트워크 주소이고, 상기 응답 패킷의 소스 포트 번호는 상기 서비스 요청 패킷의 상기 목적지 포트 번호이고, 상기 응답 패킷의 목적지 포트 번호는 상기 서비스 요청 패킷의 상기 소스 포트 번호이다.
본 발명의 또 다른 일측에 따르면, 송신 서버로부터 수신된 시퀀스 넘버를 이용하여 클라이언트에 의해 생성된 제1 시퀀스 맵을 포함하는 패킷을 상기 클라이언트로부터 수신하는 네트워크 수신부 및 상기 제1 시퀀스 맵에 포함되어 있는 시퀀스 넘버가 누락되어 있는가의 여부를 판단하여 상기 송신 서버와 상기 클라이언트 간의 네트워크 지연을 계산하는 제어부를 포함하며, 상기 계산된 상기 송신 서버와 상기 클라이언트 간의 상기 네트워크 지연에 따라 상기 송신 서버로부터 상기 클라이언트로의 패킷 송신을 조절하도록 하는 명령을 포함한 흐름 제어 패킷을 상기 송신 서버로 송신하는 네트워크 송신부를 더 포함한다.
본 발명의 또 다른 일측에 따르면, 상기 제어부는, 가장 최근에 수신한 최종 시퀀스 맵을 저장하고, 상기 클라이언트로부터 수신한 상기 제1 시퀀스 맵 및 상기 최종 시퀀스 맵을 비교하여, 상기 클라이언트와 상기 수신 서버 간의 네트워크 지연을 계산한다. 또한, 상기 제어부의 상기 판단 결과에 따라, 상기 클라이언트로부 터 상기 수신 서버로의 패킷 송신을 조절하도록 하는 명령을 포함한 흐름 제어 패킷을 상기 송신 서버로 송신하는 네트워크 송신부를 더 포함한다.
본 발명의 또 다른 일측에 따르면, 상기 제1 시퀀스 맵은 상기 송신 서버로부터 수신된 n-k번째 서비스 패킷(상기 n 및 상기 k는 1 이상의 정수)에 대한 시퀀스 넘버로부터 n번째 서비스 패킷에 대한 시퀀스 넘버까지를 포함한다. 상기 네트워크 수신부는, 상기 클라이언트가 상기 송신 서버로부터 수신한 n-x-k번째 서비스 패킷(상기 x는 1 이상의 정수)에 대한 시퀀스 넘버로부터 n-x번째 서비스 패킷에 대한 시퀀스 넘버까지를 포함하여 생성한 제2 시퀀스 맵을 수신한다. 상기 제어부는, 상기 제1 시퀀스 맵 및 상기 제2 시퀀스 맵을 비교하여 상기 클라이언트 및 상기 송신 서버 간 네트워크 지연의 변화를 판단한다.
본 발명의 또 다른 일측에 따르면, 상기 송신 서버 및 상기 수신 서버에 할당된 대표 네트워크 주소를 목적지 네트워크 주소로 하는 패킷은 상기 네트워크 수신부에 수신되고, 상기 클라이언트가 상기 송신 서버로부터 수신한 상기 제1 패킷의 소스 네트워크 주소는 상기 대표 네트워크 주소이다. 상기 네트워크 수신부는 상기 클라이언트로부터 서비스 요청 패킷을 수신하고, 상기 네트워크 송신부는 상기 서비스 요청 패킷의 소스 네트워크 주소, 소스 포트 번호 및 목적지 포트 번호를 상기 송신 서버로 송신한다. 상기 송신 서버는 상기 수신 서버와 물리적으로 분리되고 네트워크로 연결된다.
본 발명의 또 다른 일측에 따르면, 송신서버로부터 수신된 n-k번째 서비스 패킷(상기 n 및 상기 k는 1 이상의 정수)에 대한 시퀀스 넘버로부터 n번째 서비스 패킷에 대한 시퀀스 넘버를 이용하여 제1 시퀀스 맵을 생성하는 단계 및 상기 제1 시퀀스 맵을 상기 송신 서버와 물리적으로 분리된 수신 서버에게 송신하는 단계를 포함한다. 상기 송신서버로부터 수신된 n-x-k번째 서비스 패킷(상기 x는 1 이상의 정수)에 대한 시퀀스 넘버로부터 n-x번째 서비스 패킷에 대한 시퀀스 넘버까지를 이용하여 제2 시퀀스 맵을 생성하고, 상기 제2 시퀀스 맵을 상기 제1 시퀀스 맵과 함께 상기 수신 서버에 송신하는 단계를 더 포함하며, 상기의 방법을 실행하는 프로그램을 기록한 컴퓨터 판독가능 기록매체를 포함한다.
이하 첨부된 도면들 및 첨부된 도면들에 기재된 내용들을 참조하여 본 발명의 바람직한 실시예를 상세하게 설명하지만, 본 발명이 실시예들에 의해 제한되거나 한정되는 것은 아니다. 각 도면에 제시된 동일한 참조부호는 동일한 부재를 나타낸다.
도 1은 본 발명의 일례에 따른 서비스 처리 시스템의 구성도를 도시한 도면이다.
도 1에 도시된 바와 같이, 본 발명에 따른 서비스 처리 시스템은 수신 서버(120) 및 송신 서버(130)를 포함한다. 상기 수신 서버(120) 및 송신 서버(130)는 송수신 네트워크(100)를 구성하며, 클라이언트(110)와 네트워크로 연결되어 있다.
수신 서버(120)는 클라이언트(110)와 네트워크로 연결되어 상기 클라이언트(110)로부터 서비스 요청 패킷(140)을 수신한다. 서비스 요청 패킷(140)은 클라이언트(110) 측에서 서버의 데이터 정보를 이용하기 위하여 특정 서버 측으로 서비스의 요청을 위하여 보내는 패킷(packet)을 말한다. 클라이언트(110)가 서버 측으로 할 수 있는 서비스 요청으로는, 웹사이트의 접속, 데이터의 다운로드, 데이터의 스트리밍 서비스 등이 있을 수 있다. 예를 들어, 클라이언트(110) 측에서 특정 서버로 데이터의 다운로드를 요청 시에, 클라이언트(110)는 특정 서버 측으로 서비스 요청 패킷을 송신하고 특정 서버로부터 데이터를 다운로드 하여 원하는 서비스를 받을 수 있다.
상기 서비스 요청 패킷(140)은 서비스 요청을 하는 클라이언트 측의 IP 주소 및 포트, 그리고 서비스 요청을 받는 서버 측의 IP 주소 및 포트를 포함한다. 상기 수신 서버(120)는 송수신 네트워크(100)의 대표 IP 주소로 설정되어 있으므로, 수신 서버(120)는 클라이언트(110)가 송신하는 서비스 요청 패킷(140) 중에서, 상기 송수신 네트워크(100)의 대표 IP 주소로 수신되는 서비스 요청 패킷(140)을 수신한다.
특히, 수신 서버(120)의 IP 주소를 송수신 네트워크(100)의 대표 IP 주소로 설정하면, 대표 IP 주소를 목적지 주소로 하는 클라이언트(110)로부터의 서비스 요청 패킷(140)은 모두 수신 서버(120)로 수신된다. 수신 서버(120)는 송수신 네트워크(100) 내에서 상기 송신 서버(130)와 물리적으로 구분되어 상기 클라이언트(110)로부터 서비스 요청 패킷(140)을 수신하는 역할을 전담하며, 상기 서비스 요청 패킷(140)에 대한 응답 패킷(160)을 직접 상기 클라이언트(110)로 송신하지 않는다.
즉, 본 발명에서는 수신 서버(120)는 클라이언트(110)로부터의 데이터 수신을 전담하고, 송신 서버(130)는 클라이언트로(110)의 데이터 송신을 전담한다. 이와 같이 본 발명에서는 클라이언트로부터의 데이터 수신과 데이터 송신이 각각 수 신 서버(120) 빛 송신 서버(130)로 분리되어 수행됨으로써, 전체적인 네트워크 서비스에 있어서 한 지점에 병목이 발생되지 않도록 한다. 이를 위하여, 수신 서버(120)와 송신 서버(130)는 물리적으로 분리되고 네트워크로 연결된다.
또한, 수신 서버(120)는 클라이언트(110)로부터 수신한 서비스 요청 패킷(140)을 이용하여, 이에 대응하는 제 1 정보(150)를 생성하고 상기 송신 서버(130)로 송신한다. 상기 제 1 정보(150)에는 상기 클라이언트(110)의 IP 주소 및 포트, 송수신 네트워크(100)의 포트 번호 등이 포함되어 있다. 이와 같이, 수신 서버(120)는 클라이언트(110) 측으로부터 수신한 서비스 요청 패킷(140)에 포함되어 있는 클라이언트(110)의 정보를 가공하여 제 1 정보(150)를 생성하여 송신 서버(130)로 송신한다. 따라서, 송신 서버(130)는 상기 제 1 정보(150)를 수신하여 클라이언트(110)가 필요로 하는 서비스에 상응하는 응답 패킷(160)을 상기 클라이언트(110)로 송신할 수 있다. 예를 들어, 클라이언트(110)로부터 서버 측으로 데이터의 다운로드의 서비스 요청이 발생하면, 송수신 네트워크(100)의 대표 IP를 갖는 수신 서버(120)가 상기 클라이언트(110)로부터 서비스 요청 패킷(140)을 수신하고 상기 서비스 요청 패킷(140)을 가공하여 제 1 정보를 생성한 후, 상기 제 1 정보(150)를 송신 서버(130)로 송신한다.
송신 서버(130)는 상기 수신 서버(120)로부터 제 1 정보(150)를 수신하여 이에 대한 응답으로서, 제 1 패킷(160)을 생성하여 상기 클라이언트(110)로 송신한다. 상기 제 1 패킷(160)은 클라이언트(110) 측에서 필요로 하는 서비스를 가능하도록 하는 데이터이다. 따라서, 클라이언트(110)는 상기 송신 서버(130)로부터 제 1 패킷 (160)을 수신하여 필요로 하는 서비스를 받을 수 있다. 예를 들어, 클라이언트(110)로부터 서버 측으로 데이터의 다운로드의 서비스 요청이 발생하면, 송신 서버(130)는 수신 서버(120)로부터 제 1 정보(150)를 수신하고, 송신 서버(130)가 상기 제 1 정보(150)에 기초하여 상기 클라이언트(110)측으로 데이터, 즉 제 1 패킷(160)을 송신한다. 상기 송신 서버(130)로부터 클라이언트(110)로 송신되는 제 1 패킷(160)에는 소스 네트워크 주소로서 송수신 네트워크(100)의 대표 IP 주소가 설정되며, 목적지 네트워크 주소로서 클라이언트(110)의 IP 주소가 설정되며, 소스 포트 번호로서 송수신 네트워크(100)의 포트 번호가 설정되고, 목적지 포트 번호로서 클라이언트(110)의 포트 번호가 설정되어, 상기 클라이언트(110)로 송신된다.
이때, 송신 서버(130)는 클라이언트(110)로부터의 서비스 요청 패킷(140)에 응답하는 제 1 패킷(160)을 클라이언트(110)에게 송신할 뿐, 클라이언트(110)로부터 아무런 패킷을 수신하지 않는다. 이는 외부적으로 수신 서버(120) 및 송신 서버(130)가 동일 한 대표 IP 주소를 사용하되, 외부로부터 상기 대표 IP 주소로 수신되는 패킷은 수신 서버(120)로만 전달되도록 함으로써 수행 될 수 있다. 즉, 외부적으로 대표 IP 주소를 사용하는 서버는 수신 서버(120)로 설정되어 있으므로, TCP/IP 네트워크의 동작에 의하여 대표 IP 주소를 목적지 주소로 하는 패킷은 수신 서버(120)로만 수신된다.
클라이언트(110)는 상기 송신 서버(130)로부터 제 1 패킷(160)을 수신하여 원하는 서비스를 받을 수 있다. 이때, 클라이언트(110)는 수신 서버(120)와 송신 서버(130)의 분리를 전혀 인식하지 못한 채 서비스 요청 패킷(140)에 대한 제 1 패 킷(160)을 수신하게 되므로, 클라이언트(110)의 프로그램은 아무런 수정 없이도 본 발명에 따라 수행될 수 있다.
클라이언트(110)는 상기 송신 서버(130)로부터 제 1 패킷(160)을 수신하고 그에 대한 응답으로서 제 2 패킷(미도시)을 송수신 네트워크(100) 측으로 전송한다. 이때, 상기 제 2 패킷(미도시)은 클라이언트(100)가 상기 송신 서버(130)로부터 수신한 제 1 패킷(160)에 대한 응답으로서 송수신 네트워크(100)로 전송된다. 클라이언트(110)는 상기 제 2 패킷(미도시)을 송수신 네트워크(100)로 송신하여, 송수신 네트워크(100) 측으로부터 제 1 패킷(160)을 정상적으로 수신 하였음을 알린다.
이와 같이, 수신 서버(120)는 클라이언트(110)로부터 서비스 요청 패킷(140)의 수신을 담당하고, 송신 서버(130)는 클라이언트(110)로부터의 제 1 패킷(160)의 전송을 담당하며, 송신 서버(130)는 클라이언트(110)로부터 수신한 요청 패킷(140)의 정보를 이용하여 서비스 요청에 대응함으로써, 보다 빠르게 클라이언트(110)의 서비스 요청을 처리 할 수 있다.
도 2a는 본 발명에 따른 서비스 요청 패킷을 도시한 도면이고, 도 2b는 본 발명에 따른 제 1 정보를 도시한 도면이며, 도 2c는 본 발명에 따른 제 1 패킷을 도시한 도면이다.
서비스 요청 패킷(140)은 서비스를 요청하는 클라이언트(140)에 관한 정보와 상기 서비스 요청 패킷(140)을 수신할 수신 서버(120)에 관한 정보를 가지고 있으며, 도 2a에 도시된 바와 같이, 소스 네트워크 주소(201), 목적지 네트워크 주소 (202), 소스 포트 번호(203), 목적지 네트워크 주소(204) 및 데이터 필드(205)를 포함하여 구성된다.
상기 서비스 요청 패킷(140)은 소스 네트워크 주소(201)로서 클라이언트(110)의 IP 주소를 가지고 있고, 목적지 네트워크 주소(202)로서 서비스 요청 패킷(140)을 수신할 서버의 IP 주소를 가지고 있다. 따라서, 상기 서비스 요청 패킷(140)을 송신하는 클라이언트(110)는 서비스 요청 패킷(140)에 목적지 네트워크 주소(202)가 포함하여 송신하고, 상기 서비스 요청 패킷(140)을 수신하는 서버 측에서는 소스 네트워크 주소(201)를 참조하여 서비스 요청을 한 클라이언트(110)를 식별할 수 있다. 또한, 서비스 요청 패킷(140)에는 소스 포트 번호(203)로서 클라이언트(110)의 포트 번호와 목적지 포트 번호(204)로서 수신 서버(120)의 포트 번호가 포함되어 있다. 따라서, 상기 서비스 요청 패킷(140)은 목적지 포트 번호(204)에 해당하는 수신 서버(120)의 포트로 수신되고, 수신 서버(120) 측에서는 상기 소스 포트 번호(203)를 참조하여 상기 서비스 요청 패킷(140)이 어느 클라이언트(110)의 포트로부터 송신 되었는지를 알 수 있다. 예를 들어, 도 2a에서와 같이, 클라이언트(110)는 소스 네트워크 주소(201)에는 클라이언트(110) 자신의 IP 주소인 88.24.5.6을 설정하고, 목적지 네트워크 주소(202)에는 서비스 요청에 응해 줄 수신 서버(120)의 IP 주소인 157.8.7.6을 설정하고, 소스 포트 번호(203)에는 서비스를 요청할 클라이언트(110)의 포트인 777을 설정하고, 목적지 포트 번호(204)에는 서비스 요청에 응해 줄 수신 서버(120)의 포트인 80을 설정하여 서비스 요청 패킷(140)을 생성하고, 생성된 서비스 요청 패킷(140)을 수신 서버(120)로 송신한다.
수신 서버(120)는 상기 서비스 요청 패킷(140)을 수신하여, 상기 서비스 요청 패킷(140)에 포함되어 있는 클라이언트(110)의 IP 주소, 수신 서버(120)의 IP 주소, 클라이언트(110)의 포트 번호, 수신 서버(120)의 포트 번호 등의 정보를 가공하여 제 1 정보(150)를 생성하고 송신 서버(130)로 송신한다. 도 2 b에 도시된 바와 같이, 상기 제 1 정보(150)에는 클라이언트의 IP 주소(211), 클라이언트의 포트 번호(212), 수신 서버의 포트 번호(213) 및 데이터 필드(214)를 포함된다. 이와 같이, 수신 서버(120)는 클라이언트(110)로부터 수신한 서비스 요청 패킷(140)에 포함되어 있는 정보를 이용하여 제 1 정보(150)를 생성하고 송신 서버(130)로 송신한다. 예를 들어, 서비스 요청 패킷(140)에 포함되어 있는 클라이언트 IP 주소(201)가 88.24.5.6이고, 클라이언트 포트 번호(203)가 777이며, 수신 서버의 포트 번호(204)가 80인 경우에는, 수신 서버(130)는 상기 서비스 요청 패킷(140)에 포함되어 있는 정보를 이용하여 클라이언트 IP 주소(211)가 88.24.5.6이고, 클라이언트 포트 번호(212)가 777이며, 수신 서버의 포트(213)가 80이며, 데이터 필드(214)를 포함하여 구성되는 제 1 정보(150)를 생성하여 송신 서버(130)로 전달한다.
송신 서버(130)는 상기 수신 서버(120)와 연결된 네트워크를 통하여 상기 수신 서버(120)로부터 상기 제 1 정보(150)를 수신한다. 송신 서버(130)가 수신 서버(120)로부터 수신한 제 1 정보(150)에는 클라이언트의 IP 주소(211), 클라이언트의 포트 번호(212), 수신 서버의 포트 번호(213) 등이 포함되어 있으므로, 이를 이용하여 클라이언트(110) 측으로 송신할 제 1 패킷(160)을 생성할 수 있다. 도 2c에 도시된 바와 같이, 제 1 패킷(160)은 소스 네트워크 주소(221), 목적지 네트워크 주소(222), 소스 포트 번호(223), 목적지 포트 번호(224) 및 데이터 필드로 구성된다. 예를 들어, 송신 서버(130)는 수신 서버(120)로부터 수신한 제 1 정보(150)를 이용하여 소스 네트워크 주소(221)에는 수신 서버(120)의 IP 주소인 157.8.7.6을 설정하고, 목적지 네트워크 주소(222)에는 제 1 패킷(160)을 수신할 클라이언트(110)의 IP 주소인 88.24.5.6을 설정하여 제 1 패킷(160)을 생성한다. 또한, 송신 서버(130)는 소스 포트 번호(223)에는 수신 서버(120)의 포트인 80을 설정하고, 목적지 포트 번호(224)에는 제 1 패킷(160)을 수신할 클라이언트(110)의 포트인 777을 설정하고, 데이터 필드(225)와 함께 제 1 패킷(160)을 생성한다. 송신 서버(130)는 서비스 요청을 한 클라이언트(110) 측으로 상기 제 1 패킷(160)을 송신하며, 클라이언트(110)는 송신 서버(130)로부터 제 1 패킷(160), 즉 서비스 요청에 대응되는 데이터를 수신하므로 클라이언트(110)가 요청했던 서비스를 받을 수 있다.
이후, 클라이언트(110)는 상기 제 1 패킷(160)의 수신이 모두 정상적으로 완료되는 경우, 송신 서버(130)로부터 제 1 패킷(160)을 수신 하였음을 알리는 제 2 패킷(미도시)을 송수신 네트워크(100) 측으로 송신하며, 송수신 네트워크(100)의 대표 IP를 갖는 수신 서버(120)는 상기 제 2 패킷(미도시)을 수신하여, 클라이언트(110)가 필요로 하는 서비스의 제공이 정상적으로 이루어 졌음을 확인 할 수 있다.
상기와 같이 구성되는 송수신 네트워크(110)와 클라이언트(110)간의 서비스의 요청 및 그에 대응하는 서비스의 제공에 있어서, 클라이언트(110)와 수신 서버(120)간의 네트워크 연결 상태와, 송신 서버(130)와 클라이언트(110)간의 네트워크 연결 상태를 확인하고, 네트워크 연결 상태에 따라 패킷의 송수신 속도를 제어할 수 있는 구성 및 방법을 설명하면 다음과 같다.
도 3은 본 발명의 또 다른 일례에 따른 분산 흐름 제어 시스템의 구성도를 도시한 도면이다.
도 3에 도시된 바와 같이, 클라이언트(310)가 서비스 요청 패킷(미도시)을 수신 서버(320)로 송신하면, 수신 서버(320)는 상기 서비스 요청 패킷(미도시)을 수신하고, 상기 서비스 요청 패킷(미도시)을 이용하여 제 1 정보(미도시)를 생성하여 송신 서버(330)로 송신한다.
송신 서버(330)는 수신 서버(320)로부터 제 1 정보(미도시)를 수신하여 이에 대한 응답으로서, 제 1 패킷(335)을 생성하여 상기 클라이언트(310)로 송신한다. 상기 제 1 패킷(335)은 클라이언트(310) 측에서 필요로 하는 서비스에 해당하는 데이터 이다. 상기 송신 서버(320)로부터 클라이언트(310)로 송신되는 제 1 패킷(335)에는 소스 네트워크 주소로서 송수신 네트워크(300)의 대표 IP 주소가 설정되며, 목적지 네트워크 주소로서 클라이언트(310)의 IP 주소가 설정되며, 소스 포트 번호로서 송수신 네트워크(300)의 포트 번호가 설정되고, 목적지 포트 번호로서 클라이언트(310)의 포트 번호가 설정되어, 상기 클라이언트(310)로 송신된다. 이때, 상기 송신 서버(330)는 상기 제 1 패킷(335)에 시퀀스 넘버(Sequence number: 340)를 포함하여 송신한다. 상기 시퀀스 넘버(340)는 송신서버(330)로부터 클라이언트(310)로 송신되는 패킷들의 순서에 관한 정보이다.
상기 송신 서버(330)는 상기 클라이언트(310)로 송신되는 제 1 패킷(335)에 상기 시퀀스 넘버(340)를 포함하여 송신하므로, 상기 제 1 패킷(335)을 수신하는 클라이언트(310) 측에서는 상기 시퀀스 넘버(340)를 이용하여, 상기 제 1 패킷(335)이 상기 송신 서버(330)로부터 송신된 순서를 알 수 있다. 또한 상기 시퀀스 넘버(340)는 클라이언트(310)에서 상기 제 1 패킷(335)들을 순서에 의하여 정리하여 클라이언트(310)의 서비스 요청에 대응한 데이터를 재구성하는 데에 사용된다. 특히, 상기 시퀀스 넘버(340)는 송신 서버(330)로부터 송신된 상기 제 1 패킷(335)이 패킷 손실(packet loss)없이 클라이언트(310)측으로 수신되었는가의 여부를 판단하는 데에도 사용된다. 예를 들어, 상기 클라이언트(310)과 상기 송신 서버(330) 사이의 네트워크 연결 상태가 좋지 않거나 네트워크 지연이 발생하는 경우에는, 송신 서버(330)로부터 송신된 서비스 요청에 대한 서비스 패킷, 즉 상기 제 1 패킷(335)이 클라이언트(310)측으로 수신되지 않는 경우가 발생한다. 이때, 상기 시퀀스 넘버(340)를 체크하여 상기 송신 서버(330)로부터 제 1 패킷(335)을 수신하였는가의 여부를 확인할 수 있다.
클라이언트(310)는 송신 서버(330)로부터 서비스 요청에 대한 제 1 패킷(335)을 수신하여 원하는 서비스를 받을 수 있으며, 이때 상기 제 1 패킷(335)과 함께 시퀀스 넘버(340)를 수신한다. 또한, 클라이언트(310)는 송수신 네트워크(300) 측으로 제 1 패킷(335)의 수신을 알리는 제 2 패킷(350)을 송신하는데, 상기 제 2 패킷(350)은 클라이언트(310)가 송신 서버(330)로부터 제 1 패킷(335)을 수신하여 클라이언트(110)가 필요로 하는 서비스의 제공이 정상적으로 이루어졌음을 알리기 위한 패킷이다.
클라이언트(310)가 송신 서버(330)로 제 1 패킷(335)의 수신을 알리는 응답 패킷인 제 2 패킷(350)을 송신하는 방법으로는 온디맨드 방식(on-demand method)과 주기적 방식(periodical method)의 2가지가 있다. On-demand 방식은 서비스 패킷(즉, 제1 패킷(335))이 도착할 때 마다 또는 몇 개의 서비스 패킷(335)이 도착할 때마다 응답(즉, 제2 패킷(350))을 전송하는 방식이다. Periodical 방식은 서비스 패킷(335)이 도착하지 않더라도, 응답 패킷(350)을 전송하고 일정시간이 지나면 현재 상황에 대한 응답 패킷(350)을 전송하는 방식이다. On-demand 방식은 서비스 패킷(335)이 도착할 때마다 응답이 이루어지기 때문에 반응 속도가 빠르다는 장점이 있다. 그러나, On-demand 방식에서, 서비스 패킷(335)이 도착하지 않으면 반응이 없기 때문에 수신 서버(320)에서 클라이언트(310)의 최근의 수신 현황을 알 수 없으며, 응답 패킷(350)이 손실된 경우 조치를 취할 수 없다. Periodical 방식은 서비스 패킷(335)이 도착하는 것과는 별개로 일정 시간마다 클라이언트(310)의 수신 상황을 전달하기 때문에 반응 속도는 느리더라도, 서비스 패킷(335)의 전송 없이도 클라이언트(310)의 최근 수신 현황을 알 수 있으며, 응답 패킷(350)이 손실되더라도 잠시 후에 다시 응답 패킷(350)이 전송되기 때문에, 수신 서버(320)에서 서비스 패킷(335)이 없더라도 클라이언트(310)의 수신 상황을 알 수 있다. 본 발명의 일실시예에 따르면, 클라이언트(310)는 on-demand 방식과 periodical 방식을 혼합하여 사용한다. 이 실시예에 따르면, 응답 속도도 높아지고, 수신 서버(320)는 서비스 패킷(335)이 없더라도 클라이언트(310)의 수신 상황을 알 수 있다.
상기 클라이언트(310)는 상기 송신 서버(330)로부터 수신한 제 1 패킷(335) 에 포함되어 있는 시퀀스 넘버(340)를 이용하여 시퀀스 맵(Sequence map: 360, 370)을 생성한다. 시퀀스 맵(360, 370)이라 함은, 적어도 하나 이상의 상기 시퀀스 넘버(340)가 순차적으로 배열되어 구성된 맵(map)을 말한다. 클라이언트(310)는 상기 시퀀스 넘버(340)를 소정의 개수만큼 묶어서 시퀀스 맵(360, 370)을 생성하며, 생성된 상기 시퀀스 맵(360, 370)을 상기 제 1 패킷(350)과 함께 수신 서버(320)로 송신한다.
상기 송수신 네트워크(300)의 대표 IP 를 갖는 수신 서버(320)는 클라이언트(310)로부터 상기 시퀀스 맵(360, 370)이 포함되어 있는 제 2 패킷(350)을 수신한다. 상기 시퀀스 맵(360, 370) 중에서 제 1 시퀀스 맵(360)은, 클라이언트(310)가 송신 서버(330)로부터 수신한 시퀀스 넘버(340)를 이용하여 생성되어, 수신 서버(320)가 상기 제 1 시퀀스 맵(360) 중에 포함되어 있는 시퀀스 넘버(340)가 누락되어 있는 가의 여부를 판단하는 데에 사용된다. 특히, 수신 서버(320)는 상기 제 1 시퀀스 맵(360) 중에 시퀀스 넘버(340)가 누락되어 있는 경우, 상기 송신 서버(330)와 클라이언트(310) 사이의 네트워크에 지연이 발생하는 것으로 판단하여, 송신 서버(330)로부터 클라이언트(310)로의 제 1 패킷(340)의 송신을 조절하도록 하는 흐름 제어 패킷(325)을 상기 송신 서버(330)로 송신하거나, 상기 누락된 시퀀스 넘버(340)에 해당하는 제 1 패킷(340)을 재전송 하도록 하는 패킷(325)을 상기 송신 서버(330)로 송신할 수 있다.
클라이언트(310)가 시퀀스 맵(360, 370)를 생성하는 예를 설명하면 다음과 같다. 클라이언트(310)는 송신 서버(330)로부터 시퀀스 넘버(340)를 포함한 제 1 패킷(335)을 수신하고, 상기 시퀀스 맵(360, 370)에 해당하는 시퀀스 넘버(340)들을 포함한 제 1 패킷(335)을 수신하였는가의 여부를 체크한다. 즉, 클라이언트(310)가 1, 2, 3, 4, 5 등의 5개의 시퀀스 넘버(360)로 이루어진 시퀀스 맵(350)을 생성하는 경우, 클라이언트(310)는 시퀀스 맵(350)의 시퀀스 넘버(340) 중에 누락된 시퀀스 넘버(360)를 체크하여, 3과 5의 시퀀스 넘버(360)가 누락되었으면, 클라이언트(310)가 상기 3과 5 시퀀스 넘버(360)가 빠진 (1, 2, X, 4, X)의 시퀀스 맵(360)을 생성하여 상기 수신 서버(320)로 송신한다. 수신 서버(320)는 상기 클라이언트(350)로부터 수신한 시퀀스 맵(360)을 체크하고 3과 5 시퀀스 넘버(360)가 누락된 것으로 확인되면, 송신 서버(330)와 클라이언트(310) 간의 네트워크에 지연이 발생한 것으로 판단하여, 송신 서버(330)로부터 상기 클라이언트(310)로의 제 1 패킷(335)의 송신을 조절하도록 하는 흐름 제어 패킷(325)을 송신 서버(330)로 송신한다. 또한, 수신 서버(320)는 누락된 시퀀스 넘버(360) 3 및 5에 해당하는 제 1 패킷(335)을 재전송하도록 하는 패킷(325)을 송신 서버(330)로 송신한다. 송신 서버(330)는 상기 수신 서버(320)로부터 흐름 제어 패킷(325)을 수신하고, 상기 흐름 제어 패킷(325)에 따라서 상기 클라이언트(310)로의 상기 제 1 패킷(335)의 송신 속도를 조절한다. 또한, 송신 서버(330)는 상기 누락된 시퀀스 넘버(360)인 3과 5에 해당하는 제 1 패킷(335)을 재전송 한다. 그러면, 클라이언트(310)는 송신 서버(330)와 클라이어언트(310) 사이의 네트워크에 따라 송신 속도가 조절된 상기 제 1 패킷(340)을 수신하게 되고, 또한 누락된 시퀀스 넘버(360)인 3과 5에 해당하는 제 1 패킷(335)을 재수신 한다.
상기 시퀀스 맵(360, 370) 중에 상기 제 1 시퀀스 맵(360)은 도 4의 (a)에서와 같이, 송신 서버(330)로부터 수신된 n-k 번째 제 1 패킷(335)에 대한 시퀀스 넘버(340)로부터 n번째 제 1 패킷(335)에 대한 시퀀스 넘버(340)까지 포함하여 구성될 수 있으며, 상기 제 2 시퀀스 맵(370)은 도 4의 (b)에서와 같이, 송신 서버(330)로부터 수신된 n-x-k 번째 제 1 패킷(335)에 대한 시퀀스 넘버(340)로부터 n-x 번째 제 1 패킷(335)에 대한 시퀀스 넘버(340)까지를 포함하여 구성될 수 있다. 이때, 상기 n, x, 및 k는 1 이상의 정수이다. 이와 같이 구성된 상기 제 1 시퀀스 맵(360)과 상기 제 2 시퀀스 맵(370)을 비교하여 상기 클라이언트(310)와 송신 서버(330) 사이의 네트워크 지연의 변화를 판단할 수 있다. 예를 들어, 상기 n이 100, x는 1, k는 9로 설정되었을 때는, 상기 제 1 시퀀스 맵(360)은 도 5의 (a)에 도시된 바와 같이 구성되며, 상기 제 2 시퀀스 맵(370)은 도 5의 (b)에 고시된 바와 같이 구성된다. 이때, 수신 서버(320)가 시간적으로 먼저 수신한 제2 패킷(350)의 제 1 시퀀스 맵(360)은 91, 92, 93, ... 99, 100 등의 시퀀스 넘버(340)로 구성되며, 상기 제 2 시퀀스 맵(370)은 90, 91, 92, ... 98, 99 등의 시퀀스 넘버(340)로 구성된다. 또한, 수신 서버(320)가 시간적으로 나중에 수신한 제2 패킷(350)의 제 1 시퀀스 맵(360)은 92, 93, 94, ... 100, 101 등의 시퀀스 넘버(340)로 구성되며, 상기 제 2 시퀀스 맵(370)은 91, 92, 93, ... 99, 100 등의 시퀀스 넘버(340)로 구성된다.
수신 서버(320)는 상기 시퀀스 맵들(360, 370)을 수신하여 비교한다. 즉, 시간적으로 먼저 수신한 제2 패킷(350)의 제 1 시퀀스 맵(360)과, 수신 서버(320)가 시간적으로 나중에 수신한 제2 패킷(350)의 제 2 시퀀스 맵(370)을 비교한다. 비교한 결과, 도 5의 (a)에서와 같이 91, 92, 93, ... 99, 100 등의 시퀀스 번호(340)가 일치하는 경우, 수신 서버(320)는 상기 클라이언트(310)와 수신 서버(320)간의 네트워크가 지연 없이 동작하는 것으로 판단한다. 이때, 수신 서버(320)는 상기 제 1 시퀀스 맵(360)과 상기 제 2 시퀀스 맵(370)의 시퀀스 넘버(340)를 체크하여, 도 5의 (c)에 도시된 바와 같이, 특정 시퀀스 넘버(340)가 누락되어 있는 경우, 수신 서버(320)가 송신 서버(330)로 흐름 제어 패킷(325)를 송신하여, 송신 서버(330)가 클라이언트(310)로 제 1 패킷(335)의 송신 속도를 조절하여 송신하도록 하거나, 송신 서버(330)가 클라이언트(310)로 상기 누락된 시퀀스 넘버(340)에 해당하는 제 1 패킷(335)을 재전송 하도록 할 수 있다. 특히, 상기 k가 1로 설정되는 경우, 상기에서와 같이 송신 서버(330)와 클라이언트(310) 사이의 네트워크 상태의 보다 상세한 변화 추이가 가능하다.
본 실시예에서는 송신 서버(330)로부터 클라이언트(310)가 수신하지 못한 시퀀스 넘버를 누락하여 시퀀스 맵을 구성하지만, 본 발명은 이에 한정되지 않는다. 예를 들어, 시퀀스 맵의 해당 위치에 소정의 값(예를 들어, -1)을 표시하여 서비스 패킷이 수신되지 않았음을 표시할 수 있다.
한편, 제 1 시퀀스 맵(360)이 91, 92, 93, ... 99, 100 등의 시퀀스 번호(340)로 구성되었으나, 상기 제 1 시퀀스 맵(360)이 수신된 바로 다음의 시퀀스 맵으로서, 도 5의 (d)에 도시된 바와 같이, 제 2 시퀀스 맵(370)이 80, 81, 82, ... 88, 89 등의 시퀀스 번호(340)로 구성되어 수신 서버(320)로 수신된 경우에는, 수 신 서버(320)가 상기 클라이언트(310)와 수신 서버(320) 사이의 네트워크에 지연이 발생하여 시퀀스 맵(360, 370)을 순차적으로 수신하지 못한 것으로 판단한다. 즉, 수신 서버(320)가 수신했어야 할 시퀀스 맵이 일부 수신되지 않은 것이다. 따라서, 클라이언트(310)로부터 수신 서버(320)로 서비스 요청 패킷(140)을 천천히 송신하도록 하는 흐름 제어 패킷(325)을 송신 서버(330)로 송신한다. 송신 서버(330)는 상기 수신 서버(320)로부터 흐름 제어 패킷(325)을 수신하고, 그에 따른 패킷을 상기 클라이언트(310)로 송신하여 클라이언트(310)가 서비스 요청 패킷(140)의 송신 속도를 조절할 수 있도록 한다.
도 6은 본 발명의 일례에 따른 수신 서버를 도시한 도면이다.
도 6 에 도시된 바와 같이, 본 발명에 따른 수신 서버(400)는 네트워크 수신부(410), 제어부(420) 및 네트워크 송신부(430)를 포함한다.
송수신 네트워크(300)의 대표 IP 주소를 갖는 수신 서버(400) 내의 네트워크 수신부(410)는, 송수신 네트워크(300)의 대표 IP 주소를 목적지 네트워크 주소로 하는 패킷을 수신한다. 따라서, 송수신 네트워크(300)로 송신되는 패킷은 모두 네트워크 수신부(410)에서 수신된다. 그러므로, 상기 네트워크 수신부(410)는 클라이언트(310)로부터 송신되는 서비스 요청 패킷(140)을 수신한다.
또한, 상기 송신 서버(330)로부터 송신되는 패킷의 소스 네트워크 주소는 송수신 네트워크(300)의 대표 IP 주소, 즉 수신 서버(320)의 IP 주소를 소스 네트워크 주소로 갖는다.
상기 네트워크 수신부(610)는 클라이언트(310)로부터 제 2 패킷(350)에 포함 되어 있는 제 1 시퀀스 맵(360)과 제 2 시퀀스 맵(370)을 수신한다. 상기 제 1 시퀀스 맵(360) 및 제 2 시퀀스 맵(370)은 클라이언트(310)가 송신 서버(330)로부터 수신한 시퀀스 넘버(340)를 이용하여 생성한 시퀀스 맵이다.
제어부(620)는 상기 제 1 시퀀스 맵(360)과 제 2 시퀀스 맵(370) 중에 특정 시퀀스 넘버(340)가 누락되어 있는 경우, 상기 송신 서버(330)와 클라이언트(310) 사이의 네트워크에 지연이 발생하는 것으로 판단한다. 또는, 상기 제 1 시퀀스 맵(360)과 제 2 시퀀스 맵(370)을 비교하여, 상기 클라이언트(310)와 수신 서버(330)간의 네트워크 지연을 계산 하거나, 또는 제 1 시퀀스 맵(360)및 제 2 시퀀스 맵(370)보다 시간적으로 가장 최근에 수신한 최종 시퀀스 맵(미도시)을 저장하고, 상기 제 1 시퀀스 맵(360) 및또는/및 제 2 시퀀스 맵(370)과 최종 시퀀스 맵(미도시)을 비교하여 상기 클라이언트(310)와 수신 서버(330)간의 네트워크 지연을 계산할 수 있다. 본 발명의 일실시예에 따르면, 상기 제 1 시퀀스 맵(360) 또는/및 제 2 시퀀스 맵(370)과 최종 시퀀스 맵(미도시)을 비교함으로써 클라이언트(310)와 수신 서버(330)간의 네트워크 지연 외에 클라이언트(310)와 상기 수신 서버(330) 간의 네트워크 전송 에러를 판단할 수 있다. 예를 들어, 수신 서버(330)가 가장 최근에 수신하여 저장하고 있는 최종 시퀀스 맵이 91, 92, 93, ... 100의 시퀀스 넘버로 구성되어 있고, 새로 수신될 시퀀스 맵이 92, 93, ... 101의 시퀀스 넘버로 구성되어 있어야 하는데, 실제로 수신한 시퀀스 맵이 93, 94, ... 101, 102의 시퀀스 넘버로 구성되어 있다면, 92, 93, ... 101의 시퀀스 넘버로 구성된 시퀀스 맵에 전송 에러가 발생한 것을 판단할 수 있다. 이때, 클라이언트(310)로부터 수신 서버 (330)로 전달되는 시퀀스 맵은 하나 또는 둘 이상일 수 있다.
네트워크 송신부(630)는 제어부(620)의 네트워크 지연에 대한 판단에 따라서, 송신 서버(330)로부터 클라이언트(310)로의 제 1 패킷(340)의 송신을 조절하도록 하는 흐름 제어 패킷(325)을 상기 송신 서버(330)로 송신하거나, 상기 누락된 특정 시퀀스 넘버(340)에 해당하는 제 1 패킷(340)을 재전송 하도록 하는 흐름 제어 패킷(325)을 상기 송신 서버(330)로 송신할 수 있다.
예를 들어, 네트워크 수신부(610)가 시간적으로 먼저 수신한 제2 패킷(350)의 제 1 시퀀스 맵(360)은 91, 92, 93, ... 99, 100 등의 시퀀스 넘버(340)로 구성되며, 상기 제 2 시퀀스 맵(370)은 90, 91, 92, ... 98, 99 등의 시퀀스 넘버(340)로 구성된다. 또한, 시간적으로 나중에 수신한 제2 패킷(350)의 제 1 시퀀스 맵(360)은 92, 93, 94, ... 100, 101 등의 시퀀스 넘버(340)로 구성되며, 상기 제 2 시퀀스 맵(370)은 91, 92, 93, ... 99, 100 등의 시퀀스 넘버(340)로 구성된다.
제어부(620)는 상기 네트워크 수신부(610)가 수신한 시퀀스 맵(360, 370)을 전달받고 비교한다. 상기 n이 100, x는 1, k는 9로 설정되었을 경우, 시간적으로 먼저 수신한 제2 패킷(350)의 제 1 시퀀스 맵(360)이 91, 92, 93, ... 99, 100 등의 시퀀스 번호(340)로 구성되고, 시간적으로 나중에 수신한 제2 패킷(350)의 제 2 시퀀스 맵(370)이 동일하게 91, 92, 93, ... 99, 100 등의 시퀀스 번호(340)로 구성되는 경우, 제어부(620)는 상기 클라이언트(310)와 수신 서버(320)간의 네트워크가 지연 없이 동작하는 것으로 판단한다. 이때, 수신 서버(320)는 상기 제 1 시퀀스 맵(360)과 상기 제 2 시퀀스 맵(370)의 시퀀스 넘버(340)를 각각 체크하고, 특 정 시퀀스 넘버(340)가 누락되어 있는 경우, 네트워크 송신부(630)가 흐름 제어 패킷(325)를 송신하여, 송신 서버(330)가 클라이언트(310)로 제 1 패킷(335)의 송신 속도를 조절하여 송신하도록 하거나, 송신 서버(330)가 클라이언트(310)로 상기 누락된 시퀀스 넘버(340)에 해당하는 제 1 패킷(335)을 재전송 하도록 할 수 있다. 특히, 상기 x가 1로 설정되는 경우, 상기에서와 같이 송신 서버(330)와 클라이언트(310) 사이의 네트워크 상태의 보다 상세한 변화 추이가 가능하다.
도 7은 본 발명의 일례에 따른 분산 흐름 제어 시스템의 흐름도를 도시한 도면이다.
도 7을 참조하여, 본 발명에 따른 분산 흐름 제어 방법을 설명하면 다음과 같다.
송신 서버(330)가 제 1 패킷(335)과 함께 시퀀스 넘버(340)를 송신한다(S710).
클라이언트(310)는 시퀀스 넘버(340)를 수신하고, 수신한 시퀀스 넘버(340)를 이용하여 제 1 시퀀스 맵(360) 및 제 2 시퀀스 맵(370)을 생성한 후, 수신 서버(320)로 생성된 시퀀스 맵(360, 370)을 송신한다(S720).
수신 서버(320)는 클라이언트(310)로부터 제 1 시퀀스 맵(360) 및 제 2 시퀀스 맵(370)을 수신한다. 시간적으로 먼저 수신한 패킷의 제 1 시퀀스 맵(360)과 시간적으로 나중에 수신한 패킷의 제 2 시퀀스 맵(370)을 비교하거나, 또는 상기 두 시퀀스 맵(360, 370)에 누락되어 있는 시퀀스 번호(340)를 각각 체크한다. 상기 제 1 시퀀스 맵(360)과 제 2 시퀀스 맵(370)을 비교하여, 제 1 시퀀스 맵(360)과 제 2 시퀀스 맵(370)이 일치하는가의 여부에 따라서 클라이언트(310)와 수신 서버(320)간의 네트워크에 지연이 발생하였는가의 여부를 판단할 수 있다. 또한, 제 1 시퀀스 맵(360) 및 제 2 시퀀스 맵(370) 중에 특정 시퀀스 넘버(340)가 누락되었는가의 여부를 체크하여 클라이언트(310)와 송신 서버(330)간의 네트워크에 지연이 발생하였는가의 여부를 판단 할 수 있다.
수신 서버(320)는 상기와 같은, 클라이언트(310)와 수신 서버(320)간의 네트워크에 지연이 발생하였는가의 여부를 판단한 결과와, 클라이언트(310)와 송신 서버(330)간의 네트워크에 지연이 발생하였는가의 여부를 판단한 결과를 이용하여, 흐름 제어 패킷(325)을 생성하여 송신 서버(330)로 송신한다(S740). 흐름 제어 패킷(325)에는 송신 서버(330)로부터 송신되는 응답 패킷, 즉 제 1 패킷(335)의 송신 속도를 조절하거나 재전송하도록 하는 명령이 포함되어 있거나, 클라이언트(310)가 서비스 요청 패킷(140)을 천천히 송신하도록 하는 명령이 포함되어 있다.
송신 서버(330)는 수신 서버(320)로부터 상기 서비스 요청 패킷(140)을 수신하고, 서비스 요청 패킷(140)에 포함되어 있는 명령에 응답하여, 클라이언트(310)로 송신되는 제 1 패킷(335)의 송신 속도를 느리거나 빠르게 조절하거나 또는 재전송 한다(S750). 또한, 송신 서버(330)는 클라이언트(310)측으로, 클라이언트(310)가 서비스 요청 패킷(140)을 수신 서버(320)측으로 천천히 송신하도록 하는 명령을 송신 할 수 있다.
클라이언트(310)는 송신 서버(330)로부터 송신 속도가 조절된 상기 제 1 패킷(335)을 수신하거나 또는 제 1 패킷(335)을 재수신 한다(S760). 또한, 송신 서버 (330)로부터 수신 서버(320)로의 서비스 요청 패킷(140)의 송신 속도를 조절하도록 하는 명령을 수신하여, 수신 서버(320)측으로 서비스 요청 패킷(140)을 조절하여 송신한다.
이상의 실시예에서 클라이언트로부터 수신 서버로 전달되는 시퀀스 맵은 하나이거나 2개인 경우를 설명하였으나, 본 발명의 범위 내에서 3개 이상으로 확장될 수 있다.
본 발명에 따르면, L4, L7 스위치와 같은 부하 분산 장치의 사용 없이도 서버에 집중되는 부하를 분산시켜 병목 현상을 해소하고 효율적인 데이터 통신이 가능하다.
또한 본 발명에 따르면, 클라이언트로부터의 데이터 수신은 수신 서버가 전담하고, 클라이언트로의 데이터 송신은 송신 서버가 전담하므로, 특정한 지점에 병목 현상이 발생하지 않는 분산 시스템이 제공된다. 특히, 종래의 L4 스위치 등이 수신되는 패킷뿐 아니라 송신하는 패킷도 모두 L4 스위치를 통하여야 하던 것에 비하여, 본 발명은 수신되는 패킷은 수신 서버로만 수신되고, 송신되는 패킷은 상기 수신 서버를 통하지 않고, 바로 송신 서버에 의하여 송신되므로, 종래기술에 따른 병목 현상의 문제가 해결된다.
또한, 본 발명에 따르면, 클라이언트와 수신 서버간의 네트워크와 클라이언트와 송신 서버간의 네트워크가 서로 분리되어 있으므로, 클라이언트와 송신 서버간의 네트워크 지연 상태를 시퀀스 넘버들로 구성된 시퀀스 맵들을 이용하여 계산 하여, 각각 클라이언트와 수신 서버간의 네트워크와 클라이언트와 송신 서버간의 네트워크의 송수신 속도를 조절하는 것이 가능하며, 시퀀스 맵에 누락되어 있는 시퀀스 넘버를 체크하여, 수신하지 못한 패킷을 재송신 및 재수신 하는 것이 가능하므로, 각 네트워크의 상태에 따라서 효율적이고 안정적인 데이터의 전송이 가능하다.
또한, 본 발명을 이용하면 분산된 네트워크 자원을 하나의 네트워크 자원처럼 인식하여 사용하는 네트워크 가상화(network virtualization)가 가능하다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명은 상기의 실시예에 한정되는 것은 아니며, 이는 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다. 따라서, 본 발명 사상은 아래에 기재된 특허 청구 범위에 의해서만 파악되어야 하고, 이의 균등 또는 등가적 변형 모두는 본 발명 사상의 범주에 속한다고 할 것이다.

Claims (19)

  1. 제 1 패킷 및 상기 제 1 패킷과 관련한 시퀀스 넘버를 생성하여 클라이언트로 송신하는 송신 서버; 및
    상기 시퀀스 넘버를 이용하여 상기 클라이언트에 의해 생성된 제1 시퀀스 맵을 포함하는 제 2 패킷을 상기 클라이언트로부터 수신하는 수신 서버
    를 포함하는 것을 특징으로 하는 분산 흐름 제어 시스템.
  2. 제1항에 있어서, 상기 제1 시퀀스 맵은,
    상기 시퀀스 넘버를 소정의 개수만큼 묶어서 생성되는 것을 특징으로 하는 분산 흐름 제어 시스템.
  3. 제1항에 있어서, 상기 수신 서버는,
    상기 제1 시퀀스 맵에 포함되어 있는 시퀀스 넘버가 누락되어 있는가의 여부를 판단하여 상기 송신 서버로부터 상기 클라이언트로의 패킷 송신을 조절하도록 하는 명령을 포함한 흐름 제어 패킷을 상기 송신 서버로 송신하는 것을 특징으로 하는 분산 흐름 제어 시스템.
  4. 제3항에 있어서, 상기 수신 서버는,
    가장 최근에 수신한 최종 시퀀스 맵을 저장하고, 상기 클라이언트로부터 수 신한 상기 제1 시퀀스 맵 및 상기 최종 시퀀스 맵을 비교하여, 상기 클라이언트로부터 상기 수신 서버로의 패킷 송신을 조절하도록 하는 명령을 포함한 흐름 제어 패킷을 상기 송신 서버로 송신하는 것을 특징으로 하는 분산 흐름 제어 시스템.
  5. 제1항에 있어서,
    상기 클라이언트로부터 상기 송신 서버에 수신된 서비스 요청 패킷에 대응하여, 상기 송신 서버가 상기 서비스 요청 패킷에 대한 응답 패킷(reply packet)을 생성하여 상기 클라이언트에게 송신하고, 상기 응답 패킷의 목적지 네트워크 주소는 상기 서비스 요청 패킷의 소스 네트워크 주소이고, 상기 응답 패킷의 소스 포트 번호는 상기 서비스 요청 패킷의 목적지 포트 번호이고, 상기 응답 패킷의 목적지 포트 번호는 상기 서비스 요청 패킷의 소스 포트 번호인 것을 특징으로 하는 분산 흐름 제어 시스템.
  6. 송신 서버로부터 수신된 시퀀스 넘버를 이용하여 클라이언트에 의해 생성된 제1 시퀀스 맵을 포함하는 패킷을 상기 클라이언트로부터 수신하는 네트워크 수신부; 및
    상기 제1 시퀀스 맵에 포함되어 있는 시퀀스 넘버가 누락되어 있는가의 여부를 판단하여 상기 송신 서버와 상기 클라이언트 간의 네트워크 지연을 계산하는 제어부
    를 포함하는 것을 특징으로 하는 수신 서버.
  7. 제6항에 있어서,
    상기 계산된 상기 송신 서버와 상기 클라이언트 간의 상기 네트워크 지연에 따라 상기 송신 서버로부터 상기 클라이언트로의 패킷 송신을 조절하도록 하는 명령을 포함한 흐름 제어 패킷을 상기 송신 서버로 송신하는 네트워크 송신부
    를 더 포함하는 것을 특징으로 하는 수신 서버.
  8. 제6항에 있어서, 상기 제어부는,
    가장 최근에 수신한 최종 시퀀스 맵을 저장하고, 상기 클라이언트로부터 수신한 상기 제1 시퀀스 맵 및 상기 최종 시퀀스 맵을 비교하여, 상기 클라이언트와 상기 수신 서버 간의 네트워크 지연을 계산하는 것을 특징으로 하는 수신 서버.
  9. 제8항에 있어서,
    상기 제어부의 상기 판단 결과에 따라, 상기 클라이언트로부터 상기 수신 서버로의 패킷 송신을 조절하도록 하는 명령을 포함한 흐름 제어 패킷을 상기 송신 서버로 송신하는 네트워크 송신부
    를 더 포함하는 것을 특징으로 하는 수신 서버.
  10. 제6항에 있어서, 상기 제어부는,
    가장 최근에 수신한 최종 시퀀스 맵을 저장하고, 상기 클라이언트로부터 수 신한 상기 제1 시퀀스 맵 및 상기 최종 시퀀스 맵을 비교하여, 상기 클라이언트와 상기 수신 서버 간의 네트워크 전송 에러를 판단하는 것을 특징으로 하는 수신 서버.
  11. 제6항에 있어서,
    상기 제1 시퀀스 맵은 상기 송신 서버로부터 수신된 n-k번째 서비스 패킷(상기 n 및 상기 k는 1 이상의 정수)에 대한 시퀀스 넘버로부터 n번째 서비스 패킷에 대한 시퀀스 넘버까지를 포함하는 것을 특징으로 하는 수신 서버.
  12. 제11항에 있어서, 상기 네트워크 수신부는,
    상기 클라이언트가 상기 송신 서버로부터 수신한 n-x-k번째 서비스 패킷(상기 x는 1 이상의 정수)에 대한 시퀀스 넘버로부터 n-x번째 서비스 패킷에 대한 시퀀스 넘버까지를 포함하여 생성한 제2 시퀀스 맵을 수신하는 것을 특징으로 하는 수신 서버.
  13. 제12항에 있어서, 상기 제어부는,
    상기 제1 시퀀스 맵 및 상기 제2 시퀀스 맵을 비교하여 상기 클라이언트 및 상기 송신 서버 간 네트워크 지연의 변화를 판단하는 것을 특징으로 하는 수신 서버.
  14. 제6항에 있어서,
    상기 송신 서버 및 상기 수신 서버에 할당된 대표 네트워크 주소를 목적지 네트워크 주소로 하는 패킷은 상기 네트워크 수신부에 수신되고, 상기 클라이언트가 상기 송신 서버로부터 수신한 상기 제1 패킷의 소스 네트워크 주소는 상기 대표 네트워크 주소인 것을 특징으로 하는 수신 서버.
  15. 제6항에 있어서,
    상기 네트워크 수신부는 상기 클라이언트로부터 서비스 요청 패킷을 수신하고, 상기 네트워크 송신부는 상기 서비스 요청 패킷의 소스 네트워크 주소, 소스 포트 번호 및 목적지 포트 번호를 상기 송신 서버로 송신하는 것을 특징으로 하는 수신 서버.
  16. 제6항에 있어서,
    상기 송신 서버는 상기 수신 서버와 물리적으로 분리되고 네트워크로 연결되는 것을 특징으로 하는 수신 서버.
  17. 송신서버로부터 수신된 n-k번째 서비스 패킷(상기 n 및 상기 k는 1 이상의 정수)에 대한 시퀀스 넘버로부터 n번째 서비스 패킷에 대한 시퀀스 넘버를 이용하여 제1 시퀀스 맵을 생성하는 단계; 및
    상기 제1 시퀀스 맵을 상기 송신 서버와 물리적으로 분리된 수신 서버에게 송신하는 단계
    를 포함하는 것을 특징으로 하는 분산 흐름 제어 방법.
  18. 제17항에 있어서,
    상기 송신서버로부터 수신된 n-x-k번째 서비스 패킷(상기 k는 1 이상의 정수)에 대한 시퀀스 넘버로부터 n-x번째 서비스 패킷에 대한 시퀀스 넘버까지를 이용하여 제2 시퀀스 맵을 생성하고, 상기 제2 시퀀스 맵을 상기 제1 시퀀스 맵과 함께 상기 수신 서버에 송신하는 단계
    를 더 포함하는 것을 특징으로 하는 분산 흐름 제어 방법.
  19. 제17항 또는 제18항의 방법을 실행하는 프로그램을 기록한 컴퓨터 판독가능 기록매체.
KR1020060134124A 2006-12-26 2006-12-26 분산 흐름 제어 시스템 KR100890996B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020060134124A KR100890996B1 (ko) 2006-12-26 2006-12-26 분산 흐름 제어 시스템

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020060134124A KR100890996B1 (ko) 2006-12-26 2006-12-26 분산 흐름 제어 시스템

Publications (2)

Publication Number Publication Date
KR20080060054A KR20080060054A (ko) 2008-07-01
KR100890996B1 true KR100890996B1 (ko) 2009-03-31

Family

ID=39812745

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020060134124A KR100890996B1 (ko) 2006-12-26 2006-12-26 분산 흐름 제어 시스템

Country Status (1)

Country Link
KR (1) KR100890996B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10397896B2 (en) 2017-04-19 2019-08-27 International Business Machines Corporation IP address geo-position detection based on landmark sequencing

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005122695A (ja) 2003-09-25 2005-05-12 Toshiba Corp 認証方法、サーバ計算機、クライアント計算機、および、プログラム
KR20070092392A (ko) * 2006-03-10 2007-09-13 (주)게임어스 멀티캐스트 방식의 분산 서버 제어 방법 및 그 시스템

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005122695A (ja) 2003-09-25 2005-05-12 Toshiba Corp 認証方法、サーバ計算機、クライアント計算機、および、プログラム
KR20070092392A (ko) * 2006-03-10 2007-09-13 (주)게임어스 멀티캐스트 방식의 분산 서버 제어 방법 및 그 시스템

Also Published As

Publication number Publication date
KR20080060054A (ko) 2008-07-01

Similar Documents

Publication Publication Date Title
US10938941B2 (en) Proxy server failover and load clustering using hash value ranges and hash value calculations based on IP addresses
US10027781B2 (en) TCP link configuration method, apparatus, and device
US11277341B2 (en) Resilient segment routing service hunting with TCP session stickiness
US7386624B2 (en) Method, system and article for dynamic real-time stream aggregation in a network
US20130111063A1 (en) Routing method in content-centric network
US11711293B2 (en) Per-provider origin pull
US20040133631A1 (en) Communication system
US10952264B2 (en) Persistent distribution of connectionless traffic supporting virtual connection migration
US11895009B2 (en) Intelligently routing internet traffic
US11115498B2 (en) Multi-path management
US7564848B2 (en) Method for the establishing of connections in a communication system
KR100890996B1 (ko) 분산 흐름 제어 시스템
CN112217735A (zh) 信息同步方法与负载均衡系统
KR100922306B1 (ko) 서비스 처리 시스템
KR100920327B1 (ko) 서비스 처리 시스템
CN117813595A (zh) 用于远程直接存储器访问的设备和方法
KR100825963B1 (ko) 분산 흐름 제어 시스템
KR100915424B1 (ko) 서비스 처리 시스템
JP2013175938A (ja) 通信装置、通信方法、及びプログラム
US9172774B2 (en) Technique for managing communications at a router
KR100827493B1 (ko) 애니캐스트 서비스 지원 방법 및 그 시스템

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20120322

Year of fee payment: 4

LAPS Lapse due to unpaid annual fee