KR102499294B1 - 데이터의 강건한 송신을 위한 스크램블링된 패킷 페이로드 맵핑 - Google Patents

데이터의 강건한 송신을 위한 스크램블링된 패킷 페이로드 맵핑 Download PDF

Info

Publication number
KR102499294B1
KR102499294B1 KR1020227037507A KR20227037507A KR102499294B1 KR 102499294 B1 KR102499294 B1 KR 102499294B1 KR 1020227037507 A KR1020227037507 A KR 1020227037507A KR 20227037507 A KR20227037507 A KR 20227037507A KR 102499294 B1 KR102499294 B1 KR 102499294B1
Authority
KR
South Korea
Prior art keywords
packet
frames
data
sequence
frame
Prior art date
Application number
KR1020227037507A
Other languages
English (en)
Other versions
KR20220151012A (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 KR20220151012A publication Critical patent/KR20220151012A/ko
Application granted granted Critical
Publication of KR102499294B1 publication Critical patent/KR102499294B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/43Assembling or disassembling of packets, e.g. segmentation and reassembly [SAR]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/166IP fragmentation; TCP segmentation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • H04L43/0823Errors, e.g. transmission errors
    • H04L43/0829Packet loss
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/34Flow control; Congestion control ensuring sequence integrity, e.g. using sequence numbers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9057Arrangements for supporting packet reassembly or resequencing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9063Intermediate storage in different physical parts of a node or terminal
    • H04L49/9068Intermediate storage in different physical parts of a node or terminal in the network interface card
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/08Arrangements for detecting or preventing errors in the information received by repeating transmission, e.g. Verdan system

Landscapes

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

Abstract

데이터의 강건한 송신을 위한 패킷 페이로드 맵핑을 위한 시스템들 및 방법들이 설명된다. 예를 들어, 방법들은 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 하나 이상의 선행 프레임들을 포함하는 제1 패킷을 송신하는 단계 ― 제1 패킷의 하나 이상의 선행 프레임들은 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 제1 패킷의 주 프레임으로부터 분리됨 ―; 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 하나 이상의 선행 프레임들을 포함하는 제2 패킷을 송신하는 단계 ― 제1 패킷의 주 프레임은 제2 패킷의 하나 이상의 선행 프레임들 중 하나임 ―; 및 제1 패킷 및 제2 패킷을 송신하기 전에, 제1 패킷 및 제2 패킷에 대한 송신의 순서를 무작위로 결정하는 단계를 포함할 수 있다.

Description

데이터의 강건한 송신을 위한 스크램블링된 패킷 페이로드 맵핑
[0001] 본 개시내용은 데이터의 강건한(robust) 송신을 위한 스크램블링된 패킷 페이로드 맵핑(scrambled packet payload mapping)에 관한 것이다.
[0002] 네트워크 애플리케이션들을 통해 데이터 송신에 대해 작업할 때, 2개의 주요 유형의 인터넷 프로토콜(IP) 트래픽, 송신 제어 프로토콜(TCP) 및 사용자 데이터그램 프로토콜(UDP)이 있다. 각각의 프로토콜은 그 자신의 의도된 용도 및 강점들을 가진다.
[0003] 예를 들어, TCP는 확인 모드 프로토콜(acknowledged mode protocol)로서 일반적으로 알려져 있는 것이다. 이것은, 데이터가 교환되고 있을 때, 빌트인 피드백 메커니즘이 데이터가 올바르게 수신되었는지를 체크하고 확인한다는 것을 의미한다. 임의의 데이터가 누락되거나 손실되면, 추가의 메커니즘들이 손상되거나 누락된 정보를 재송신한다. 이러한 메커니즘들은 TCP를 정지 이미지들, 데이터 파일들 및 웹 페이지들과 같은 정보를 송신하는 데 특히 적합하게 한다. 이러한 신뢰성이 TCP를 그러한 사용 사례들에 적합하게 하지만, 이는 비용이 들게 된다. 안정성을 보장하기 위해, 각각의 클라이언트는 그 자신의 TCP 스트림(유니캐스팅으로서 알려짐)을 수신하며, 이는 네트워크 상에 많은 클라이언트들이 있는 경우에 데이터가 종종 복제된다는 것을 의미한다. 이러한 제어 및 피드백 메커니즘들은 더 큰 프로토콜 오버헤드를 초래하며, 이는 네트워크 접속 상의 가치있는 대역폭의 더 큰 백분율이 이러한 추가적인 제어 정보를 송신하는 데 사용되고 있다는 것을 의미한다. 추가적인 대역폭 오버헤드 외에도, 데이터의 재송신은 레이턴시의 증가를 야기하여, 실시간 애플리케이션들을 악화시킬 수 있다.
[0004] 한편, UDP는 비확인 모드 프로토콜(unacknowledged mode protocol)이며, 이는 교환 동안 손실된 데이터를 재송신하는 활성 메커니즘이 없다는 것을 의미한다. 따라서, 특정 시나리오들에서, UDP는 TCP에 비해 데이터를 송신 및 수신하는, 예를 들어 이메일을 송신하거나 파일을 다운로드하는 나쁜 방법일 것이다. 그러나, 다른 인자들은 UDP를 실시간 통신들에 대해 우수하게 만든다. UDP가 확인되지 않음에 따라, 유용한 데이터를 위해 사용될 수 있는 귀중한 공간을 차지하는 프로토콜 오버헤드들이 더 적어서, 송신을 더 신속하고 더 효율적이게 한다.
[0005] 본 명세서에서는 데이터의 강건한 송신을 위한 스크램블링된 패킷 페이로드 맵핑의 구현들이 개시된다.
[0006] 제1 양상에서, 데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 시스템이 제공된다. 시스템은 메모리, 프로세서 및 네트워크 인터페이스를 포함한다. 메모리는 프로세서에 의해 실행가능한 명령들을 저장하며, 명령들은 시스템으로 하여금: 네트워크 인터페이스를 사용하여, 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 2개 이상의 선행 프레임들을 포함하는 제1 패킷을 송신하게 하고 ― 제1 패킷의 2개 이상의 선행 프레임들 중 적어도 하나는 제1 스트라이드 파라미터(stride parameter)의 각각의 배수만큼 프레임들의 시퀀스 내의 제1 패킷의 주 프레임으로부터 분리되고, 제1 패킷의 2개 이상의 선행 프레임들 중 적어도 하나는 제1 스트라이드 파라미터와 상이한 제2 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 제1 패킷의 주 프레임으로부터 분리됨 ―; 네트워크 인터페이스를 사용하여, 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 2개 이상의 선행 프레임들을 포함하는 제2 패킷을 송신하게 하고 ― 제2 패킷의 2개 이상의 선행 프레임들 중 적어도 하나는 제1 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 제2 패킷의 주 프레임으로부터 분리되고, 제2 패킷의 2개 이상의 선행 프레임들 중 적어도 하나는 제2 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 제2 패킷의 주 프레임으로부터 분리되며, 제1 패킷의 주 프레임은 제2 패킷의 2개 이상의 선행 프레임들 중 하나임 ―; 그리고 제1 패킷 및 제2 패킷을 송신하기 전에, 제1 패킷 및 제2 패킷에 대한 송신의 순서를 무작위로 결정하게 한다.
[0007] 제2 양상에서, 데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 방법이 제공된다. 방법은, 네트워크 인터페이스를 사용하여, 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 2개 이상의 선행 프레임들을 포함하는 제1 패킷을 송신하는 단계 ― 제1 패킷의 2개 이상의 선행 프레임들 중 적어도 하나는 제1 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 제1 패킷의 주 프레임으로부터 분리되고, 제1 패킷의 2개 이상의 선행 프레임들 중 적어도 하나는 제1 스트라이드 파라미터와 상이한 제2 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 제1 패킷의 주 프레임으로부터 분리됨 ―; 네트워크 인터페이스를 사용하여, 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 2개 이상의 선행 프레임들을 포함하는 제2 패킷을 송신하는 단계 ― 제2 패킷의 2개 이상의 선행 프레임들 중 적어도 하나는 제1 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 제2 패킷의 주 프레임으로부터 분리되고, 제2 패킷의 2개 이상의 선행 프레임들 중 적어도 하나는 제2 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 제2 패킷의 주 프레임으로부터 분리되며, 제1 패킷의 주 프레임은 제2 패킷의 2개 이상의 선행 프레임들 중 하나임 ―; 및 제1 패킷 및 제2 패킷을 송신하기 전에, 제1 패킷 및 제2 패킷에 대한 송신의 순서를 무작위로 결정하는 단계를 포함한다.
[0008] 제3 양상에서, 데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 비일시적 컴퓨터 판독가능 저장 매체가 제공된다. 비일시적 컴퓨터 판독가능 저장 매체는 프로세서에 의해 실행될 때 동작들의 수행을 용이하게 하는 실행가능 명령들을 포함하고, 동작들은 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 2개 이상의 선행 프레임들을 포함하는 제1 패킷을 네트워크 인터페이스를 사용하여 송신하는 동작 ― 제1 패킷의 2개 이상의 선행 프레임들 중 적어도 하나는 제1 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 제1 패킷의 주 프레임으로부터 분리되고, 제1 패킷의 2개 이상의 선행 프레임들 중 적어도 하나는 제1 스트라이드 파라미터와 상이한 제2 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 제1 패킷의 주 프레임으로부터 분리됨 ―; 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 2개 이상의 선행 프레임들을 포함하는 제2 패킷을 네트워크 인터페이스를 사용하여 송신하는 동작 ― 제2 패킷의 2개 이상의 선행 프레임들 중 적어도 하나는 제1 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 제2 패킷의 주 프레임으로부터 분리되고, 제2 패킷의 2개 이상의 선행 프레임들 중 적어도 하나는 제2 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 제2 패킷의 주 프레임으로부터 분리되며, 제1 패킷의 주 프레임은 제2 패킷의 2개 이상의 선행 프레임들 중 하나임 ―; 및 제1 패킷 및 제2 패킷을 송신하기 전에, 제1 패킷 및 제2 패킷에 대한 송신의 순서를 무작위로 결정하는 동작을 포함한다.
[0009] 제4 양상에서, 데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 시스템이 제공된다. 시스템은 메모리, 프로세서 및 네트워크 인터페이스를 포함한다. 메모리는 프로세서에 의해 실행가능한 명령들을 저장하며, 명령들은 시스템으로 하여금: 네트워크 인터페이스를 사용하여, 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 하나 이상의 선행 프레임들을 포함하는 제1 패킷을 송신하게 하고 ― 제1 패킷의 하나 이상의 선행 프레임들은 프레임들의 시퀀스 내의 제1 패킷의 주 프레임으로부터 스트라이드 파라미터의 각각의 배수만큼 분리됨 ―; 네트워크 인터페이스를 사용하여, 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 하나 이상의 선행 프레임들을 포함하는 제2 패킷을 송신하게 하고 ― 제2 패킷의 하나 이상의 선행 프레임들은 프레임들의 시퀀스 내의 제2 패킷의 주 프레임으로부터 스트라이드 파라미터의 각각의 배수만큼 분리되고, 제1 패킷의 주 프레임은 제2 패킷의 하나 이상의 선행 프레임들 중 하나임 ―; 그리고 제1 패킷 및 제2 패킷을 송신하기 전에, 제1 패킷 및 제2 패킷에 대한 송신의 순서를 무작위로 결정하게 한다.
[0010] 제5 양상에서, 데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하는 방법이 제공된다. 방법은 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 하나 이상의 선행 프레임들을 포함하는 제1 패킷을 송신하는 단계 ― 제1 패킷의 하나 이상의 선행 프레임들은 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 제1 패킷의 주 프레임으로부터 분리됨 ―; 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 하나 이상의 선행 프레임들을 포함하는 제2 패킷을 송신하는 단계 ― 제2 패킷의 하나 이상의 선행 프레임들은 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 제2 패킷의 주 프레임으로부터 분리되고, 제1 패킷의 주 프레임은 제2 패킷의 하나 이상의 선행 프레임들 중 하나임 ―; 및 제1 패킷 및 제2 패킷을 송신하기 전에, 제1 패킷 및 제2 패킷에 대한 송신의 순서를 무작위로 결정하는 단계를 포함한다.
[0011] 제6 양상에서, 데이터의 프레임들의 시퀀스로 분할되는 데이터를 송신하기 위한 비일시적 컴퓨터 판독가능 저장 매체가 제공된다. 비일시적 컴퓨터 판독가능 저장 매체는 프로세서에 의해 실행될 때 동작들의 수행을 용이하게 하는 실행가능 명령들을 포함하고, 동작들은 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 하나 이상의 선행 프레임들을 포함하는 제1 패킷을 송신하는 동작 ― 제1 패킷의 하나 이상의 선행 프레임들은 프레임들의 시퀀스 내의 제1 패킷의 주 프레임으로부터 스트라이드 파라미터의 각각의 배수만큼 분리됨 ―; 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 하나 이상의 선행 프레임들을 포함하는 제2 패킷을 송신하는 동작 ― 제2 패킷의 하나 이상의 선행 프레임들은 프레임들의 시퀀스 내의 제2 패킷의 주 프레임으로부터 스트라이드 파라미터의 각각의 배수만큼 분리되고, 제1 패킷의 주 프레임은 제2 패킷의 하나 이상의 선행 프레임들 중 하나임 ―; 및 제1 패킷 및 제2 패킷을 송신하기 전에, 제1 패킷 및 제2 패킷에 대한 송신의 순서를 무작위로 결정하는 동작을 포함한다.
[0012] 본 개시내용은 첨부 도면들과 함께 읽을 때 다음의 상세한 설명으로부터 가장 잘 이해된다. 일반적 관행에 따라, 도면들의 다양한 특징들은 축척으로 도시되지 않는다는 점이 강조된다. 반대로, 다양한 특징들의 치수들은 명료성을 위해 임의로 확대되거나 축소된다.
[0013] 도 1은 데이터의 강건한 송신을 위해 패킷 페이로드 맵핑을 사용하여 서버로부터 하나 이상의 클라이언트 디바이스로 프레임화된 데이터를 송신하기 위한 시스템의 일례의 블록도이다.
[0014] 도 2는 데이터의 강건한 송신을 위해 패킷 페이로드 맵핑을 사용하는 패킷 인코딩 스킴(packet encoding scheme)의 일례의 타이밍도이다.
[0015] 도 3a 및 3b는 패킷의 주 프레임 및 하나 이상의 선행 프레임을 각각 유지하는 엔트리들을 갖는 링 버퍼의 일례의 메모리 맵들이다.
[0016] 도 4는 도 1에 도시된 시스템의 컴퓨팅 디바이스의 내부 구성의 일례의 블록도이다.
[0017] 도 5는 데이터의 강건한 송신을 위해 패킷 페이로드 맵핑을 사용하여 데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 프로세스의 일례를 예시하는 흐름도이다.
[0018] 도 6은 데이터의 강건한 송신을 위해 패킷 페이로드 맵핑을 사용하여 데이터의 프레임들의 시퀀스로 분할된 데이터를 수신하기 위한 프로세스의 일례를 예시하는 흐름도이다.
[0019] 도 7은 패킷의 주 프레임 및 하나 이상의 선행 프레임을 각각 유지하는 엔트리들을 갖는 버퍼로부터 데이터의 프레임들을 판독하기 위한 프로세스의 일례를 예시하는 흐름도이다.
[0020] 도 8은 데이터의 강건한 송신을 위해 패킷 페이로드 맵핑을 사용하여 데이터의 프레임들의 시퀀스로 분할된 데이터를 수신하도록 구성된 컴퓨팅 디바이스에서의 데이터 흐름의 일례의 블록도이다.
[0021] 도 9는 패킷 페이로드 중복을 제거한 후에 프레임화된 데이터를 재조립 버퍼를 통과시키기 위한 프로세스의 일례를 예시하는 흐름도이다.
[0022] 도 10은 데이터의 강건한 송신을 위해 다수의 스트라이드를 갖는 패킷 페이로드 맵핑을 사용하여 데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 프로세스의 일례를 예시하는 흐름도이다.
[0023] 도 11은 데이터의 강건한 송신을 위해 다수의 스트라이드를 갖는 패킷 페이로드 맵핑을 사용하여 데이터의 프레임들의 시퀀스로 분할된 데이터를 수신하기 위한 프로세스의 일례를 예시하는 흐름도이다.
[0024] 도 12a는 데이터의 프레임들의 시퀀스로 분할된 데이터를 보유하는 패킷들에 대한 송신 순서를 무작위화하기 위한 프로세스의 일례를 예시하는 흐름도이다.
[0025] 도 12b는 데이터의 프레임들의 시퀀스로 분할된 데이터를 보유하는 패킷들에 대한 송신 순서를 무작위화하기 위한 프로세스의 일례를 예시하는 흐름도이다.
[0026] 도 13은 송신 순서의 송신기 측 스크램블링이 있는 경우와 없는 경우의 버스트 패킷 손실을 예시하는 4개의 막대 그래프를 도시한다.
[0027] 도 14는 송신 순서의 송신기 측 스크램블링이 있는 경우와 없는 경우의 버스트 패킷 손실을 예시하는 2개의 막대 그래프를 도시한다.
[0028] 실시간 데이터 송신의 렌즈를 통해 볼 때, UDP는 오버헤드의 결여 및/또는 낮은 레이턴시 제약들로 인해 선호되는 송신 계층 프로토콜이 된다. 그러나, 재송신의 결여는 안정성 및 신뢰성의 문제를 제기한다. 일반적으로, UDP를 사용할 때 소정의 손실(따라서, 오디오에서 나타나는 균열들 또는 비디오에서 나타나는 글리치(glitch)들)이 발생할 것으로 인정된다. 본 명세서에서 설명되는 패킷-프레임 맵핑 스킴들은 이러한 손실 데이터의 일부를 복구하기 위한 방법들을 제공할 수 있다.
[0029] 패킷-프레임 맵핑은 UDP를 사용할 때 데이터 손실 복구를 허용하기 위해 중복 데이터를 분배하는 방법을 제공한다. (순방향 에러 정정과 같은) 이러한 유형의 복구를 달성하기 위한 다른 방법들이 존재하지만, 패킷-프레임 맵핑은 종래의 시스템들에 비해 이점들을 제공할 수 있는 그의 중복 데이터를 분배 및 순서화하는 상이한 방법들을 사용할 수 있다. 예를 들어, 프레임화된 데이터의 송신을 위해 패킷-프레임 맵핑을 구현하는 시스템들은 혼잡한 고트래픽 무선 네트워크들과 같은 일부 네트워크 환경들에서 일반적일 수 있는 패킷 손실의 긴 버스트들에 대해 더 강건할 수 있다.
[0030] 패킷-프레임 맵핑 스킴을 설명할 때 정의할 몇 개의 용어가 있다. 본 명세서에서 사용될 때, "스트라이드"는 주어진 패킷에 포함시키기 위해 선택되는 프레임들 간의 데이터의 프레임들의 시퀀스 내의 프레임들의 수에 관한 간격이다. 예를 들어, 패킷-프레임 맵핑 스킴의 스트라이드는 클라이언트 디바이스가 데이터의 맵 가치(예를 들어, 스킴이 완전히 복구하도록 설계되는 가장 긴 패킷 손실 버스트)를 잃은 후에 수신을 확신하는 순차적 패킷들의 최소 수에 대응할 수 있다. 이 수는 수신된 패킷 통계에 기초하여 선택될 수 있다.
[0031] 본 명세서에서 사용될 때, "세그먼트"는 패킷으로 번들링되는 중복 프레임들의 수를 나타내는 중복 파라미터이다.
[0032] 본 명세서에서 사용될 때, 패킷-프레임 맵의 "길이"는 맵에서 인덱스가 0인 현재 프레임에 비해 가장 낮은 프레임 인덱스 또는 가장 큰 절대 인덱스이다. 예를 들어, 오디오 스트림에서, 프레임 크기에 의해 곱해진 길이는 얼마나 많은 오디오가 복구될 수 있는지를 나타낸다. 예를 들어, 길이가 64이고 프레임 크기가 2.5ms인 패킷-프레임 맵의 경우, 이 맵을 사용하여 160ms의 오디오가 복구될 수 있다.
[0033] 본 명세서에서 사용될 때, 패킷 맵 데이터 구조(packet map data structure)는 패킷 맵핑 스킴의 스트라이드 및 세그먼트를 나타내고, 네트워크 또는 다른 통신 채널 상에 인코딩된 패킷 페이로드들의 구조를 지정할 수 있다. 예를 들어, 서버 디바이스는 패킷 맵 데이터 구조를 사용하여, 데이터를 생성하고 송신하여 패킷 페이로드들을 디코딩하고, 중복을 이용하기 위해 패킷들을 수신하기 위한 버퍼들을 인스턴스화할 수 있다. 예를 들어, {0, -16, -32, -48, -64}는 16의 스트라이드 및 4의 세그먼트를 갖는 맵이다. 패킷 프레임 맵핑은 높은 패킷 손실 이벤트들 후에 데이터를 복구하도록 설계될 수 있다. 그것은 또한 가끔의 패킷 손실을 다룰 수 있지만, 그것은 큰 손실 이벤트들에서 뛰어나다. 예를 들어, 스캐닝 이벤트 동안, iOS 디바이스는 45 내지 55개의 패킷을 잃은 다음, 45 내지 55개의 패킷을 다시 잃기 전에 16개의 패킷을 수신할 수 있다. 이 시나리오에서, 16의 스트라이드 및 4의 세그먼트는 최대 64개 패킷 길이의 버스트 패킷 손실들의 복구를 허용할 것이고, 따라서 시스템을 iOS 스캐닝 이벤트들에 대해 강건하게 한다.
[0034] 이러한 스타일의 패킷-프레임 맵을 갖는 패킷 프레임 맵핑은 안정적이고 반복적인 손실 패턴에 대한 복구시에 특히 양호하다. 예를 들어, 무선 스캔이 모바일 디바이스에서 발생할 때, 무선 카드는 그의 주 채널을 떠나서 다른 채널들로 호핑하여 빠른 스캔들을 행하여, 스위칭할 더 성능있는 채널이 있는지를 알기 위해 검색한다. 그 결과, 50개의 패킷이 손실됨, 20개의 패킷이 수신됨, 50개의 패킷이 손실됨, 20개의 패킷이 수신됨, 50개의 패킷이 손실됨, 20개의 패킷이 수신됨 등과 같이 보이는 패턴이 발생할 수 있다. 맥락상, 이것은 무선 카드가 주 채널로부터 호핑하고, 스캐닝하고, 역으로 호핑하는 것에 기인한다. 따라서, 손실, 수신, 손실 패턴. 예시적인 패킷-프레임 맵은 이 시나리오에서 완전한 복구를 허용한다.
[0035] 단일 스트라이드를 갖는 패킷-프레임 맵이 있을 때 강력한 바와 같이, 이러한 패턴-기반 복구에 대한 제한들이 존재한다. 예를 들어, 16의 스트라이드는 디바이스들이 가장 큰 지원된 패킷 손실 이벤트로부터의 전체 복구를 보장하기 위해 손실 이벤트 이후 16개의 패킷을 수신할 필요가 있음을 나타낸다. 잡음이 많은 무선 환경들에서는, 무작위의 패턴 없는 방식으로 수신 패킷들의 커플마다 패킷들을 잃는 것이 일반적일 수 있다. 무선 스캔과 페어링된 이러한 유형의 환경은 그것이 그것의 스트라이드를 극적으로 감소시키지 않는 한 단일-스트라이드 패킷-프레임 맵핑이 실패하게 할 것이다. 예를 들어, 4의 스트라이드 및 64의 길이를 갖는 단일-스트라이드 맵: {0, -4, -8, -12, -16, -20, -24, -28, -32, -36, -40, -44, -48, -52, -56, -60, -64}은 16의 큰 세그먼트를 사용해야 하고, 이는 를 증가시킨다. 예시된 바와 같이, 이것은 패킷 내의 프레임들의 수를 증가시키고, 그 결과 패킷-프레임 맵 스킴의 네트워크 대역폭 소모를 증가시킨다.
[0036] 가끔씩의 또는 산발적인 패킷 손실을 더 잘 핸들링하기 위해, 패킷-프레임 맵은 다수의 스트라이드를 지원하도록 확장될 수 있다. 예를 들어, 짧은 스트라이드(예를 들어, 1 또는 2)는 상이한 프로파일들을 갖는 패킷 손실을 핸들링하기 위해 더 긴 스트라이드(예를 들어, 8 또는 16)와 페어링될 수 있다. 패킷-프레임 맵 내의 각각의 스트라이드는 그 스트라이드에서 패킷당 중복 프레임들의 수를 지정하는 각각의 세그먼트를 가질 수 있다.
[0037] 일부 구현들에서, 스트라이드를 변화시킴으로써 멀티-스트라이드 패킷-프레임 맵이 사용될 수 있고, 이는 양쪽 패킷 손실 시나리오들을 잘 해결하는 것을 도울 수 있다. 예를 들어, 패킷-프레임 맵 {0, -1, -2, -3, -4, -8, -16, -32, -48, -64}은 4의 세그먼트와 함께 1의 스트라이드를 그리고 5의 세그먼트와 함께 8의 스트라이드를 가지며, 맵의 시작에서의 작은 스트라이드로 인해 작은 빈번한 패킷 손실 이벤트들을 핸들링할 수 있으면서, 또한 큰 길이 값으로 인해 더 많은 양의 데이터를 복구할 수 있을 것이다. 패킷당 중복 프레임들의 총 수는 패킷-프레임 맵에서의 모든 스트라이드들에 걸친 세그먼트들의 합이고, 이 예에서는 패킷당 4+5=9개의 중복 프레임이다.
[0038] 패킷-프레임 맵핑 스킴을 구현하기 위한 시스템은 패킷 맵 데이터 구조에 따라 데이터를 패키징하고 송신하는 서버뿐만 아니라 중복 데이터를 올바르게 언패킹(unpack)하고 이용할 수 있는 클라이언트를 포함할 수 있다. 일부 구현들에서, 클라이언트 디바이스는 2개의 별개의 유형의 버퍼: 링 버퍼와 재조립 버퍼를 사용한다. 링 버퍼의 크기는 스트라이드 및 세그먼트의 크기에 의해 결정될 수 있다. 이 예에서, 스트라이드는 16이고 세그먼트는 4이므로, 링 버퍼는 (스트라이드x세그먼트)+1개의 패킷=65개의 패킷으로부터의 프레임들을 저장하는 크기를 가질 수 있다. 일부 구현들에서, 링 버퍼는 (스트라이드x세그먼트)개의 패킷=64개의 패킷으로부터의 프레임들을 저장하는 크기를 가질 수 있고, 링 버퍼에 저장된 가장 오래된 패킷의 가장 새로운 프레임인 프레임의 사본을 그의 가장 오래된 프레임으로서 보유하는 최근의 패킷 또는 라이브 패킷은 가장 오래된 패킷이 링 버퍼로부터 삭제된 이후까지 링 버퍼의 외부에 저장될 수 있다. 예를 들어, 지속기간 2.5 밀리초의 오디오 신호에 대응하는 오디오 데이터인 프레임들을 갖고, 버퍼들이 최대 64개의 프레임(예를 들어, 패킷 맵 데이터 구조에서 가장 낮은 수)을 복구하는 크기를 갖는 경우, 버퍼링 스킴에 의해 도입된 레이턴시는 2.5 밀리초*64=160 밀리초일 것이다. 예를 들어, 재조립 버퍼의 크기는 스트라이드의 크기, 이 경우 16에 의존할 수 있다. 링 버퍼의 목적은 어느 데이터가 손실되었는지를 수신하고 알아내는 것이다. 그 다음, 데이터는 손실된 데이터가 올바르게 복구되고 재생되는 것을 허용하기 위해 재조립 버퍼에서 재구성될 수 있다.
[0039] 일부 구현들은 송신기 측 스크램블링, 즉 패킷 맵핑 스킴에 따라 프레임화된 데이터를 보유하는 패킷들에 대한 송신 순서를 무작위화하는 것을 이용할 수 있다. 클라이언트 측에만 버퍼를 생성하고, 클라이언트가 프레임들을 저장한 후에 프레임들을 재순서화하게 하는 대신에, 버퍼가 서버 측에 추가될 수 있고, 중복을 갖는 패킷들에 대한 송신 순서는 이들을 클라이언트로 송신하기 전에 무작위로 스크램블링될 수 있다. 주 프레임들의 순서가 스크램블링되는 동안, 중복 프레임들은 여전히 패킷 맵핑 스킴에 따라 그들의 동일한 각각의 주 프레임들과 페어링된다. 송신 순서의 송신기 측 스크램블링은 버스트 패킷 손실 이벤트들에 대한 회복력을 증가시켜 시스템을 더 강건하게 하는 것과 같은 이점들을 제공할 수 있다.
[0040] 도 1은 데이터의 강건한 송신을 위해 패킷 페이로드 맵핑을 사용하여 서버로부터 하나 이상의 클라이언트 디바이스로 프레임화된 데이터를 송신하기 위한 시스템(100)의 일례의 블록도이다. 시스템(100)은 네트워크(106)를 통해 데이터를 송신 및 수신하도록 구성된 네트워크 인터페이스(104)를 갖는 서버 디바이스(102)를 포함한다. 네트워크(106)는 예를 들어 인터넷을 포함할 수 있고/있거나, 네트워크(106)는 근거리 네트워크(LAN), 광역 네트워크(WAN), 가상 비공개 네트워크(VPN), 또는 컴퓨팅 디바이스들(예를 들어, 클라이언트와 서버) 사이에서 데이터를 송신할 수 있는 전자적 컴퓨터 통신의 임의의 다른 공개 또는 비공개 수단일 수 있거나 이를 포함할 수 있다. 시스템(100)의 네트워크(106) 또는 임의의 다른 요소 또는 요소들의 조합은 라우터들, 스위치들, 로드 밸런서들, 다른 네트워크 디바이스들, 또는 이들의 조합들과 같은 네트워크 하드웨어를 포함할 수 있다. 예를 들어, 네트워크(106)는 WiFi 네트워크일 수 있다. 예를 들어, 네트워크(106)는 셀룰러 전화 네트워크일 수 있다. 예를 들어, 서버 디바이스(102)는 네트워크(106)를 통해 클라이언트 디바이스에 오디오 데이터를 송신하는 오디오 서버를 포함할 수 있다. 일부 구현들에서, 서버 디바이스(102)는 경기장이나 다른 장소에서 무선 네트워크(예를 들어, WiFi 네트워크)를 통해 콘서트 관람객들의 개인용 컴퓨팅 디바이스들(예를 들어, 스마트폰들이나 태블릿들)에 라이브 콘서트 또는 뮤지컬 공연의 오디오 데이터를 멀티캐스팅하도록 구성된다. 예를 들어, 서버 디바이스(102)는 네트워크(106)를 통해 클라이언트 디바이스들에 비디오 데이터를 송신하는 비디오 서버를 포함할 수 있다. 예를 들어, 서버 디바이스(102)는 네트워크(106)를 통해 클라이언트 디바이스들에 파일들을 송신하는 파일 서버를 포함할 수 있다. 예를 들어, 서버 디바이스는 도 4의 컴퓨팅 디바이스(400)의 컴포넌트들을 포함할 수 있다. 예를 들어, 서버 디바이스(102)는 도 5의 프로세스(500)를 구현할 수 있다. 예를 들어, 서버 디바이스(102)는 도 10의 프로세스(1000)를 구현할 수 있다.
[0041] 시스템(100)은 또한 클라이언트 디바이스(110) 및 클라이언트 디바이스(112)를 포함한다. 클라이언트 디바이스(110)는 네트워크(106)를 통해 데이터를 송신 및 수신하도록 구성된 네트워크 인터페이스(120)를 포함한다. 클라이언트 디바이스(112)는 네트워크(106)를 통해 데이터를 송신 및 수신하도록 구성된 네트워크 인터페이스(122)를 포함한다. 클라이언트 디바이스(110)는 데이터의 강건한 송신을 위해 패킷 페이로드 맵핑을 사용하여 프레임화된 데이터의 수신을 용이하게 하는 데 사용될 수 있는 링 버퍼(130)를 포함한다. 링 버퍼(130)는 패킷 손실의 잠재적으로 긴 버스트들을 포함하는, 송신 동안의 패킷들의 손실로부터 복구하기 위해 패킷 페이로드 맵핑에서의 중복의 사용을 허용할 수 있다. 예를 들어, 링 버퍼(130)는 패킷의 주 프레임 및 하나 이상의 선행 프레임을 각각 유지하는 엔트리들을 포함할 수 있다. 일부 구현들에서, 링 버퍼(130)는 데이터의 프레임들의 다수의 사본을 저장할 수 있고 데이터의 프레임들의 시퀀스 내의 각각의 프레임의 단일 사본을 출력하도록 구성될 수 있다. 예를 들어, 링 버퍼(130)는 스트라이드 파라미터 및/또는 중복 파라미터와 같은, 패킷 페이로드 맵핑 스킴의 하나 이상의 파라미터에 기초하여 프로비저닝될 수 있다. 예를 들어, 링 버퍼(130)는 도 3a 및 도 3b의 링 버퍼(302)일 수 있다. 유사하게, 클라이언트 디바이스(112)는 데이터의 강건한 송신을 위해 패킷 페이로드 맵핑을 사용하여 프레임화된 데이터의 수신을 용이하게 하는 데 사용될 수 있는 링 버퍼(132)를 포함한다. 예를 들어, 링 버퍼(132)는 도 3a 및 도 3b의 링 버퍼(302)일 수 있다. 예를 들어, 클라이언트 디바이스(110)는 도 4의 컴퓨팅 디바이스(400)의 컴포넌트들을 포함할 수 있다. 예를 들어, 클라이언트 디바이스(112)는 도 4의 컴퓨팅 디바이스(400)의 컴포넌트들을 포함할 수 있다. 예를 들어, 클라이언트 디바이스(110) 및 클라이언트 디바이스(112)는 도 6의 프로세스(600)를 구현할 수 있다. 예를 들어, 클라이언트 디바이스(110) 및 클라이언트 디바이스(112)는 도 11의 프로세스(1100)를 구현할 수 있다.
[0042] 서버 디바이스(102)는 패킷 페이로드 맵핑 스킴에 대해 스트라이드 파라미터에 의해 결정된 프레임들의 수만큼 프레임들의 시퀀스에서 이격된 데이터의 하나 이상의 중복 프레임들을 포함하는, 패킷(140)을 포함하는 패킷들을 송신하도록 구성된다. 예를 들어, 스트라이드 파라미터가 5이고 중복 파라미터가 3인 패킷 페이로드 맵핑 스킴에서, 패킷(140)은 프레임 인덱스 I를 갖는 주 프레임, 프레임 인덱스 I-5를 갖는 선행 프레임, 프레임 인덱스 I-10을 갖는 선행 프레임, 및 프레임 인덱스 I-15를 갖는 선행 프레임을 포함할 수 있다. 예를 들어, 도 2의 패킷 인코딩 스킴(200)은 서버 디바이스(102)에 의해 송신된 패킷(140) 및 다른 패킷들을 인코딩하기 위해 사용될 수 있다. 일부 구현들에서, 패킷(140)은 서버 디바이스(102)에 의해 클라이언트 디바이스(110) 및 클라이언트 디바이스(112)로 멀티캐스팅된다. 일부 구현들에서, 패킷(140)은 서버 디바이스(102)에 의해 네트워크(106) 상의 모든 디바이스들로 브로드캐스팅된다. 일부 구현들에서, 패킷(140)은 서버 디바이스(102)에 의해 클라이언트 디바이스(110)로 유니캐스팅된다. 간략화를 위해 2개의 클라이언트 디바이스들(110 및 112)이 도 1에 도시되지만, 더 많은 클라이언트 디바이스들이 서버 디바이스(102)에 의해 지원될 수 있다는 점에 유의한다.
[0043] 도 2는 데이터의 강건한 송신을 위해 패킷 페이로드 맵핑을 사용하는 패킷 인코딩 스킴(200)의 일례의 타이밍도이다. 패킷 인코딩 스킴(200)은 5의 스트라이드 파라미터를 사용하고, 이것은 패킷에 포함된 프레임들이 데이터의 프레임들의 시퀀스에서 서로 5 프레임만큼 이격된다는 것을 의미한다. 패킷 인코딩 스킴(200)은 3의 중복 파라미터를 사용하고, 이것은 패킷들이 주(예를 들어, 가장 최근의) 프레임, 및 스트라이드 파라미터에 따라 이격된, 주 프레임으로서 그리고/또는 선행 프레임으로서 이전 패킷들에서 송신되었을 수 있는 3개의 선행 프레임을 포함한다는 것을 의미한다.
[0044] 송신된 제1 패킷은, 프레임 인덱스가 0인 주 프레임(212), 프레임 인덱스가 -5인 선행 프레임(214)(즉, 프레임 0 이전의 5개의 프레임), 프레임 인덱스가 -10인 선행 프레임(216), 및 프레임 인덱스가 -15인 선행 프레임(218)을 포함하는 패킷 0(210)이다. 송신된 제2 패킷은, 프레임 인덱스가 1인 주 프레임(222), 프레임 인덱스가 -4인 선행 프레임(224), 프레임 인덱스가 -9인 선행 프레임(226), 및 프레임 인덱스가 -14인 선행 프레임(228)을 포함하는 패킷 1(220)이다. 송신된 제3 패킷은, 프레임 인덱스가 2인 주 프레임(232), 프레임 인덱스가 -3인 선행 프레임(234), 프레임 인덱스가 -8인 선행 프레임(236), 및 프레임 인덱스가 -13인 선행 프레임(238)을 포함하는 패킷 2(230)이다. 송신된 제4 패킷은, 프레임 인덱스가 3인 주 프레임(242), 프레임 인덱스가 -2인 선행 프레임(244), 프레임 인덱스가 -7인 선행 프레임(246), 및 프레임 인덱스가 -12인 선행 프레임(248)을 포함하는 패킷 3(240)이다. 송신된 제5 패킷은, 프레임 인덱스가 4인 주 프레임(252), 프레임 인덱스가 -1인 선행 프레임(254), 프레임 인덱스가 -6인 선행 프레임(256), 및 프레임 인덱스가 -11인 선행 프레임(258)을 포함하는 패킷 4(250)이다.
[0045] 예를 들어, 패킷 인코딩 스킴(200)은 5개의 연속적인 패킷들(즉, 스트라이드 연속적인 패킷들)의 수신에 기초하여 최대 15개(즉, 스트라이드 x 중복)의 패킷의 패킷 손실의 버스트의 복구를 가능하게 한다. 예를 들어, 패킷 인코딩 스킴(200)은 패킷 손실의 긴 버스트들에 취약한 네트워크 환경들에 적합할 수 있다.
[0046] 도 3a는 패킷의 주 프레임 및 하나 이상의 선행 프레임을 각각 유지하는 엔트리들(310 내지 340)을 갖는 링 버퍼(302)의 일례의 메모리 맵(300)을 도시한다. 이 예에서, 링 버퍼(302)는 5의 스트라이드 파라미터 및 3의 중복 파라미터를 갖는 패킷 페이로드 맵핑 스킴(예를 들어, 도 2의 패킷 인코딩 스킴(200))을 지원하는 크기를 갖는다. 메모리 맵(300)의 외부 링은 각각의 패킷에 대해 저장된 주 프레임들을 나타낸다. 메모리 맵(300)의 3개의 내부 링은 각각의 패킷에 대해 저장된 선행 프레임들을 나타낸다. 메모리 맵(300)에서, 링 버퍼(302)의 엔트리(310)는 링 버퍼(302)에 현재 저장되어 있는 프레임들을 갖는 가장 오래된 패킷에 대응한다. 링 버퍼(302)의 엔트리(340)는 링 버퍼(302)에 현재 저장되어 있는 프레임들을 갖는 가장 새로운 패킷에 대응한다. 엔트리(310)는 링 버퍼(302)로부터 데이터의 다음 프레임을 판독하기 위해 평가될 다음 엔트리이다. 엔트리(310)는 인덱스 0을 갖는 프레임의 유효 사본을 그의 주 프레임으로서 저장하기 때문에(즉, 대응하는 패킷이 성공적으로 수신되었기 때문에), 인덱스 0을 갖는 프레임은 링 버퍼(302)의 엔트리(310)로부터 주 프레임으로서 판독될 수 있다. 엔트리(310)의 주 프레임이 링 버퍼(302)로부터 판독되는 것에 응답하여, 엔트리(310)가 삭제될 수 있다(예를 들어, 메모리 위치들이 재사용을 위해 해제될 수 있다). 엔트리(340)는 그의 가장 오래된(가장 안쪽의) 선행 프레임 슬롯에 인덱스 0을 갖는 프레임의 사본을 포함한다는 점에 유의한다. 엔트리(340)에 대응하는 패킷이 수신되어 이 프레임을 갖는 엔트리(310)를 그의 주 프레임으로서 판독할 때까지 기다림으로써, 링 버퍼(302)로부터 판독될 때 인덱스 0을 갖는 프레임의 유효 사본을 가질 가능성이 최대화된다. 따라서, 링 버퍼(302)는 (스트라이드 x 중복)+1과 동일한 수(즉, 이 예에서 16)의 패킷들로부터의 프레임들을 저장하는 크기를 가질 수 있다. 실시간 미디어 송신들(예를 들어, 오디오 또는 비디오)의 경우, 이 버퍼링 방식은 프레임 지속기간(예를 들어, 2.5 밀리초 또는 5 밀리초) x 스트라이드 파라미터 x 중복 파라미터에 대응하는 알고리즘 레이턴시를 유발할 수 있다.
[0047] 예를 들어, 링 버퍼(302)는 원형 버퍼로 구현될 수 있다. 일부 구현들에서, 링 버퍼(302)는 지터 버퍼로부터 출력된 패킷들로부터 입력을 취할 수 있고, 링 버퍼(302)는 선입선출(FIFO) 버퍼로서 동작할 수 있다.
[0048] 도 3b는 패킷의 주 프레임 및 하나 이상의 선행 프레임을 각각 유지하는 엔트리들을 갖는 링 버퍼(302)의 메모리 맵(350)을 도시한다. 메모리 맵(350)은 도 3a의 메모리 맵(300)에서의 상태보다 늦은 시간에서의 링 버퍼(302)를 도시한다. 엔트리(310)는 수신된 가장 새로운 패킷의 프레임들을 저장하도록 업데이트되었다. 이 가장 새로운 패킷은 16의 프레임 인덱스를 갖는 주 프레임을 포함한다. 이제, 엔트리(312)는 링 버퍼(302)에 저장된 그의 프레임들을 가져야 하는 가장 오래된 패킷에 대응한다. 그러나, 엔트리(312)에 대응하는 패킷은 손실되었다(예를 들어, 손상되었거나 다른 방식으로 손실되었다). 따라서, 인덱스 1을 갖는 프레임들의 시퀀스 상의 다음 프레임은 엔트리(312)에서 주 프레임으로서 이용가능하지 않다. 대신에, 링 버퍼(302)는 판독을 위해 이 다음 프레임의 유효 사본에 대해 검색될 수 있다. 이 예에서, 인덱스 1을 갖는 프레임의 2개의 유효 사본이 링 버퍼에서 엔트리(332) 및 엔트리(310)에 선행 프레임들로서 저장된다. 이어서, 인덱스 1을 갖는 프레임의 이들 사본 중 하나가 링 버퍼(302)로부터 선행 프레임으로서 판독될 수 있다.
[0001] 도 4는 서버 디바이스(102), 클라이언트 디바이스(110), 및/또는 클라이언트 디바이스(112)와 같은, 도 1에 도시된 시스템의 컴퓨팅 디바이스(400)의 내부 구성의 일례의 블록도이다. 예를 들어, 클라이언트 디바이스 및/또는 서버 디바이스는 다수의 컴퓨팅 디바이스들을 포함하는 컴퓨팅 시스템, 및/또는 단일 컴퓨팅 디바이스, 예컨대 이동 전화, 태블릿 컴퓨터, 랩톱 컴퓨터, 노트북 컴퓨터, 데스크톱 컴퓨터, 서버 컴퓨터, 및/또는 다른 적합한 컴퓨팅 디바이스들일 수 있다. 컴퓨팅 디바이스(400)는 프로세서(402), 버스(404), 메모리(406), 주변기기들(414), 전원(416), 네트워크 통신 유닛(418), 사용자 인터페이스(420), 다른 적합한 컴포넌트들, 및/또는 이들의 임의의 조합과 같은 컴포넌트들 및/또는 유닛들을 포함할 수 있다.
[0002] 프로세서(402)는 마이크로프로세서와 같은 중앙 처리 유닛(CPU)일 수 있고, 단일 또는 다수의 처리 코어를 갖는 단일 또는 다수의 프로세서를 포함할 수 있다. 대안적으로, 프로세서(402)는 정보를 조작 또는 처리할 수 있는, 현재 존재하거나 이후에 개발될 다른 유형의 디바이스 또는 다수의 디바이스를 포함할 수 있다. 예를 들어, 프로세서(402)는, 무선으로 네트워킹되는 것을 포함하여, 하드와이어드 및/또는 네트워킹되는 것을 포함하는 임의의 방식으로 상호접속되는 다수의 프로세서를 포함할 수 있다. 일부 구현들에서, 프로세서(402)의 동작들은 직접 또는 근거리 또는 다른 유형의 네트워크를 통해 결합될 수 있는 다수의 물리적 디바이스들 및/또는 유닛들에 걸쳐 분산될 수 있다. 일부 구현들에서, 프로세서(402)는 동작 데이터 및/또는 명령들의 국지적 저장을 위한 캐시 또는 캐시 메모리를 포함할 수 있다. 프로세서(402)의 동작들은 직접 또는 근거리 또는 다른 유형의 네트워크를 통해 결합될 수 있는 다수의 기계들에 걸쳐 분산될 수 있다.
[0003] 메모리(406)는 휘발성 메모리, 비휘발성 메모리, 및/또는 이들의 조합을 포함할 수 있다. 예를 들어, 메모리(406)는 DDR SDRAM과 같은 하나 이상의 DRAM 모듈과 같은 휘발성 메모리, 및 디스크 드라이브, 솔리드 스테이트 드라이브, 플래시 메모리, 상변화 메모리(PCM), 및/또는 예컨대 활성 전원의 부재시에 영구적 전자 정보 저장이 가능한 임의의 형태의 비휘발성 메모리와 같은 비휘발성 메모리를 포함할 수 있다. 메모리(406)는 프로세서(402)에 의한 처리를 위한 데이터 및/또는 명령들을 저장할 수 있는, 현재 존재하거나 이후에 개발될 다른 유형의 디바이스 또는 다수의 디바이스를 포함할 수 있다. 프로세서(402)는 버스(404)를 통해 메모리(406) 내의 데이터에 액세스하고/하거나 이를 조작할 수 있다. 도 4에 단일 블록으로서 도시되지만, 메모리(406)는 다수의 유닛으로서 구현될 수 있다. 예를 들어, 컴퓨팅 디바이스(400)는 RAM과 같은 휘발성 메모리, 및 하드 드라이브 또는 다른 저장소와 같은 영구적 메모리를 포함할 수 있다. 메모리(406)는 네트워크 기반 메모리 또는 클라이언트들 및/또는 서버들의 동작들을 수행하는 다수의 기계 내의 메모리와 같이 다수의 기계에 걸쳐 분산될 수 있다.
[0004] 메모리(406)는 프로세서(402)에 의한 즉각적인 액세스를 위한 실행가능 명령들(408); 애플리케이션 데이터(410)와 같은 데이터; 운영 체제(412); 또는 이들의 조합을 포함할 수 있다. 실행가능 명령들(408)은, 예를 들어, 프로세서(402)에 의해 실행되도록 비휘발성 메모리로부터 휘발성 메모리로 전체적으로 또는 부분적으로 로딩 및/또는 복사될 수 있는 하나 이상의 애플리케이션 프로그램을 포함할 수 있다. 실행가능 명령들(408)은 본 명세서에 설명된 다양한 기능들을 수행하기 위해 프로그램가능 모듈들 및/또는 알고리즘들, 기능 프로그램들, 코드들, 코드 세그먼트들, 및/또는 이들의 조합들로 조직화될 수 있다. 예를 들어, 메모리(406)는 컴퓨팅 디바이스(400)를 포함하는 시스템으로 하여금 도 5의 프로세스(500), 도 6의 프로세스(600), 도 10의 프로세스(1000), 또는 도 11의 프로세스(1100)를 구현하게 하기 위해 프로세서(402)에 의해 실행가능한 명령들을 포함할 수 있다.
[0005] 애플리케이션 데이터(410)는 예를 들어 사용자 파일들; 데이터베이스 카탈로그들 및/또는 사전들; 웹 브라우저, 웹 서버, 데이터베이스 서버와 같은 기능 프로그램들에 대한 구성 정보; 및/또는 이들의 조합을 포함할 수 있다. 운영 체제(412)는 예를 들어 Microsoft Windows
Figure 112022113352092-pct00001
, Mac OS X
Figure 112022113352092-pct00002
, 또는 Linux
Figure 112022113352092-pct00003
; 스마트폰 또는 태블릿 디바이스와 같은 소형 디바이스에 대한 운영 체제; 또는 메인프레임 컴퓨터와 같은 대형 디바이스에 대한 운영 체제일 수 있다. 메모리(406)는 하나 이상의 디바이스를 포함할 수 있고, 솔리드 스테이트 또는 자기 저장소와 같은 하나 이상의 유형의 저장소를 이용할 수 있다.
[0006] 주변기기들(414)은 버스(404)를 통해 프로세서(402)에 결합될 수 있다. 주변기기들은 컴퓨팅 디바이스(400) 자체 및/또는 컴퓨팅 디바이스(400) 주위의 환경을 모니터링할 수 있는 센서들 또는 검출기들, 또는 임의의 수의 센서들 또는 검출기들을 포함하는 디바이스들일 수 있다. 예를 들어, 컴퓨팅 디바이스(400)는 GPS(global positioning system) 위치 유닛과 같은 지리공간적 위치 식별 유닛을 포함할 수 있다. 다른 예로서, 컴퓨팅 디바이스(400)는 프로세서(402)와 같은 컴퓨팅 디바이스(400)의 컴포넌트들의 온도들을 측정하기 위한 온도 센서를 포함할 수 있다. 고려될 수 있는 바와 같이, 다른 센서들 또는 검출기들이 컴퓨팅 디바이스(400)와 함께 사용될 수 있다. 일부 구현들에서, 클라이언트 및/또는 서버는 주변기기들(414)을 생략할 수 있다. 일부 구현들에서, 전원(416)은 배터리일 수 있고, 컴퓨팅 디바이스(400)는 외부 전력 분배 시스템과 독립적으로 동작할 수 있다. 주변기기들(414) 또는 전원(416)과 같은, 컴퓨팅 디바이스(400)의 컴포넌트들 중 임의의 것은 버스(404)를 통해 프로세서(402)와 통신할 수 있다. 여기서는 단일 버스로서 묘사되지만, 버스(404)는 다양한 브리지들, 제어기들, 및/또는 어댑터들을 통해 서로 접속될 수 있는 다수의 버스들로 구성될 수 있다.
[0007] 네트워크 통신 유닛(418)은 또한 버스(404)를 통해 프로세서(402)에 결합될 수 있다. 일부 구현들에서, 네트워크 통신 유닛(418)은 하나 이상의 송수신기를 포함할 수 있다. 네트워크 통신 유닛(418)은 이더넷과 같은 유선 네트워크 인터페이스 또는 무선 네트워크 인터페이스일 수 있는 네트워크 인터페이스를 통해 네트워크(106)와 같은 네트워크에 대한 접속 또는 링크를 제공한다. 예를 들어, 컴퓨팅 디바이스(400)는 이더넷, TCP, IP, 전력선 통신(PLC), WiFi, 적외선, GPRS, GSM, CDMA, TDMA, UMTS 또는 다른 적절한 프로토콜들과 같은 하나 이상의 네트워크 프로토콜을 사용하여 네트워크 통신 유닛(418) 및 네트워크 인터페이스를 통해 다른 디바이스들과 통신할 수 있다.
[0049] 사용자 인터페이스(420)는 디스플레이; 마우스, 터치패드, 터치스크린 등과 같은 포지션 입력 디바이스; 키보드; 및/또는 임의의 다른 인간 및 기계 인터페이스 디바이스들을 포함할 수 있다. 사용자 인터페이스(420)는 버스(404)를 통해 프로세서(402)에 결합될 수 있다. 사용자가 컴퓨팅 디바이스(400)를 프로그래밍하거나 다른 방식으로 사용할 수 있게 하는 다른 인터페이스 디바이스들이 디스플레이에 추가하여 또는 디스플레이에 대한 대안으로서 제공될 수 있다. 일부 구현들에서, 사용자 인터페이스(420)는 액정 디스플레이(LCD), 음극선관(CRT), 발광 다이오드(LED) 디스플레이(예를 들어, OLED 디스플레이), 또는 다른 적합한 디스플레이일 수 있는 디스플레이를 포함할 수 있다. 사용자 인터페이스(420)는 전자 오디오 데이터를 매체(예를 들어, 공기) 내의 사운드로 변환하도록 구성되는 오디오 드라이버(예를 들어, 스피커)를 포함할 수 있다. 예를 들어, 사용자 인터페이스(420)의 스피커는 오디오 데이터(예를 들어, 음악 또는 음성 신호들의 인코딩)를 재생하는 데 사용될 수 있다.
[0050] 도 5는 데이터의 강건한 송신을 위해 패킷 페이로드 맵핑을 사용하여 데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 프로세스(500)의 일례를 예시하는 흐름도이다. 프로세스(500)는 스트라이드 파라미터 및 중복 파라미터를 나타내는 패킷 맵 데이터 구조를 송신하는 단계(502); 데이터의 프레임들의 시퀀스에 대해, 시퀀스로부터의 다음 프레임을 송신을 위한 주 프레임으로서 선택하고(510), 스트라이드 파라미터에 대응하는 데이터의 프레임들의 시퀀스 내의 간격으로 주 프레임 및 하나 이상의 선행 프레임들을 포함하는 패킷을 송신하는 단계(520); (동작 525에서) 마지막 프레임이 주 프레임으로서 송신되었을 때(520), (동작 535에서) 프레임들의 시퀀스의 마지막 프레임이 1 + 중복 파라미터와 동일한 횟수만큼 송신될 때까지, 더미 인덱스로부터 스트라이드 간격에서 하나 이상의 선행 프레임과 함께 시퀀스의 마지막 프레임을 지나 다음 시퀀스 인덱스에 대응하는 더미 주 프레임을 포함하는 패킷들을 송신하는 단계(530); 및 데이터 송신을 종료하는 단계(540)를 포함한다. 예를 들어, 도 5의 프로세스(500)는 도 1의 서버 디바이스(102)에 의해 구현될 수 있다. 예를 들어, 도 5의 프로세스(500)는 도 4의 컴퓨팅 디바이스(400)에 의해 구현될 수 있다.
[0051] 프로세스(500)는 스트라이드 파라미터를 나타내고 데이터의 프레임들의 시퀀스로부터의 프레임들을 포함하는 패킷들의 세트의 각각의 패킷에서 송신될 중복(redundant) 선행 프레임들의 카운트를 나타내는 패킷 맵 데이터 구조를 송신하는 단계(502)를 포함한다. 스트라이드 파라미터는 패킷들 중의 패킷에 포함된 하나 이상의 선행 패킷들과 주 패킷 사이의 프레임들의 시퀀스 내의 간격을 지정할 수 있다. 일부 구현들에서, 스트라이드 파라미터는 4보다 크다. 중복 선행 프레임들의 카운트는 패킷 페이로드 맵핑 스킴에 대한 중복 파라미터라고 지칭될 수 있다. 예를 들어, 패킷 맵 데이터 구조는 각각의 선행 프레임에 대해 하나의 정수를 갖는, 대응하는 선행 프레임들의 프레임 인덱스 오프셋들인 정수들의 리스트(예를 들어, 스트라이드 5 및 중복 3을 갖는 스킴에 대한 {- 5, -10, -15} 또는 스트라이드 16 및 중복 4를 갖는 스킴에 대한 {-16, -32, -48, -64})를 포함할 수 있다. 일부 구현들에서, 패킷 맵 데이터 구조는 각각 스트라이드 파라미터 및 중복 파라미터를 나타내는 2개의 양의 정수를 포함한다. 패킷 맵 데이터 구조는 네트워크 인터페이스(예를 들어, 네트워크 인터페이스(104))를 사용하여 송신될 수 있다(502). 일부 구현들에서, 패킷 맵 데이터 구조는 데이터의 프레임들이 송신(520)되기 시작하기 전에 별개의 패킷에서 한번 송신된다(502). 일부 구현들에서, 패킷 맵 데이터 구조는 프레임들의 시퀀스를 송신하는 데 사용되는 패킷들의 세트 내의 패킷들 각각에 대한 헤더의 일부로서 송신된다(502). 예를 들어, 데이터의 프레임들의 시퀀스는 오디오 데이터(예를 들어, 음악 또는 음성 신호들의 인코딩)의 프레임들의 시퀀스일 수 있다. 예를 들어, 데이터의 프레임들의 시퀀스는 비디오 데이터의 프레임들의 시퀀스일 수 있다.
[0052] 프로세스(500)는 다음 프레임을 다음 패킷에서의 송신을 위한 주 프레임으로서 선택하는 단계(510)를 포함한다. 예를 들어, 다음 프레임 포인터 또는 카운터는 데이터의 프레임들의 시퀀스의 시작에서의 프레임을 가리키도록 초기화될 수 있고, 프레임 포인터 또는 카운터는 주 프레임으로서 송신을 위한 다음 프레임을 선택하기 위해(510) 증분되거나 다른 방식으로 업데이트될 수 있다. 일부 구현들에서, 데이터의 프레임들을 보유하는 패킷들에 대한 송신의 순서는 패킷 맵핑 스킴에 대한 큰 버스트 패킷 손실 이벤트들의 영향들을 완화하기 위해 무작위화될 수 있다. 예를 들어, 프로세스(500)는, 제1 패킷 및 제2 패킷을 송신하기 전에, 제1 패킷 및 제2 패킷에 대한 송신의 순서를 무작위로 결정하는 단계를 포함할 수 있다. 송신될 패킷들에 대한 데이터의 프레임들은 프레임 비순차적 송신(out-of-frame-order transmission)을 가능하게 하기 위해 버퍼링될 수 있다. 송신 측 버퍼에 대한 다양한 크기들이 원하는 버스트 손실 허용오차 및 애플리케이션에서의 종단간 레이턴시에 대한 허용오차의 레벨에 따라 사용될 수 있다. 예를 들어, 송신기 측 버퍼는 대응하는 수신기 디바이스에서 패킷 맵핑 스킴에 대해 링 버퍼에 의해 저장된 다수의 패킷들과 매칭되는 다수의 패킷들에 대한 데이터를 저장하는 크기를 가질 수 있다. 일부 구현들에서, 송신의 순서를 무작위로 결정하는 단계는 송신을 위한 다음 패킷을 선택하기 위해 제1 패킷 및 제2 패킷을 포함하는 각각의 패킷과 연관된 데이터를 저장하는 엔트리들을 갖는 버퍼에 대한 인덱스를 무작위로 생성하는 단계를 포함한다. 패킷은 송신을 위한 무작위 순서가 결정되기 전에 또는 송신을 위한 무작위 순서가 결정된 후에 패킷 맵 데이터 구조에 의해 인코딩된 패킷 맵핑 스킴에 의해 그의 주 프레임에 관련된 데이터의 프레임들에 기초하여 생성될 수 있다. 예를 들어, 다음 프레임을 다음 패킷에서의 송신을 위한 주 프레임으로서 선택하는 단계(510)는 송신 순서를 무작위화하기 위해 도 12a의 프로세스(1200)를 구현하는 단계를 포함할 수 있다. 예를 들어, 다음 프레임을 다음 패킷에서의 송신을 위한 주 프레임으로서 선택하는 단계(510)는 송신 순서를 무작위화하기 위해 도 12b의 프로세스(1250)를 구현하는 단계를 포함할 수 있다.
[0053] 프로세스(500)는 데이터의 프레임들의 시퀀스로부터의 주 프레임(예를 들어, 현재 선택된(510) 프레임) 및 하나 이상의 선행 프레임들을 포함하는 패킷을 송신하는 단계(520)를 포함한다. 제1 패킷의 하나 이상의 선행 프레임들은 (예를 들어, 스트라이드 파라미터 5에 대한 패킷 인코딩 방식(200)에 대해 예시된 바와 같이) 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 제1 패킷의 주 프레임으로부터 분리된다. 예를 들어, 패킷은 네트워크 인터페이스(예를 들어, 네트워크 인터페이스(104))를 사용하여 송신될 수 있다(520). 일부 구현들에서, 패킷의 하나 이상의 선행 프레임들은 데이터의 프레임들의 시퀀스로부터의 2개 이상의 선행 프레임을 포함한다. 패킷은 네트워크(예를 들어, 네트워크(106))를 통한 패킷의 송신을 용이하게 하기 위해 헤더 데이터(예를 들어, IPv6 헤더 및 UDP 헤더)와 같은 다른 데이터를 포함할 수 있다. (동작 525에서) 송신할 데이터의 프레임들의 시퀀스 내에 더 많은 프레임이 존재하는 경우, 다음 프레임이 선택되고(510), 새로운 주 프레임에 대한 하나 이상의 대응하는 선행 프레임과 함께 다른 패킷 내의 주 프레임으로서 송신될 수 있다(520). 프로세스(500)가 시작되고 있을 때, 선행 프레임들 중 하나 이상은 재송신할 프레임들의 시퀀스 내에 대응하는 더 이른 프레임이 존재하지 않는 패킷으로부터 생략될 수 있다. 스트라이드 파라미터에 대응하는 다수의 패킷이 송신된 후에, 더 이른 패킷(예를 들어, 제1 패킷)에서 주 프레임으로서 이전에 송신된 프레임이 더 늦은 패킷(예를 들어, 제2 패킷) 내의 선행 프레임으로서 재송신될 수 있다. 예를 들어, 프로세스(500)는 네트워크 인터페이스를 사용하여, 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 하나 이상의 선행 프레임들을 포함하는 제2 패킷을 송신하는 단계(520)를 포함할 수 있고, 제2 패킷의 하나 이상의 선행 프레임들은 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 제2 패킷의 주 프레임으로부터 분리되고, 제1 패킷의 주 프레임은 제2 패킷의 하나 이상의 선행 프레임들 중 하나이다. 일부 구현들에서, 프로세스(500)는 네트워크 인터페이스를 사용하여, 스트라이드 파라미터의 배수들만큼 프레임들의 시퀀스 내에서 분리되는, 데이터의 프레임들의 시퀀스로부터의 하나 이상의 선행 프레임들을 각각 포함하는 각각의 패킷들의 주 프레임들로서의 데이터의 프레임들의 시퀀스 내의 제1 패킷의 주 프레임과 제2 패킷의 주 프레임 사이의 모든 프레임들을 송신하는 단계(520)를 포함한다. 패킷들은 네트워크를 통해 하나 이상의 클라이언트 디바이스로 송신될 수 있다(520). 예를 들어, 제1 패킷 및 제2 패킷은 브로드캐스트 패킷들일 수 있다. 예를 들어, 제1 패킷 및 제2 패킷은 멀티캐스트 패킷들일 수 있다. 일부 구현들에서, 데이터의 프레임들의 시퀀스 내의 프레임들은 모두 동일한 크기이다.
[0054] (동작 525에서) 프레임들의 시퀀스의 모든 프레임들이 각각의 패킷의 주 프레임들로서 송신되었을 때(520), 스트라이드에서 대응하는 선행 프레임들을 갖는 시퀀스의 마지막 프레임을 지나 다음 시퀀스 인덱스에 대응하는 더미 주 프레임을 포함하는(또는 주 프레임을 생략하는) 하나 이상의 패킷은 (동작 535에서) 모든 프레임들이 중복 파라미터에 대응하는 횟수만큼 선행 프레임들로서 송신될 때까지 송신될 수 있다(530). (동작 535에서) 시퀀스의 모든 프레임들이 중복 파라미터 횟수만큼 선행 프레임들로서 송신되었을 때, 데이터의 프레임들의 시퀀스의 송신은 종료된다(540).
[0055] 도 6은 데이터의 강건한 송신을 위해 패킷 페이로드 맵핑을 사용하여 데이터의 프레임들의 시퀀스로 분할된 데이터를 수신하기 위한 프로세스(600)의 일례를 예시하는 흐름도이다. 프로세스(600)는 스트라이드 파라미터 및 중복 파라미터를 나타내는 패킷 맵 데이터 구조를 수신하는 단계(610); 각각이 스트라이드 파라미터에 따라 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 하나 이상의 선행 프레임들을 각각 포함하는 패킷들을 수신하는 단계(620); 각각이 패킷의 주 프레임 및 하나 이상의 선행 프레임을 유지하는 엔트리들을 갖는 버퍼에 패킷들의 프레임들을 저장하는 단계(630); 및 버퍼의 출력에서 프레임들의 단일 사본을 획득하기 위해 버퍼로부터 프레임들을 판독하는 단계(640)를 포함한다. 예를 들어, 도 6의 프로세스(600)는 도 1의 클라이언트 디바이스(110)에 의해 구현될 수 있다. 예를 들어, 도 6의 프로세스(600)는 도 4의 컴퓨팅 디바이스(400)에 의해 구현될 수 있다.
[0056] 프로세스(600)는, 네트워크 인터페이스를 사용하여, 스트라이드 파라미터를 나타내고 패킷들 각각에서 송신될 중복 선행 프레임들의 카운트를 나타내는 패킷 맵 데이터 구조를 수신하는 단계(610)를 포함한다. 스트라이드 파라미터는 패킷들 중의 패킷에 포함된 하나 이상의 선행 패킷과 주 패킷 사이의 프레임들의 시퀀스 내의 간격을 지정할 수 있다. 일부 구현들에서, 스트라이드 파라미터는 4보다 크다. 중복 선행 프레임들의 카운트는 패킷 페이로드 맵핑 스킴에 대한 중복 파라미터라고 지칭될 수 있다. 예를 들어, 패킷 맵 데이터 구조는 각각의 선행 프레임에 대해 하나의 정수를 갖는, 대응하는 선행 프레임들의 프레임 인덱스 오프셋들인 정수들의 리스트(예를 들어, 스트라이드 5와 중복 3을 갖는 스킴에 대한 {-5, -10, -15} 또는 스트라이드 16과 중복 4를 갖는 스킴에 대한 {-16, -32, -48, -64})를 포함할 수 있다. 일부 구현들에서, 패킷 맵 데이터 구조는 스트라이드 파라미터와 중복 파라미터를 각각 나타내는 2개의 양의 정수를 포함한다. 예를 들어, 패킷 맵 데이터 구조는 네트워크 인터페이스(예를 들어, 네트워크 인터페이스(120))를 사용하여 수신될 수 있다(610). 일부 구현들에서, 패킷 맵 데이터 구조는 데이터의 프레임들이 수신(620)되기 시작하기 전에 별개의 패킷에서 한 번 수신된다(610). 일부 구현들에서, 패킷 맵 데이터 구조는 프레임들의 시퀀스를 송신하는 데 사용되는 패킷들의 세트 내의 패킷들 각각에 대한 헤더의 일부로서 수신된다(610). 예를 들어, 데이터의 프레임들의 시퀀스는 오디오 데이터(예를 들어, 음악 또는 음성 신호의 인코딩)의 프레임들의 시퀀스일 수 있다. 예를 들어, 데이터의 프레임들의 시퀀스는 비디오 데이터의 프레임들의 시퀀스일 수 있다.
[0057] 프로세스(600)는 각각이 데이터의 프레임들의 시퀀스로부터의 주 프레임과 하나 이상의 선행 프레임들을 각각 포함하는 패킷들을 수신하는 단계(620)를 포함한다. 각각의 패킷의 하나 이상의 선행 프레임들은 (예를 들어, 5의 스트라이드 파라미터에 대한 패킷 인코딩 스킴(200)에 대해 예시된 바와 같이) 프레임들의 시퀀스 내의 각각의 패킷의 주 프레임으로부터 스트라이드 파라미터의 각각의 배수만큼 분리된다. 예를 들어, 패킷들은 네트워크 인터페이스(예를 들어, 네트워크 인터페이스(120))를 사용하여 수신될 수 있다(620). 일부 구현들에서, 각각의 개개의 패킷의 하나 이상의 선행 프레임들은 중복 파라미터와 동일한 수의 선행 프레임을 포함하고, 중복 파라미터는 1보다 크다. 패킷들은 하나 이상의 서버 디바이스(예를 들어, 서버 디바이스(102))로부터 네트워크를 통해 수신될 수 있다(620).
[0058] 프로세스(600)는 패킷의 주 프레임 및 하나 이상의 선행 프레임을 각각 유지하는 엔트리들을 갖는 버퍼(예를 들어, 링 버퍼(302)) 내에 패킷들의 프레임들을 저장하는 단계(630)를 포함한다. 일부 구현들에서, 각각의 개개의 패킷의 하나 이상의 선행 프레임들은 중복 파라미터와 동일한 수의 선행 프레임을 포함하고, 버퍼는 스트라이드 파라미터 x 중복 파라미터 + 1과 동일한 수의 패킷으로부터의 프레임들을 저장하는 크기를 갖는다. 일부 구현들에서, 수신된(620) 패킷들은 패킷들의 페이로드로부터의 프레임들이 버퍼 내에 저장되기(630) 전에 지터 버퍼를 통과할 수 있다. 예를 들어, 프로세스(600)는 패킷들이 수신될 때 지터 버퍼 내에 패킷들을 저장하는 단계)(620); 및 버퍼 내에 패킷들의 프레임들을 저장하기(630) 전에 지터 버퍼로부터 패킷들을 판독하는 단계를 포함할 수 있다. 일부 구현들에서, 데이터의 프레임들의 시퀀스 내의 프레임들은 모두 동일한 크기이다.
[0059] 프로세스(600)는 버퍼(예를 들어, 링 버퍼(302))로부터 프레임들을 판독하는 단계(640)를 포함한다. 예를 들어, 도 7의 프로세스(700)는 버퍼로부터 프레임들을 판독하도록(640) 구현될 수 있다. 일부 구현들에서, 시퀀스로부터의 데이터의 프레임들은 오디오 데이터를 포함하고, 프로세스(600)는 버퍼로부터 프레임을 판독하는 것에 응답하여 프레임의 오디오 데이터를 재생하는 단계를 포함한다. 일부 구현들에서, 버퍼로부터 판독된(640) 데이터의 프레임들은 재조립 버퍼(예를 들어, 도 8의 재조립 버퍼(820))에서 데이터의 프레임들의 시퀀스로 재조립된다. 예를 들어, 도 9의 프로세스(900)는 오디오 데이터의 재생을 용이하게 하기 위해 데이터의 프레임들의 시퀀스를 재조립하도록 구현될 수 있다.
[0060] 도 7은 각각이 패킷의 주 프레임 및 하나 이상의 선행 프레임을 유지하는 엔트리들을 갖는 버퍼로부터 데이터의 프레임들을 판독하기 위한 프로세스(700)의 일례를 예시하는 흐름도이다. 프로세스(700)는, 버퍼에 기초하여, 데이터의 프레임들의 시퀀스 내의 다음 프레임인 주 프레임을 갖는 패킷이 손실되었는지를 결정하는 단계(710); (동작 715에서) 패킷이 손실되지 않았을 때, 버퍼로부터의 프레임을 버퍼의 엔트리들 중 하나로부터의 주 프레임으로서 판독하는 단계(720); (동작 715에서) 패킷이 손실되었을 때, 버퍼 내의 다음 프레임의 중복 사본을 버퍼 내의 더 새로운 엔트리의 선행 프레임으로서 발견하고(740), 버퍼로부터의 다음 프레임을 엔트리의 선행 프레임으로서 판독하는 단계(750); 및 (동작 755에서) 판독할 프레임들의 시퀀스 내의 더 이상의 프레임이 존재하지 않을 때, 데이터 수신을 종료하는 단계(760)를 포함한다. 예를 들어, 도 7의 프로세스(700)는 도 1의 클라이언트 디바이스(110)에 의해 구현될 수 있다. 예를 들어, 도 7의 프로세스(700)는 도 4의 컴퓨팅 디바이스(400)에 의해 구현될 수 있다.
[0061] 프로세스(700)는, 버퍼(예를 들어, 링 버퍼(302))에 기초하여, 데이터의 프레임들의 시퀀스 내의 다음 프레임인 주 프레임을 갖는 패킷이 손실되었다고 결정하는 단계(710)를 포함한다. 예를 들어, 가장 오래된 엔트리에 대응하는 패킷이 손실되었는지를 결정하기 위해(710) 버퍼 내의 가장 오래된 엔트리가 체크될 수 있다. 일부 구현들에서, 엔트리는 수신된 패킷으로부터의 유효 데이터에 대한 포인터 또는 대응하는 패킷이 손실된 경우의 널 포인터를 포함한다. 일부 구현들에서, 버퍼는 엔트리가 데이터의 유효 프레임들을 현재 저장하고 있는지의 표시(예를 들어, 플래그)를 포함하며, 이는 수신된 패킷으로부터의 데이터가 엔트리에 저장될 때 설정되고, 엔트리가 삭제될 때(730)(예를 들어, 주 프레임의 판독 후에) 재설정될 수 있다. 일부 구현들에서, 패킷이 손실되었다고 결정하는 단계(710)는 관심 패킷에 대응하는 엔트리에 저장된 데이터에 대해 데이터 무결성 체크(예를 들어, 순환 중복 체크(CRC))를 수행하는 단계를 포함한다.
[0062] 프로세스(700)는 (동작 715에서) 패킷이 손실되지 않았을 때, 버퍼로부터의 프레임(예로서, 제1 프레임)을 버퍼의 엔트리들 중 하나로부터의 주요 프레임으로서 판독하는 단계(720)를 포함한다. 프로세스(700)는 버퍼의 엔트리(예로서, 제1 엔트리)의 주요 프레임이 버퍼로부터 판독되는 것(720)에 응답하여, 버퍼로부터 엔트리를 삭제하는 단계(730)를 포함한다. 예를 들어, 엔트리는 (예로서, 새로 수신된 패킷의 프레임들을 저장하기 위해) 재사용을 위해 엔트리의 메모리를 해제함으로써 삭제될 수 있다(730).
[0063] 프로세스(700)는, (동작 715에서) 패킷이 손실되었을 때, 버퍼 내의 다음 프레임의 중복 사본을 버퍼 내의 더 새로운 엔트리의 선행 프레임으로서 발견하는 단계(740)를 포함한다. 예를 들어, (예를 들어, 링 버퍼(302)의 내부 링들에 의해 예시되고, 도 3a-b와 관련하여 논의된 바와 같이) 더 늦은 패킷들의 선행 프레임들로서 버퍼 내에 저장된 프레임의 중복 파라미터 사본들까지 존재할 수 있다. 패킷 페이로드 맵핑 스킴 하에서 프레임을 선행 프레임으로서 보유하는 패킷들에 대응하는 이러한 엔트리들 중 하나 이상은 프레임의 유효 사본을 발견하기 위해(740) 체크될 수 있다. 프로세스(700)는, 패킷이 손실되었다는 결정에 응답하여, 버퍼로부터의 다음 프레임을 버퍼의 엔트리들 중 하나로부터의 선행 프레임으로서 판독하는 단계(750)를 포함한다. 도 7에 명시적으로 도시되지 않았지만, 프로세스(700)는 데이터의 프레임들의 시퀀스 내의 더 이른 그리고/또는 더 늦은 데이터에 기초하여 에러 메시지를 리턴하고/하거나 누락 데이터를 보간함으로써 프레임의 사본들 중 어느 것도 성공적으로 수신되지 않았고 버퍼 내에서 어떠한 사본도 발견(740)되지 않은 경우들을 핸들링할 수 있다.
[0064] (동작 755에서) 판독될 데이터의 프레임들의 시퀀스 내에 더 이상의 프레임이 존재하지 않을 때, 데이터 수신이 종료될 수 있다(760).
[0065] 도 8은 데이터의 강건한 송신을 위해 패킷 페이로드 맵핑을 사용하여 데이터의 프레임들의 시퀀스로 분할된 데이터를 수신하도록 구성된 컴퓨팅 디바이스에서의 데이터 흐름(800)의 일례의 블록도이다. 패킷 소스(802)는 각각이 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 하나 이상의 선행 프레임들을 각각 포함하는 패킷들을 출력한다. 각각의 패킷의 하나 이상의 선행 프레임들은 (예를 들어, 5의 스트라이드 파라미터에 대한 패킷 인코딩 스킴(200)에 대해 예시된 바와 같이) 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 각각의 패킷의 주 프레임으로부터 분리된다. 예를 들어, 패킷 소스는 서버 디바이스(예를 들어, 서버 디바이스(102))로부터 네트워크(예를 들어, 네트워크(106))를 통해 패킷들을 수신하는 네트워크 통신 유닛(예를 들어, 네트워크 통신 유닛(418))일 수 있다. 일부 구현들에서, 패킷 소스(802)는 패킷들을 송신된 순서로 출력하도록 구성되는 지터 버퍼를 포함한다.
[0066] 데이터 흐름(800)은 각각이 패킷의 주 프레임 및 하나 이상의 선행 프레임을 유지하는 엔트리들을 갖는 버퍼(예를 들어, 링 버퍼(302))를 포함한다. 선행 프레임들은 주 프레임들로서 더 이른 패킷들에서 송신된 프레임의 중복 사본들일 수 있다. 따라서, 버퍼(810)는 (예를 들어, 도 3a-b와 관련하여 논의된 바와 같이) 데이터의 프레임들의 시퀀스 내의 프레임들의 다수의 사본을 저장할 수 있다. 이러한 중복은 데이터 흐름(800)을 패킷 소스(802)에서의 패킷 손실의 상당한 버스트들에 대해 강건하게 할 수 있다.
[0067] 데이터 흐름(800)은 데이터의 프레임들의 시퀀스의 프레임을 각각 유지하는 엔트리들을 갖는 재조립 버퍼(820)를 포함한다. 프레임들의 단일 사본들이 버퍼(810)로부터 판독되고, 재조립 버퍼(820)에 기입되어, 잡음이 많은 네트워크 상에서의 송신에 사용되었던 중복을 제거하고/하거나 프레임들을 적절하게 순서화하여, 프레임들을 사용가능한 형태의 소스 데이터로 재조립할 수 있다(예를 들어, 프레임들로 분할된 파일을 재조립하거나 사용자 인터페이스에서의 재생을 위해 오디오 또는 비디오 데이터의 더 큰 수퍼 프레임을 큐잉(queuing)할 수 있다). 예를 들어, 재조립 버퍼(820)는 스트라이드 파라미터와 동일한 수의 프레임들에 대응하는 크기를 가질 수 있다. 멀티-스트라이드 패킷-프레임 맵을 사용하는 일부 구현들에서, 재조립 버퍼(820)는 수신된 패킷들에 의해 사용되는 패킷-프레임 맵의 최대 스트라이드 파라미터와 동일한 수의 프레임들을 저장하는 크기를 가질 수 있다. 예를 들어, 재조립 버퍼(820)는 선입선출(FIFO) 버퍼일 수 있다. 예를 들어, 재조립 버퍼(820)는 원형 버퍼로서 구현될 수 있다.
[0068] 데이터 흐름(800)은 재조립 버퍼(820)로부터 프레임화된 데이터를 소비하는 데이터 싱크(822)를 포함한다. 예를 들어, 데이터 싱크(822)는 프레임들 내의 오디오 데이터를 재생하는 데 사용되는 오디오 드라이버(예를 들어, 스피커를 포함함)를 포함할 수 있다. 예를 들어, 데이터 싱크(822)는 프레임화된 데이터로 기입되고 있는 비휘발성 메모리 내의 파일일 수 있다.
[0069] 도 9는 패킷 페이로드 중복을 제거한 후에 프레임화된 데이터를 재조립 버퍼를 통과시키기 위한 프로세스(900)의 일례를 예시하는 흐름도이다. 프로세스(900)는 재조립 버퍼로부터 가장 오래된 프레임에 저장된 오디오 데이터를 재생하는 단계(910); 재조립 버퍼로부터 가장 오래된 프레임을 삭제하는 단계(920); 및 버퍼로부터 판독된 프레임들을 재조립 버퍼에 기입하는 단계(930)를 포함한다. 예를 들어, 도 9의 프로세스(900)는 도 1의 클라이언트 디바이스(110)에 의해 구현될 수 있다. 예를 들어, 도 9의 프로세스(900)는 도 4의 컴퓨팅 디바이스(400)에 의해 구현될 수 있다.
[0070] 프로세스(900)는 재조립 버퍼(예를 들어, 재조립 버퍼(820))로부터 가장 오래된 프레임에 저장된 오디오 데이터를 재생하는 단계(910)를 포함한다. 예를 들어, 오디오 데이터는 사용자 인터페이스(420)의 오디오 드라이버(예를 들어, 스피커)를 사용하여 재생될 수 있다(910). 프로세스(900)는 재조립 버퍼로부터 가장 오래된 프레임을 삭제하는 단계(920)를 포함한다. 예를 들어, 엔트리는 재사용을 위해 엔트리의 메모리를 해제함으로써(예를 들어, 재조립 버퍼의 포인터 또는 카운터를 업데이트함으로써) 삭제될 수 있다(920).
[0071] 프로세스(900)는 버퍼(예를 들어, 버퍼(810))로부터 판독된 프레임들(예를 들어, 제1 프레임 및 다음 프레임을 포함함)을 재조립 버퍼(예를 들어, 재조립 버퍼)에 기입하는 단계를 포함한다. 재조립 버퍼는 각각이 데이터의 프레임들의 시퀀스의 프레임으로 구성되는 엔트리들을 포함할 수 있다. 일부 구현들에서, 재조립 버퍼는 스트라이드 파라미터와 동일한 수의 프레임들을 저장하는 크기를 갖는다.
[0072] 도 10은 데이터의 강건한 송신을 위해 다수의 스트라이드를 갖는 패킷 페이로드 맵핑을 사용하여 데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 프로세스(1000)의 일례를 예시하는 흐름도이다. 프로세스(1000)는 다수의 스트라이드 파라미터 및 대응하는 중복 파라미터(예를 들어, 스트라이드들 및 대응하는 세그먼트들)를 나타내는 패킷 맵 데이터 구조를 송신하는 단계(1002); 데이터의 프레임들의 시퀀스에 대해, 시퀀스로부터의 다음 프레임을 송신을 위한 주 프레임으로서 선택하고(1010), 다수의 스트라이드 파라미터에 대응하는 데이터의 프레임들의 시퀀스 내의 간격들로 주 프레임 및 2개 이상의 선행 프레임들을 포함하는 패킷을 송신하는 단계(1020); (동작 1025에서) 마지막 프레임이 주 프레임으로서 송신되었을 때(1020), (동작 1035에서) 프레임들의 시퀀스의 마지막 프레임이 다수의 스트라이드 파라미터에 대한 중복 파라미터들의 합에 1을 더한 것과 동일한 횟수만큼 송신될 때까지, 더미 인덱스로부터 스트라이드 간격들로 하나 이상의 선행 프레임과 함께 시퀀스의 마지막 프레임을 지나 다음 시퀀스 인덱스에 대응하는 더미 주 프레임을 포함하는 패킷들을 송신하는 단계(1030); 및 데이터 송신을 종료하는 단계(1040)를 포함한다. 예를 들어, 도 10의 프로세스(1000)는 도 1의 서버 디바이스(102)에 의해 구현될 수 있다. 예를 들어, 도 10의 프로세스(1000)는 도 4의 컴퓨팅 디바이스(400)에 의해 구현될 수 있다.
[0073] 프로세스(1000)는, 제1 스트라이드 파라미터 및 제2 스트라이드 파라미터를 포함하는 다수의 스트라이드 파라미터를 나타내고, 데이터의 프레임들의 시퀀스로부터의 프레임들을 포함하는 패킷들의 세트의 각각의 패킷에서 송신될 각각의 스트라이드 파라미터에 대한 중복 선행 프레임들의 카운트들을 나타내는 패킷 맵 데이터 구조를 송신하는 단계(1002)를 포함한다. 각각의 스트라이드 파라미터는 패킷들의 패킷에 포함된 하나 이상의 선행 패킷들과 주 패킷 간의 프레임들의 시퀀스 내의 간격을 지정할 수 있다. 일부 구현들에서, 제1 스트라이드 파라미터는 3보다 작고, 제2 스트라이드 파라미터는 4보다 크다. 중복 선행 프레임들의 카운트들은 패킷 페이로드 맵핑 스킴에 대한 각각의 스트라이드 파라미터들에 대한 중복 파라미터들이라고 지칭될 수 있다. 예를 들어, 패킷 맵 데이터 구조는 각각의 선행 프레임에 대해 하나의 정수를 갖는, 대응하는 선행 프레임들의 프레임 인덱스 오프셋들인 정수들의 리스트(예를 들어, 2의 대응하는 중복과 함께 1의 제1 스트라이드를 그리고 3의 대응하는 중복과 함께 5의 제2 스트라이드를 갖는 스킴에 대한 {-1, -2, -5, -10, -15} 또는 3의 대응하는 중복과 함께 2의 제1 스트라이드를 그리고 4의 대응하는 중복과 함께 16의 제2 스트라이드를 갖는 방식에 대한 {-2, -4, -6, -16, -32, -48, -64})를 포함할 수 있다. 일부 구현들에서, 패킷 맵 데이터 구조는 스트라이드 파라미터 및 그것의 대응하는 중복 파라미터를 각각 나타내는 각각의 스트라이드 파라미터에 대한 2개의 양의 정수들을 포함한다. 패킷 맵 데이터 구조는 네트워크 인터페이스(예를 들어, 네트워크 인터페이스(104))를 사용하여 송신될 수 있다(1002). 일부 구현들에서, 패킷 맵 데이터 구조는 데이터의 프레임들이 송신(1020)되기 시작하기 전에 별개의 패킷에서 한 번 송신된다(1002). 일부 구현들에서, 패킷 맵 데이터 구조는 프레임들의 시퀀스를 송신하는 데 사용되는 패킷들의 세트 내의 패킷들 각각에 대한 헤더의 일부로서 송신된다(1002). 예를 들어, 데이터의 프레임들의 시퀀스는 오디오 데이터(예를 들어, 음악 또는 음성 신호들의 인코딩)의 프레임들의 시퀀스일 수 있다. 예를 들어, 데이터의 프레임들의 시퀀스는 비디오 데이터의 프레임들의 시퀀스일 수 있다.
[0074] 프로세스(1000)는 다음 프레임을 다음 패킷에서의 송신을 위한 주 프레임으로서 선택하는 단계(1010)를 포함한다. 예를 들어, 다음 프레임 포인터 또는 카운터는 데이터의 프레임들의 시퀀스의 시작에서의 프레임을 가리키도록 초기화될 수 있고, 프레임 포인터 또는 카운터는 주 프레임으로서 송신을 위해 다음 프레임을 선택하도록(1010) 증분되거나 다른 방식으로 업데이트될 수 있다. 일부 구현들에서, 데이터의 프레임들을 보유하는 패킷들에 대한 송신의 순서는 패킷 맵핑 스킴에 대한 큰 버스트 패킷 손실 이벤트들의 영향들을 완화하기 위해 무작위화될 수 있다. 예를 들어, 프로세스(1000)는, 제1 패킷 및 제2 패킷을 송신하기 전에, 제1 패킷 및 제2 패킷에 대한 송신의 순서를 무작위로 결정하는 단계를 포함할 수 있다. 송신될 패킷들에 대한 데이터의 프레임들은 프레임 비순차적 송신을 가능하게 하기 위해 버퍼링될 수 있다. 송신 측 버퍼에 대한 다양한 크기들은 원하는 버스트 손실 허용오차 및 애플리케이션에서의 종단간 레이턴시에 대한 허용오차의 레벨에 따라 사용될 수 있다. 예를 들어, 송신기 측 버퍼는 대응하는 수신기 디바이스에서 패킷 맵핑 스킴에 대해 링 버퍼에 의해 저장된 다수의 패킷들과 매칭되는 다수의 패킷들에 대한 데이터를 저장하는 크기를 가질 수 있다. 일부 구현들에서, 송신의 순서를 무작위로 결정하는 단계는 송신을 위한 다음 패킷을 선택하기 위해, 제1 패킷 및 제2 패킷을 포함하는 각각의 패킷들과 연관된 데이터를 저장하는 엔트리들을 갖는 버퍼에 대한 인덱스를 무작위로 생성하는 단계를 포함한다. 패킷은 송신을 위한 무작위 순서가 결정되기 전에 또는 송신을 위한 무작위 순서가 결정된 후에 패킷 맵 데이터 구조에 의해 인코딩된 패킷 맵핑 스킴에 의해 그의 주 프레임과 관련된 데이터의 프레임들에 기초하여 생성될 수 있다. 예를 들어, 다음 프레임을 다음 패킷에서의 송신을 위한 주 프레임으로서 선택하는 단계(1010)는 송신 순서를 무작위화하기 위해 도 12a의 프로세스(1200)를 구현하는 단계를 포함할 수 있다. 예를 들어, 다음 프레임을 다음 패킷에서의 송신을 위한 주 프레임으로서 선택하는 단계(1010)는 송신 순서를 무작위화하기 위해 도 12b의 프로세스(1250)를 구현하는 단계를 포함할 수 있다.
[0075] 프로세스(1000)는 데이터의 프레임들의 시퀀스로부터의 주 프레임(예를 들어, 현재 선택된 프레임(1010))과 2개 이상의 선행 프레임들을 포함하는 패킷(예를 들어, 제1 패킷)을 송신하는 단계(1020)를 포함한다. 2개 이상의 선행 프레임은 패킷 맵 데이터 구조에 의해 지정된 멀티-스트라이드 패킷-프레임 맵에 기초하여 패킷에 포함시키기 위해 데이터의 프레임들의 시퀀스로부터 선택될 수 있다. 일부 구현들에서, 패킷의 2개 이상의 선행 프레임들 중 적어도 하나는 제1 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 패킷의 주 프레임으로부터 분리되고, 패킷의 2개 이상의 선행 프레임들 중 적어도 하나는 제1 스트라이드 파라미터와 상이한 제2 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 패킷의 주 프레임으로부터 분리된다. 예를 들어, 패킷은 네트워크 인터페이스(예를 들어, 네트워크 인터페이스(104))를 사용하여 송신될 수 있다(1020). 일부 구현들에서, 2개보다 많은 스트라이드가 각각의 패킷에서 사용될 수 있다. 예를 들어, 패킷의 2개 이상의 선행 프레임들 중 적어도 하나는 제1 스트라이드 파라미터 및 제2 스트라이드 파라미터와 상이한 제3 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 패킷의 주 프레임으로부터 분리될 수 있다. 패킷은 네트워크(예를 들어, 네트워크(106))를 통한 패킷의 송신을 용이하게 하기 위해 헤더 데이터(예를 들어, IPv6 헤더 및 UDP 헤더) 등의 다른 데이터를 포함할 수 있다.
[0076] (동작 1025에서) 송신할 데이터의 프레임들의 시퀀스 내에 더 많은 프레임이 존재하는 경우, 다음 프레임이 선택되고(1010), 다른 패킷 내의 주 프레임으로서 새로운 주 프레임에 대한 하나 이상의 대응하는 선행 프레임과 함께 송신될 수 있다(1020). 프로세스(1000)가 시작되고 있을 때, 이전 프레임들 중 하나 이상은 재송신할 프레임들의 시퀀스 내에 대응하는 이전 프레임이 존재하지 않는 패킷으로부터 생략될 수 있다. 스트라이드 파라미터에 대응하는 수의 패킷이 송신된 후, 이전 패킷(예로서, 제1 패킷)에서 주 프레임으로서 이전에 송신된 프레임이 후속 패킷(예로서, 제2 패킷) 내의 선행 프레임으로서 재송신될 수 있다. 예를 들어, 프로세스(1000)는 네트워크 인터페이스를 사용하여, 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 2개 이상의 선행 프레임들을 포함하는 제2 패킷을 송신하는 단계(1020)를 포함할 수 있으며, 제2 패킷의 2개 이상의 선행 프레임들 중 적어도 하나는 제1 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 제2 패킷의 주 프레임으로부터 분리되고, 제2 패킷의 2개 이상의 선행 프레임들 중 적어도 하나는 제2 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 제2 패킷의 주 프레임으로부터 분리되며, 제1 패킷의 주 프레임은 제2 패킷의 2개 이상의 선행 프레임들 중 하나이다. 일부 구현들에서, 프로세스(1000)는 네트워크 인터페이스를 사용하여, 데이터의 프레임들의 시퀀스 내의 제1 패킷의 주 프레임과 제2 패킷의 주 프레임 사이의 모든 프레임들을, 각각이 제1 스트라이드 파라미터 및 제2 스트라이드 파라미터의 배수들만큼 프레임들의 시퀀스에서 분리되는, 데이터의 프레임들의 시퀀스로부터의 2개 이상의 선행 프레임들을 포함하는 각각의 패킷들의 주 프레임들로서 송신하는 단계(1020)를 포함한다. 패킷들은 네트워크를 통해 하나 이상의 클라이언트 디바이스로 송신될 수 있다(1020). 예를 들어, 제1 패킷 및 제2 패킷은 브로드캐스트 패킷들일 수 있다. 예를 들어, 제1 패킷 및 제2 패킷은 멀티캐스트 패킷들일 수 있다. 일부 구현들에서, 데이터의 프레임들의 시퀀스 내의 프레임들은 모두 동일한 크기이다.
[0077] (동작 1025에서) 프레임들의 시퀀스의 모든 프레임들이 각각의 패킷들의 주 프레임들로서 송신되었을 때(1020), 스트라이드에서 대응하는 선행 프레임들을 갖는 시퀀스의 마지막 프레임을 지나 다음 시퀀스 인덱스에 대응하는 더미 주 프레임을 포함하는(또는 주 프레임을 생략하는) 하나 이상의 패킷은 (동작 1035에서) 모든 프레임들이 패킷 맵 데이터 구조의 중복 파라미터들(예를 들어, 각각의 스트라이드들에 대한 세그먼트들)의 전체에 대응하는 횟수만큼 선행 프레임들로서 송신될 때까지 송신될 수 있다(1030). (동작 1035에서) 시퀀스의 모든 프레임들이 패킷-프레임 맵의 모든 중복 슬롯에서 송신되었을 때, 데이터의 프레임들의 시퀀스의 송신이 종료된다(1040).
[0078] 도 11은 데이터의 강건한 송신을 위해 다수의 스트라이드를 갖는 패킷 페이로드 맵핑을 사용하여 데이터의 프레임들의 시퀀스로 분할된 데이터를 수신하기 위한 프로세스(1100)의 일례를 예시하는 흐름도이다. 프로세스(1100)는 다수의 스트라이드 파라미터 및 대응하는 중복 파라미터(예를 들어, 스트라이드들 및 대응하는 세그먼트들)를 나타내는 패킷 맵 데이터 구조를 수신하는 단계(1110); 각각이 다수의 스트라이드 파라미터에 대응하는 데이터의 프레임들의 시퀀스 내의 간격들로 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 2개 이상의 선행 프레임들을 각각 포함하는 패킷들을 수신하는 단계(1120); 각각이 패킷의 주 프레임 및 2개 이상의 선행 프레임을 유지하는 엔트리들을 갖는 버퍼에 패킷들의 프레임들을 저장하는 단계(1130); 및 버퍼로부터 프레임들을 판독하여(1140) 버퍼의 출력에서 프레임들의 단일 사본을 획득하는 단계를 포함한다. 예를 들어, 도 11의 프로세스(1100)는 도 1의 클라이언트 디바이스(110)에 의해 구현될 수 있다. 예를 들어, 도 11의 프로세스(1100)는 도 4의 컴퓨팅 디바이스(400)에 의해 구현될 수 있다.
[0079] 프로세스(1100)는, 제1 스트라이드 파라미터 및 제2 스트라이드 파라미터를 포함하는 다수의 스트라이드 파라미터들을 나타내고, 데이터의 프레임들의 시퀀스로부터의 프레임들을 포함하는 패킷들의 세트의 각각의 패킷에서 송신될 각각의 스트라이드 파라미터에 대한 중복 선행 프레임들의 카운트들을 나타내는 패킷 맵 데이터 구조를 수신하는 단계(1110)를 포함한다. 각각의 스트라이드 파라미터는 패킷들의 패킷에 포함된 하나 이상의 선행 패킷들과 주 패킷 간의 프레임들의 시퀀스 내의 간격을 지정할 수 있다. 일부 구현들에서, 제1 스트라이드 파라미터는 3보다 작고, 제2 스트라이드 파라미터는 4보다 크다. 중복 선행 프레임들의 카운트들은 패킷 페이로드 맵핑 스킴에 대한 각각의 스트라이드 파라미터들에 대한 중복 파라미터들(예를 들어, 세그먼트들)로서 지칭될 수 있다. 예를 들어, 패킷 맵 데이터 구조는 각각의 선행 프레임에 대해 하나의 정수를 갖는, 대응하는 선행 프레임들의 프레임 인덱스 오프셋들인 정수들의 리스트(예를 들어, 2의 대응하는 중복과 함께 1의 제1 스트라이드를 그리고 3의 대응하는 중복과 함께 5의 제2 스트라이드를 갖는 스킴에 대한 {-1, -2, -5, -10, -15}, 또는 3의 대응하는 중복과 함께 2의 제1 스트라이드를 그리고 4의 대응하는 중복과 함께 16의 제2 스트라이드를 갖는 스킴에 대한 {-2, -4, -6, -16, -32, -48, -64})를 포함할 수 있다. 일부 구현들에서, 패킷 맵 데이터 구조는 스트라이드 파라미터 및 그것의 대응하는 중복 파라미터를 각각 나타내는 각각의 스트라이드 파라미터에 대한 2개의 양의 정수들을 포함한다. 예를 들어, 패킷 맵 데이터 구조는 네트워크 인터페이스(예를 들어, 네트워크 인터페이스(120))를 사용하여 수신될 수 있다(1110). 일부 구현들에서, 패킷 맵 데이터 구조는 데이터의 프레임들이 수신되기(1120) 시작하기 전에 별개의 패킷에서 한 번 수신된다(1110). 일부 구현들에서, 패킷 맵 데이터 구조는 프레임들의 시퀀스를 송신하는 데 사용되는 패킷들의 세트 내의 패킷들 각각에 대한 헤더의 일부로서 수신된다(1110). 예를 들어, 데이터의 프레임들의 시퀀스는 오디오 데이터(예를 들어, 음악 또는 음성 신호들의 인코딩)의 프레임들의 시퀀스일 수 있다. 예를 들어, 데이터의 프레임들의 시퀀스는 비디오 데이터의 프레임들의 시퀀스일 수 있다.
[0080] 프로세스(1100)는 각각이 데이터의 프레임들의 시퀀스로부터의 주 프레임과 2개 이상의 선행 프레임들을 각각 포함하는 패킷들을 수신하는 단계(1120)를 포함한다. 2개 이상의 선행 프레임은 패킷 맵 데이터 구조에 의해 지정된 멀티-스트라이드 패킷-프레임 맵에 기초하여 패킷에 포함시키기 위해 데이터의 프레임들의 시퀀스로부터 선택되었을 수 있다. 일부 구현들에서, 각각의 패킷의 2개 이상의 선행 프레임들 중 적어도 하나는 제1 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 각각의 패킷의 주 프레임으로부터 분리되고, 각각의 패킷의 2개 이상의 선행 프레임들 중 적어도 하나는 제1 스트라이드 파라미터와 상이한 제2 스트라이드 파라미터의 각각의 배수만큼 프레임들의 시퀀스 내의 각각의 패킷의 주 프레임으로부터 분리된다. 예를 들어, 패킷들은 네트워크 인터페이스(예를 들어, 네트워크 인터페이스(120))를 사용하여 수신될 수 있다(1120). 일부 구현들에서, 각각의 개개의 패킷의 2개 이상의 선행 프레임은 각각의 스트라이드 파라미터에 대한 중복 파라미터들의 합과 동일한 수의 선행 프레임을 포함하고, 제2 스트라이드 파라미터에 대한 중복 파라미터는 1보다 크다. 패킷들은 하나 이상의 서버 디바이스(예를 들어, 서버 디바이스(102))로부터 네트워크를 통해 수신될 수 있다(1120).
[0081] 프로세스(1100)는 각각이 패킷의 주 프레임과 2개 이상의 선행 프레임을 유지하는 엔트리들을 갖는 버퍼(예를 들어, 링 버퍼(302))에 패킷들의 프레임들을 저장하는 단계(1130)를 포함한다. 일부 구현들에서, 각각의 개개의 패킷의 2개 이상의 선행 프레임은 제1 스트라이드 파라미터와 제2 스트라이드 파라미터를 포함하는 각각의 스트라이드 파라미터에 대한 중복 파라미터들의 합과 동일한 수의 선행 프레임을 포함한다. 예를 들어, 버퍼는 최대 스트라이드 파라미터 x 최대 스트라이드 파라미터에 대한 각각의 중복 파라미터 + 1과 동일한 수의 패킷들로부터의 프레임들을 저장하는 크기를 가질 수 있다. 일부 구현들에서, 수신된(1120) 패킷들은 패킷들의 페이로드로부터의 프레임들이 버퍼에 저장되기(1130) 전에 지터 버퍼를 통과할 수 있다. 예를 들어, 프로세스(1100)는 패킷들이 수신될 때 지터 버퍼에 패킷들을 저장하는 단계(1120); 및 버퍼에 패킷들의 프레임들을 저장하기(1130) 전에 지터 버퍼로부터 패킷들을 판독하는 단계를 포함할 수 있다. 일부 구현들에서, 데이터의 프레임들의 시퀀스 내의 프레임들은 모두 동일한 크기이다.
[0082] 프로세스(1100)는 버퍼(예를 들어, 링 버퍼(302))로부터 프레임들을 판독하는 단계(1140)를 포함한다. 예를 들어, 도 7의 프로세스(700)는 버퍼로부터 프레임들을 판독하도록(1140) 구현될 수 있다. 일부 구현들에서, 시퀀스로부터의 데이터의 프레임들은 오디오 데이터를 포함하고, 프로세스(1100)는 버퍼로부터 프레임을 판독하는 것에 응답하여 프레임의 오디오 데이터를 재생하는 단계를 포함한다. 일부 구현들에서, 버퍼로부터 판독된(1140) 데이터의 프레임들은 재조립 버퍼(예를 들어, 도 8의 재조립 버퍼(820))에서 데이터의 프레임들의 시퀀스로 재조립된다. 예를 들어, 도 9의 프로세스(900)는 오디오 데이터의 재생을 용이하게 하기 위해 데이터의 프레임들의 시퀀스를 재조립하도록 구현될 수 있다.
[0083] 도 12a는 데이터의 프레임들의 시퀀스로 분할된 데이터를 보유하는 패킷들에 대한 송신 순서를 무작위화하기 위한 프로세스(1200)의 일례를 예시하는 흐름도이다. 프로세스(1200)는 무작위로 결정된 순서로 송신을 기다리기 위해 제1 패킷 및 제2 패킷을 포함하는 패킷들을 버퍼에 저장하는 단계(1210)를 포함한다. 데이터의 중복 프레임들을 포함하는 패킷 페이로드들은 다양한 레벨의 통신 프로토콜 헤더들을 갖거나 갖지 않고 저장될 수 있다. 송신 측 버퍼에 대한 다양한 크기가 원하는 버스트 손실 허용오차 및 애플리케이션에서의 종단간 레이턴시에 대한 허용오차의 레벨에 따라 사용될 수 있다. 예를 들어, 송신기 측 버퍼는 대응하는 수신기 디바이스에서 패킷 맵핑 스킴에 대해 링 버퍼에 의해 저장된 다수의 패킷들과 매칭되는 다수의 패킷들에 대한 데이터를 저장하는 크기를 가질 수 있다.
[0084] 프로세스(1200)는 제1 패킷 및 제2 패킷에 대한 송신 순서를 무작위로 결정하는 단계(1220)를 포함한다. 일부 구현들에서, 송신 순서를 무작위로 결정하는 단계(1220)는 송신을 위한 다음 패킷을 선택하기 위해 제1 패킷 및 제2 패킷을 포함하는 각각의 패킷들과 연관된 데이터를 저장하는 엔트리들을 갖는 버퍼에 대한 인덱스를 무작위로 생성하는 단계를 포함한다. 예를 들어, 버퍼에 대한 인덱스는 운영 체제의 난수 생성기(RNG)(예를 들어, 리눅스 커널 RNG)를 사용하여 결정될 수 있다. 예를 들어, 도 12a의 프로세스(1200)는 도 1의 서버 디바이스(102)에 의해 구현될 수 있다. 예를 들어, 도 12a의 프로세스(1200)는 도 4의 컴퓨팅 디바이스(400)에 의해 구현될 수 있다.
[0085] 도 12b는 데이터의 프레임들의 시퀀스로 분할된 데이터를 보유하는 패킷들에 대한 송신 순서를 무작위화하기 위한 프로세스(1250)의 일례를 예시하는 흐름도이다. 이 예에서, 주 프레임이 무작위화된 송신 순서로 다음으로서 식별된 후에 패킷들이 생성된다(1280). 프로세스(1250)는 패킷 맵핑 스킴 하에서 조립된 패킷들에 존재하는 데이터의 프레임들의 중복 사본들을 버퍼링하는 것을 피함으로써 메모리를 절감할 수 있다. 프로세스(1250)는 무작위로 결정된 순서로 송신을 기다리기 위해 제1 패킷의 주 프레임 및 제2 패킷의 주 프레임을 포함하는 프레임들을 버퍼에 저장하는 단계(1260)를 포함한다. 송신 측 버퍼에 대한 다양한 크기들이 원하는 버스트 손실 허용오차 및 애플리케이션에서의 종단간 레이턴시에 대한 허용오차의 레벨에 따라 사용될 수 있다. 예를 들어, 송신기 측 버퍼는 대응하는 수신기 디바이스에서 패킷 맵핑 스킴에 대해 링 버퍼에 의해 저장된 다수의 패킷들과 매칭되는 다수의 패킷들에 대한 데이터를 저장하는 크기를 가질 수 있다.
[0086] 프로세스(1250)는 제1 패킷 및 제2 패킷에 대한 송신 순서를 무작위로 결정하는 단계(1270)를 포함한다. 일부 구현들에서, 송신 순서를 무작위로 결정하는 단계(1270)는 송신을 위한 다음 패킷을 선택하기 위해, 제1 패킷 및 제2 패킷을 포함하는 각각의 패킷들과 연관된 데이터를 저장하는 엔트리들을 갖는 버퍼에 대한 인덱스를 무작위로 생성하는 단계를 포함한다. 예를 들어, 버퍼에 대한 인덱스는 운영 체제의 난수 생성기(RNG)(예를 들어, 리눅스 커널 RNG)를 사용하여 결정될 수 있다.
[0087] 프로세스(1250)는 제1 패킷의 주 프레임이 주 프레임으로서의 송신을 위해 무작위로 결정된 순서에서 다음 프레임이 되는 것에 응답하여 제1 패킷을 생성하는 단계를 포함한다. 제1 패킷은 패킷 맵 데이터 구조에 의해 인코딩된 패킷 맵핑 스킴에 의해 그의 주 프레임과 관련된 데이터의 프레임들에 기초하여 생성될 수 있다. 예를 들어, 도 12b의 프로세스(1250)는 도 1의 서버 디바이스(102)에 의해 구현될 수 있다. 예를 들어, 도 12b의 프로세스(1250)는 도 4의 컴퓨팅 디바이스(400)에 의해 구현될 수 있다.
[0088] 도 13은 송신 순서의 송신기 측 스크램블링이 있는 경우와 없는 경우의 버스트 패킷 손실을 예시하는 4개의 막대 그래프를 도시한다. 이들 막대 그래프(1310, 1320, 1330, 및 1340)에서, 선의 높이는 라이브 데이터 프레임 시퀀스 번호를 나타낸다. 막대 그래프(1310)는 패킷들에 대한 고정된 송신 순서를 사용하는 송신기 측 스크램블링이 없는 경우의 데이터 송신을 예시한다. 막대 그래프(1320)는 버스트 손실 패턴을 거치는 동일한 패킷들의 수신을 예시한다.
[0089] 막대 그래프(1330)는 패킷들에 대한 송신의 순서를 무작위로 결정하는 송신기 측 스크램블링이 있는 경우의 데이터 송신을 예시한다. 막대 그래프(1340)는 막대 그래프(1320)에 도시된 동일한 버스트 손실 패턴에 거치는, 무작위화된 순서로 송신된 동일한 패킷들의 수신을 예시한다. 동일한 버스트 손실 패턴은 이제 더 큰 송신에 걸쳐 확산된다는 점에 유의한다.
[0090] 도 14는 송신 순서의 송신기 측 스크램블링이 있는 경우와 없는 경우의 버스트 패킷 손실을 예시하는 2개의 막대 그래프를 도시한다. 도 14는 더 큰 송신 윈도우에 걸쳐 분할된 버스트 손실의 다른 뷰를 나타낸다. 이들 막대 그래프(1410 및 1420)에서, x축은 주 프레임들의 프레임 번호에 대응하고, y축은 2진수이다. 존재하는/제로가 아닌 높이의 막대들은 성공적으로 수신된 패킷들에 대응한다. 존재하지 않는/제로인 높이의 막대들은 손실 수신된 패킷들에 대응한다. 막대 그래프(1410)는 스크램블링 없이 송신된 패킷들의 시퀀스의 수신을 예시한다. 막대 그래프(1420)는 스크램블링되어 송신된 패킷들의 시퀀스의 수신을 예시한다. 무작위로 결정된 송신 순서와 함께 스크램블링은 예를 들어 더 긴 기간에 걸쳐 손실을 분할함으로써 이점들을 제공할 수 있고, 실제 연속 손실량은 더 작아지며, 이는 패킷 맵 복구에 적합할 뿐만 아니라, 손실된 프레임 데이터에 대한 더 나은 데이터 보간을 가능하게 할 수 있다.
[0091] 본 개시내용이 특정 실시예들과 관련하여 설명되었지만, 본 개시내용은 개시된 실시예들로 제한되는 것이 아니라, 도리어, 첨부된 청구항들의 범위 내에 포함되는 다양한 수정들 및 등가의 배열들을 커버하도록 의도되며, 그 범위는 법률 하에서 허용되는 바와 같은 모든 그러한 수정들 및 등가의 구조들을 포함하도록 가장 넓은 해석을 부여받아야 한다는 것이 이해되어야 한다.

Claims (20)

  1. 데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 시스템으로서,
    네트워크 인터페이스;
    메모리; 및
    프로세서를 포함하고,
    상기 메모리는 상기 프로세서에 의해 실행가능한 명령들을 포함하고, 상기 명령들은 상기 시스템으로 하여금:
    상기 네트워크 인터페이스를 사용하여, 상기 데이터의 프레임들의 시퀀스로부터의 주 프레임(primary frame) 및 2개 이상의 선행 프레임(preceding frames)들을 포함하는 제1 패킷을 송신하게 하고 ― 상기 제1 패킷의 상기 2개 이상의 선행 프레임들 중 적어도 하나는 상기 프레임들의 시퀀스 내의 상기 제1 패킷의 상기 주 프레임으로부터 제1 스트라이드 파라미터(stride parameter)의 각각의 배수(multiple)만큼 분리되고, 상기 제1 패킷의 상기 2개 이상의 선행 프레임들 중 적어도 하나는 상기 프레임들의 시퀀스 내의 상기 제1 패킷의 상기 주 프레임으로부터 상기 제1 스트라이드 파라미터와 상이한 제2 스트라이드 파라미터의 각각의 배수만큼 분리됨 ―;
    상기 네트워크 인터페이스를 사용하여, 상기 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 2개 이상의 선행 프레임들을 포함하는 제2 패킷을 송신하게 하고 ― 상기 제2 패킷의 상기 2개 이상의 선행 프레임들 중 적어도 하나는 상기 프레임들의 시퀀스 내의 상기 제2 패킷의 상기 주 프레임으로부터 상기 제1 스트라이드 파라미터의 각각의 배수만큼 분리되고, 상기 제2 패킷의 상기 2개 이상의 선행 프레임들 중 적어도 하나는 상기 프레임들의 시퀀스 내의 상기 제2 패킷의 상기 주 프레임으로부터 상기 제2 스트라이드 파라미터의 각각의 배수만큼 분리되며, 상기 제1 패킷의 상기 주 프레임은 상기 제2 패킷의 상기 2개 이상의 선행 프레임들 중 하나임 ―; 그리고
    상기 제1 패킷 및 상기 제2 패킷을 송신하기 전에, 상기 제1 패킷 및 상기 제2 패킷에 대한 송신의 순서를 무작위로 결정하게 하는,
    데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 시스템.
  2. 제1항에 있어서,
    상기 메모리는 상기 프로세서에 의해 실행가능한 명령들을 포함하고, 상기 명령들은 상기 시스템으로 하여금:
    상기 무작위로 결정된 순서로 송신을 기다리기 위해 상기 제1 패킷 및 상기 제2 패킷을 포함하는 패킷들을 버퍼에 저장하게 하는,
    데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 시스템.
  3. 제1항에 있어서,
    상기 메모리는 상기 프로세서에 의해 실행가능한 명령들을 포함하고, 상기 명령들은 상기 시스템으로 하여금:
    상기 무작위로 결정된 순서로 송신을 기다리기 위해 상기 제1 패킷의 상기 주 프레임 및 상기 제2 패킷의 상기 주 프레임을 포함하는 프레임들을 버퍼에 저장하게 하고; 그리고
    상기 제1 패킷의 상기 주 프레임이 주 프레임으로서의 송신을 위해 상기 무작위로 결정된 순서에서 다음 프레임이 되는 것에 응답하여, 상기 제1 패킷을 생성하게 하는,
    데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 시스템.
  4. 제1항에 있어서,
    상기 제1 스트라이드 파라미터는 3보다 작고, 상기 제2 스트라이드 파라미터는 4보다 큰,
    데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 시스템.
  5. 제1항에 있어서,
    상기 제1 패킷의 상기 2개 이상의 선행 프레임들 중 적어도 하나는 상기 프레임들의 시퀀스 내의 상기 제1 패킷의 상기 주 프레임으로부터, 상기 제1 스트라이드 파라미터 및 상기 제2 스트라이드 파라미터와 상이한 제3 스트라이드 파라미터의 각각의 배수만큼 분리되는,
    데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 시스템.
  6. 제1항에 있어서,
    상기 메모리는 상기 프로세서에 의해 실행가능한 명령들을 포함하고, 상기 명령들은 상기 시스템으로 하여금:
    상기 네트워크 인터페이스를 사용하여, 상기 데이터의 프레임들의 시퀀스 내의 상기 제1 패킷의 상기 주 프레임과 상기 제2 패킷의 상기 주 프레임 사이의 모든 프레임들을, 상기 제1 스트라이드 파라미터 및 상기 제2 스트라이드 파라미터의 배수들만큼 상기 프레임들의 시퀀스에서 분리되는, 상기 데이터의 프레임들의 시퀀스로부터의 2개 이상의 선행 프레임들을 각각 포함하는 각각의 패킷들의 주 프레임들로서 송신하게 하는,
    데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 시스템.
  7. 제1항에 있어서,
    상기 메모리는 상기 프로세서에 의해 실행가능한 명령들을 포함하고, 상기 명령들은 상기 시스템으로 하여금:
    상기 네트워크 인터페이스를 사용하여, 상기 제1 스트라이드 파라미터 및 상기 제2 스트라이드 파라미터를 나타내고 그리고 상기 제1 패킷 및 상기 제2 패킷을 포함하는 패킷들의 세트의 각각의 패킷에서 송신될 각각의 스트라이드 파라미터에 대한 중복(redundant) 선행 프레임들의 카운트들을 나타내는 패킷 맵 데이터 구조(packet map data structure)를 송신하게 하는,
    데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 시스템.
  8. 데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 방법으로서,
    네트워크 인터페이스를 사용하여, 상기 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 2개 이상의 선행 프레임들을 포함하는 제1 패킷을 송신하는 단계 ― 상기 제1 패킷의 상기 2개 이상의 선행 프레임들 중 적어도 하나는 상기 프레임들의 시퀀스 내의 상기 제1 패킷의 상기 주 프레임으로부터 제1 스트라이드 파라미터의 각각의 배수만큼 분리되고, 상기 제1 패킷의 상기 2개 이상의 선행 프레임들 중 적어도 하나는 상기 프레임들의 시퀀스 내의 상기 제1 패킷의 상기 주 프레임으로부터 상기 제1 스트라이드 파라미터와 상이한 제2 스트라이드 파라미터의 각각의 배수만큼 분리됨 ―;
    상기 네트워크 인터페이스를 사용하여, 상기 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 2개 이상의 선행 프레임들을 포함하는 제2 패킷을 송신하는 단계 ― 상기 제2 패킷의 상기 2개 이상의 선행 프레임들 중 적어도 하나는 상기 프레임들의 시퀀스 내의 상기 제2 패킷의 상기 주 프레임으로부터 상기 제1 스트라이드 파라미터의 각각의 배수만큼 분리되고, 상기 제2 패킷의 상기 2개 이상의 선행 프레임들 중 적어도 하나는 상기 프레임들의 시퀀스 내의 상기 제2 패킷의 상기 주 프레임으로부터 상기 제2 스트라이드 파라미터의 각각의 배수만큼 분리되며, 상기 제1 패킷의 상기 주 프레임은 상기 제2 패킷의 상기 2개 이상의 선행 프레임들 중 하나임 ―; 및
    상기 제1 패킷 및 상기 제2 패킷을 송신하기 전에, 상기 제1 패킷 및 상기 제2 패킷에 대한 송신의 순서를 무작위로 결정하는 단계를 포함하는,
    데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 방법.
  9. 제8항에 있어서,
    상기 송신의 순서를 무작위로 결정하는 단계는,
    송신을 위한 다음 패킷을 선택하기 위해, 상기 제1 패킷 및 상기 제2 패킷을 포함하는 각각의 패킷들과 연관된 데이터를 저장하는 엔트리들을 갖는 버퍼에 대한 인덱스를 무작위로 생성하는 단계를 포함하는,
    데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 방법.
  10. 제8항에 있어서,
    상기 무작위로 결정된 순서로 송신을 기다리기 위해 상기 제1 패킷 및 상기 제2 패킷을 포함하는 패킷들을 버퍼에 저장하는 단계를 포함하는,
    데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 방법.
  11. 제8항에 있어서,
    상기 무작위로 결정된 순서로 송신을 기다리기 위해, 상기 제1 패킷의 상기 주 프레임 및 상기 제2 패킷의 상기 주 프레임을 포함하는 프레임들을 버퍼에 저장하는 단계; 및
    상기 제1 패킷의 상기 주 프레임이 주 프레임으로서의 송신을 위해 상기 무작위로 결정된 순서에서 다음 프레임이 되는 것에 응답하여, 상기 제1 패킷을 생성하는 단계를 포함하는,
    데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 방법.
  12. 제8항에 있어서,
    상기 제1 스트라이드 파라미터는 3보다 작고, 상기 제2 스트라이드 파라미터는 4보다 큰,
    데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 방법.
  13. 제8항에 있어서,
    상기 네트워크 인터페이스를 사용하여, 상기 데이터의 프레임들의 시퀀스 내의 상기 제1 패킷의 상기 주 프레임과 상기 제2 패킷의 상기 주 프레임 사이의 모든 프레임들을, 상기 제1 스트라이드 파라미터 및 상기 제2 스트라이드 파라미터의 배수들만큼 상기 프레임들의 시퀀스에서 분리되는, 상기 데이터의 프레임들의 시퀀스로부터의 2개 이상의 선행 프레임들을 각각 포함하는 각각의 패킷들의 주 프레임들로서 송신하는 단계를 포함하는,
    데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 방법.
  14. 제8항에 있어서,
    상기 네트워크 인터페이스를 사용하여, 상기 제1 스트라이드 파라미터 및 상기 제2 스트라이드 파라미터를 나타내고 그리고 상기 제1 패킷 및 상기 제2 패킷을 포함하는 패킷들의 세트의 각각의 패킷에서 송신될 각각의 스트라이드 파라미터에 대한 중복 선행 프레임들의 카운트들을 나타내는 패킷 맵 데이터 구조를 송신하는 단계를 포함하는,
    데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 방법.
  15. 데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 시스템으로서,
    네트워크 인터페이스;
    메모리; 및
    프로세서를 포함하고,
    상기 메모리는 상기 프로세서에 의해 실행가능한 명령들을 포함하고, 상기 명령들은 상기 시스템으로 하여금:
    상기 네트워크 인터페이스를 사용하여, 상기 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 하나 이상의 선행 프레임들을 포함하는 제1 패킷을 송신하게 하고 ― 상기 제1 패킷의 상기 하나 이상의 선행 프레임들은 상기 프레임들의 시퀀스 내의 상기 제1 패킷의 상기 주 프레임으로부터 스트라이드 파라미터의 각각의 배수만큼 분리됨 ―;
    상기 네트워크 인터페이스를 사용하여, 상기 데이터의 프레임들의 시퀀스로부터의 주 프레임 및 하나 이상의 선행 프레임들을 포함하는 제2 패킷을 송신하게 하고 ― 상기 제2 패킷의 상기 하나 이상의 선행 프레임들은 상기 프레임들의 시퀀스 내의 상기 제2 패킷의 상기 주 프레임으로부터 상기 스트라이드 파라미터의 각각의 배수만큼 분리되고, 상기 제1 패킷의 상기 주 프레임은 상기 제2 패킷의 상기 하나 이상의 선행 프레임들 중 하나임 ―; 그리고
    상기 제1 패킷 및 상기 제2 패킷을 송신하기 전에, 상기 제1 패킷 및 상기 제2 패킷에 대한 송신의 순서를 무작위로 결정하게 하는,
    데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 시스템.
  16. 제15항에 있어서,
    상기 메모리는 상기 프로세서에 의해 실행가능한 명령들을 포함하고, 상기 명령들은 상기 시스템으로 하여금:
    상기 무작위로 결정된 순서로 송신을 기다리기 위해 상기 제1 패킷 및 상기 제2 패킷을 포함하는 패킷들을 버퍼에 저장하게 하는,
    데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 시스템.
  17. 제15항에 있어서,
    상기 메모리는 상기 프로세서에 의해 실행가능한 명령들을 포함하고, 상기 명령들은 상기 시스템으로 하여금:
    상기 무작위로 결정된 순서로 송신을 기다리기 위해 상기 제1 패킷의 상기 주 프레임 및 상기 제2 패킷의 상기 주 프레임을 포함하는 프레임들을 버퍼에 저장하게 하고; 그리고
    상기 제1 패킷의 상기 주 프레임이 주 프레임으로서의 송신을 위해 상기 무작위로 결정된 순서에서 다음 프레임이 되는 것에 응답하여, 상기 제1 패킷을 생성하게 하는,
    데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 시스템.
  18. 제15항에 있어서,
    상기 스트라이드 파라미터는 4보다 큰,
    데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 시스템.
  19. 제15항에 있어서,
    상기 메모리는 상기 프로세서에 의해 실행가능한 명령들을 포함하고, 상기 명령들은 상기 시스템으로 하여금:
    상기 네트워크 인터페이스를 사용하여, 상기 데이터의 프레임들의 시퀀스 내의 상기 제1 패킷의 상기 주 프레임과 상기 제2 패킷의 상기 주 프레임 사이의 모든 프레임들을, 상기 스트라이드 파라미터의 배수들만큼 상기 프레임들의 시퀀스에서 분리되는, 상기 데이터의 프레임들의 시퀀스로부터의 하나 이상의 선행 프레임들을 각각 포함하는 각각의 패킷들의 주 프레임들로서 송신하게 하는,
    데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 시스템.
  20. 제15항에 있어서,
    상기 메모리는 상기 프로세서에 의해 실행가능한 명령들을 포함하고, 상기 명령들은 상기 시스템으로 하여금:
    상기 네트워크 인터페이스를 사용하여, 상기 스트라이드 파라미터를 나타내고 그리고 상기 제1 패킷 및 상기 제2 패킷을 포함하는 패킷들의 세트의 각각의 패킷에서 송신될 중복 선행 프레임들의 카운트를 나타내는 패킷 맵 데이터 구조를 송신하게 하는,
    데이터의 프레임들의 시퀀스로 분할된 데이터를 송신하기 위한 시스템.
KR1020227037507A 2021-04-15 2022-01-28 데이터의 강건한 송신을 위한 스크램블링된 패킷 페이로드 맵핑 KR102499294B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US202163175352P 2021-04-15 2021-04-15
US63/175,352 2021-04-15
PCT/US2022/014322 WO2022220907A1 (en) 2021-04-15 2022-01-28 Scrambled packet payload mapping for robust transmission of data

Publications (2)

Publication Number Publication Date
KR20220151012A KR20220151012A (ko) 2022-11-11
KR102499294B1 true KR102499294B1 (ko) 2023-02-10

Family

ID=80785290

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227037507A KR102499294B1 (ko) 2021-04-15 2022-01-28 데이터의 강건한 송신을 위한 스크램블링된 패킷 페이로드 맵핑

Country Status (5)

Country Link
US (3) US11496612B1 (ko)
EP (1) EP4324130A1 (ko)
KR (1) KR102499294B1 (ko)
CN (1) CN117136514A (ko)
WO (1) WO2022220907A1 (ko)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20210091894A1 (en) 2019-09-25 2021-03-25 MIXHalo Corp. Multi-Stride Packet Payload Mapping for Robust Transmission of Data

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6442152B1 (en) * 1998-07-13 2002-08-27 Samsung Electronics, Co., Ltd. Device and method for communicating packet data in mobile communication system
GB2374771B (en) * 2000-12-29 2004-07-07 Vtech Communications Ltd Frame structure with diversity
AU2005274003B2 (en) * 2004-08-12 2009-03-05 Interdigital Technology Corporation Method and system for controlling access to a wireless communication medium
KR101221913B1 (ko) * 2006-12-20 2013-01-15 엘지전자 주식회사 디지털 방송 시스템 및 데이터 처리 방법

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20210091894A1 (en) 2019-09-25 2021-03-25 MIXHalo Corp. Multi-Stride Packet Payload Mapping for Robust Transmission of Data

Also Published As

Publication number Publication date
EP4324130A1 (en) 2024-02-21
KR20220151012A (ko) 2022-11-11
US20230104252A1 (en) 2023-04-06
US11496612B1 (en) 2022-11-08
WO2022220907A1 (en) 2022-10-20
US20240236213A1 (en) 2024-07-11
US11968284B2 (en) 2024-04-23
CN117136514A (zh) 2023-11-28
US20220337681A1 (en) 2022-10-20

Similar Documents

Publication Publication Date Title
JP4921569B2 (ja) オフロードユニットを使用したtcp接続のためのデータ処理
US20140247836A1 (en) Method and apparatus for reducing redundant traffic in communication networks
JP2003008644A (ja) パケット送受信装置及びパケット伝送方法
US8195821B2 (en) Autonomous information processing apparatus and method in a network of information processing apparatuses
KR20130046540A (ko) 데이터 전송 장치 및 방법
US20230412528A1 (en) Multi-stride packet payload mapping for robust transmission of data
JP2004088246A (ja) 無線通信方法および無線通信装置
KR102499294B1 (ko) 데이터의 강건한 송신을 위한 스크램블링된 패킷 페이로드 맵핑
US7953120B2 (en) Efficient synchronization of a sliding buffer window to prevent packet re-injection in an internet protocol (IP) network
US8432911B2 (en) Method and apparatus for reducing effects of lost packets on redundancy reduction in communication networks
JP4217534B2 (ja) パケット送信装置、パケット受信装置、方法及びプログラム
CN110169023A (zh) 一种数据传输方法、数据接收设备及数据发送设备
CN115333677A (zh) 云业务处理方法、***、装置、设备及存储介质
Ageneau et al. Practical random linear coding for MultiPath TCP: MPC-TCP
Yao et al. Message logging optimization for wireless networks
JP2006020133A (ja) 秘匿処理装置および秘匿処理方法
US20030108114A1 (en) Method for interleaving data in packet-based communications and a system thereof
JP2007074170A (ja) データ転送装置およびデータ転送方法
CN117082266A (zh) 直播中继方法、直播数据接收方法、装置、设备和介质
CN114338010A (zh) 一种不落盘的数据库局内加密密钥加密方法、装置及电子设备
CN113890725A (zh) 量子密钥的分发方法和节点
KR20140009947A (ko) 데이터 전송 장치 및 방법
JP2003188858A (ja) パケットデータ伝送装置、パケットデータ伝送方法、およびそのプログラム

Legal Events

Date Code Title Description
A302 Request for accelerated examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant