학원에서 제안한 웹 브라우저의 IP 그룹 방송 정보

배경.


https://github.com/GrumpyOldTroll/wicg-multicast-receiver-api/blob/master/explainer.md
제안자는 동의하지 않는 사람이라고 한다.
CDN 업자들에게는 온라인에서 인기 있는 스포츠 중계와 드라마 등을 게시하는 게 어렵다고 한다.
물론 TV 방송과 달리 온라인상의 애니메이션 스트리밍 데이터는 고객 수가 증가함에 따라 증가한다.
이대로는 안 돼!인도 크리켓이 인기가 많군요!그래서 IP 멀티캐스트를 하지 않겠다는 제안을 했습니다.
단지 건의일 뿐이다.

IP 그룹 방송


먼저 IP 그룹 방송을 간단하게 설명한다.
IP 그룹 방송 자체가 오래전부터 있었던 규격인 것 같다(1986년인 것 같다).
아마 (상상했지만) 대학 캠퍼스 내 LAN 등에서 효율적으로 나눠주고 싶은 물건일 거예요.
지금까지 웹에서 사용된 적은 없지만, 그것 이외의 다양한 용도가 사용되었다.

모티프


같은 네트워크에서 같은 데이터를 요청하는 단말기가 여러 대 있을 때
'한 번 발송'은'다개 단말기'가 수신할 수 있기를 희망한다.
무선 LAN이면 전파가 모든 터미널에 도달합니다
라우터는 "편지를 한 번만 보낼 테니 필요한 사람은 각자 받으세요"라고만 말할 수 있다.

유선 LAN의 경우 그림과 같이 공용 중계기에 한 번 전송
나중에 필요에 따라 엇갈리는 느낌이 든다.
주의점은 IP 그룹 방송은 IP 층의 규격이기 때문에 이더넷 층의 집선기가 어떻게 돌아가는지는 이 기계에 달려 있다.
그러나 적어도 내가 아는 범위 내에서 시장의 집선기는 사람들에게 대체적으로 좋은 느낌을 줄 것이다.
기본 LAN 케이블은 데이터를 한 번만 전송하는 것이 특징입니다.

이동


나는 동작을 알고 싶다면 아마 무엇을 하고 있는지 상상할 수 있을 것이다.
우선, 여기에 두 대의 컴퓨터가 있다고 가정해 보세요.
각각 IP는
  • X컴퓨터:XXX.xxx.xxx.xxx
  • Y컴퓨터:yyy.yyy.yyy.yyy
  • 가령
    여기에 X개인용 컴퓨터는 공유기에 "IP그룹 방송 그룹 주소(이하 그룹 주소라고 함)를 발행해 주세요"라고 부탁했다.
    공유기는 ggg입니다.ggg.ggg.ggg라는 단체 주소를 발행해 X 개인용 컴퓨터에 전달한다.
    X개인컴퓨터는 Y개인컴퓨터에 "너도 gggg.gggg.ggggggggggggg에 들어가라."라고 말했다.
    그걸 들은 Y 개인컴퓨터는 라우터에 "나도 gg.ggg.gggg.gggggg.ggggggggg 들어간다"고 말했다.
    공유기가 Y컴퓨터를 gggg.ggg.ggg.실제로 넣다.
    그래서 앞으로 ggg.ggg.ggg.gg로 보낸 가방은 X컴퓨터와 Y컴퓨터로 보낼 수 있다.
    '컴퓨터 X와 컴퓨터 Y가 ggg.ggg.ggggggggggggggggggggggggggg에 들어갔다'는 정보는 인터넷상의 각종 중계기에서도 전파된다
    좋은 느낌으로 중계를 최적화할 수 있다.
    응, 메일 리스트, 파일 공유 서비스 등 흔히 볼 수 있는 구조와 비슷해.

    무엇에 쓰일 것인가


    치앙마이는 ISP를 뛰어넘는 IP 그룹 방송을 통해 대규모 스포츠 활동을 효율적으로 발표할 수 있다고 본다.
    하지만, 나는 이것이 우리가 그리 익숙하지 않은 이야기라고 생각한다.
    좀 더 가까운 용도가 있을 것 같아서요.
    예를 들어 인터넷 회의에서 많은 사람들이 같은 회의에 참가하는 경우다.
    또한, Droid 회의와 같은 대형 IT류의 활동도
    많은 사람들이 현장에서 발표를 보면서 인터넷 발표를 본다.
    이럴 때는 LAN 안에 있는 사람에게도 많이 할 수 있고 밖에 있는 사람에게도 보통으로 보낼 수 있다고 생각해요.

    어떤 JS API가 될지.


    기본적으로 JS로 스트리밍 대상을 만들고 리스텐이 활동 스트리밍을 하는 느낌이다.
    흐름 대상을 만들 때 그룹 주소를 지정한 것 같습니다.
    제안은 이런 느낌의 코드입니다.
    // Multicast flow to join:
    
    let multicastFlow = {
      source: '198.51.100.10',
      group: '232.10.10.1',
      port: 5001,
      dorms: 'dorms.example.com'
    };
      
    // Construct MulticastReceiver and subscribe to the multicast flow on the 
    // network:
    
    let multicastReceiver=new MulticastReceiver(multicastFlow);
    
    // Read multicast UDP packets:
    
    let multicastReader=multicastReceiver.readable.getReader();
    
    async function readMulticastData() {
      for(;;) {
        let { done, value } = await multicastReader.read();
        if(done) {
          return;
        } else {
          // value is an UInt8Array with the payload of one UDP packet.
          console.log("Got multicast packet with size "+value.length);
        }
      }
    }
    
    암호화, 리셋 제어, 네트워크의 각종 어려움이 브라우저에서 추상화되었다.

    총결산


    이루어지면 즐거울 거야.

    좋은 웹페이지 즐겨찾기