24
1 Computer Network Lab. 13. 다다다다 다다 컴컴컴 컴컴컴컴 컴컴컴 컴 컴 컴 , 컴 컴 컴

13. 다중전송 소켓

Embed Size (px)

DESCRIPTION

13. 다중전송 소켓. 컴퓨터 네트워크 실험실 이 희 규 , 조 한 진. 목 차. 다중전송 인터넷상에서의 다중전송 다중전송 주소와 다중전송 그룹 라우터와 라우팅 다중전송 소켓 작업 생성자 메소드 MulticastSniffer MulticastSender 결론. 다중전송. 하나의 호스트에서 다중전송 그룹에 가입한 다른 호스트들에게 데이터를 전송하는 것. 인터넷상에서의 다중전송. 캠퍼스. 세상. 0. 1. 4. 3. 2. 5. 4. 1. 0. 3. 2. 1. 3. 2. - PowerPoint PPT Presentation

Citation preview

Page 1: 13.  다중전송 소켓

1Computer Network Lab.

13. 다중전송 소켓

컴퓨터 네트워크 실험실이 희 규 , 조 한 진

Page 2: 13.  다중전송 소켓

2Computer Network Lab.

목 차 다중전송

인터넷상에서의 다중전송

다중전송 주소와 다중전송 그룹

라우터와 라우팅

다중전송 소켓 작업

생성자

메소드

MulticastSniffer

MulticastSender

결론

Page 3: 13.  다중전송 소켓

3Computer Network Lab.

다중전송 하나의 호스트에서 다중전송 그룹에 가입한 다른

호스트들에게 데이터를 전송하는 것

Page 4: 13.  다중전송 소켓

4Computer Network Lab.

인터넷상에서의 다중전송

01

234

4

5 4 3 2 1 0

캠퍼스 세상

3

3

21

21

2

Page 5: 13.  다중전송 소켓

5Computer Network Lab.

다중전송 주소와 다중전송 그룹

다중전송 주소 다중전송 주소는 224.0.0.0 – 239.255.255.255 사이의 IP

주소 사용

주소의 첫번째 4 비트로 1110 을 갖는 클래스 D 로 주소

다중전송 주소도 호스트 이름을 가질 수 있음

011 multicast address(28bits)1

Page 6: 13.  다중전송 소켓

6Computer Network Lab.

다중전송 주소와 다중전송 그룹

다중전송 그룹 다중전송 주소를 공유하는 인터넷 호스트들의 집단

다중전송 그룹의 가입과 탈퇴는 자유

그룹은 일시적일 수도 있고 , 영구한 것일 수도 있음

현재 자바는 다중전송 그룹을 만들 수 있는 기능이

없지만 , 그룹에 가입할 수 있는 클래스 제공

IANA(Internet Assigned Number Authority) 에서

필요한 경우 영구 다중전송 주소 배부

Page 7: 13.  다중전송 소켓

7Computer Network Lab.

라우터와 라우팅다중전송 소켓을 이용하지 않음다중전송 소켓을 이용함

클라이언트

라우터

인터넷

라우터

서버

Page 8: 13.  다중전송 소켓

8Computer Network Lab.

다중전송 소켓 작업 MulticastSocket() 생성자를 이용해 객체 생성

MulticastSocket 의 joinGroup() 메소드를 사용하여 다중전송 그룹 가입

DatagramSocket 의 receive() 메소드를 호출을 통한 데이터 수신

MulticastSocket 의 leaveGroup() 메소드를을 호출하여 다중전송 그룹 탈퇴

java.net.DatagramSocket 의 close() 메소드를 사용하여 소켓 종료

Page 9: 13.  다중전송 소켓

9Computer Network Lab.

생성자 (1/4)

public MulticastSocket() throws SocketException

익명 포트에 바인드 (bind) 되는 소켓을 생성 .

java.net.DatagramSocket 의 getLocalPort() 을 통해

포트 번호 획득 .

소켓 생성 불가능 시에 SocketException 발생

Page 10: 13.  다중전송 소켓

10Computer Network Lab.

생성자 (2/4)import java.io.*;import sun.net.*;import java.net.*;

public class MulticastConstructor {

public static void main(String[] args) { try { MulticastSocket ms = new MulticastSocket(); System.out.println(ms); } catch (SocketException se) { System.err.println(se); } catch (IOException ioe) { System.err.println(ioe); } }}

Page 11: 13.  다중전송 소켓

11Computer Network Lab.

생성자 (3/4)

public MulticastSocket(int port) throws SocketExce

ption

잘 알려진 포트로 데이터 그램을 수신하는 소켓 생성

1 – 1023 포트에 바인드시 시스템 루트권한 필요

소켓 생성 불가능 시에 SocketException 발생

Page 12: 13.  다중전송 소켓

12Computer Network Lab.

생성자 (4/4)import java.io.*;import sun.net.*;import java.net.*;

public class MulticastPortConstructor {

public static void main(String[] args) { try { MulticastSocket ms = new MulticastSocket(2048); System.out.println(ms); } catch (SocketException se) { System.err.println(se); } catch (IOException ioe) { System.err.println(ioe); } }}

Page 13: 13.  다중전송 소켓

13Computer Network Lab.

메소드 (1/7)

public void joinGroup(InetAddress mcastaddr) thro

ws SocketException

MulticastSocket 로부터 데이터를 받기 위해 ,

다중전송 그룹에 가입

다중전송 주소가 아니면 (224.0.0.0 – 239.255.255.255)

SocketException 을 발생 ( 자바 1.1 에서는 IOExceptio

n)

Page 14: 13.  다중전송 소켓

14Computer Network Lab.

메소드 (2/7)

public void leaveGroup(Inetaddress mcastaddr) thro

ws SocketException

다중전송 그룹으로부터 더 이상 데이터그램을 받지 않을 것임을 알림

다중전송 주소가 아니면 (224.0.0.0 – 239.255.255.255)

SocketException 을 발생 ( 자바 1.1 에서는 IOExceptio

n)

Page 15: 13.  다중전송 소켓

15Computer Network Lab.

메소드 (3/7)

public synchronized void send(DatagramPacket dp,

byte ttl) throws IOException, SocketException

데이터를 DatagramPacket 의 객체 dp 에 채워 넣고 ,

이것을 전달

TTL 은 패킷의 이동 공간을 제한하기 위해서 사용

Page 16: 13.  다중전송 소켓

16Computer Network Lab.

메소드 (4/7)

미 대륙에서 만들어진 테이터그램을 기준으로 했을 때 TTL 추정치

다중전송할 목적지 TTL 값로컬호스트로컬서브넷가장 가까운 인터넷 라우터와 같은 쪽에 있지만 ,

다른 랜을 사용하는 로컬 캠퍼스미국에 있는 광 대역폭 사이트 , 백본에 가까이 있다 .

미국북미 대륙전 세계의 광대역 사이트전 세계에 있는 모든 사이트

0

1

16

32

48

64

128

225

Page 17: 13.  다중전송 소켓

17Computer Network Lab.

메소드 (5/7)

public void setInterface(InetAddress interface) thro

ws SocketException( 자바 1.1 에서만 ) 멀티 홈 호스트에서 , 다중전송을 위해서 사용될

네트워크 인터페이스 선택 InetAddress 가 로컬 기계상의 네트워크 인터페이스가

아니면 SocketException 발생

Page 18: 13.  다중전송 소켓

18Computer Network Lab.

메소드 (6/7)import sun.net.*;import java.net.*;import java.io.IOException;

public class SetInterface{

public static void main(String[] args) {

MulticastSocket ms;InetAddress ia;

try { ia = InetAddress.getByName("kiss.hannam.ac.kr");ms = new MulticastSocket(2048);ms.setInterface(ia);System.out.println(ms); }

catch (UnknownHostException ue) { System.err.println(ue); }

catch (SocketException ue) { System.err.println(ue); }

catch (IOException ue) { System.err.println(ue); }}

}

Page 19: 13.  다중전송 소켓

19Computer Network Lab.

메소드 (7/7)

public InetAddress getInterface() throws SocketException 사용중인 네트워크 인터페이스의 주소를 알고 싶을

때 사용

try { ms = new MulticastSocket(2048);

ia =ms.getInterface(); }

catch (SocketException se) { System.err.println(se);

}

Page 20: 13.  다중전송 소켓

20Computer Network Lab.

MulticastSniffer (1/2)import sun.net.*;import java.net.*;import java.io.*;

public class MulticastSniffer {

public static void main(String[] args) { InetAddress ia = null; byte[] buffer = new byte[65509]; DatagramPacket dp = new DatagramPacket(buffer, buffer.length); int port = 0; try { try { ia = InetAddress.getByName(args[0]); } catch (UnknownHostException e) {

// ia = InetAddressFactory.newInetAddress(args[0]); ia = InetAddress.getByName(args[0]);

} port = Integer.parseInt(args[1]); } // end try

Page 21: 13.  다중전송 소켓

21Computer Network Lab.

MulticastSniffer (2/2) catch (Exception e) { System.err.println(e); System.err.println("Usage: java MulticastSniffer MulticastAddress port"); System.exit(1); } try { MulticastSocket ms = new MulticastSocket(port); ms.joinGroup(ia); while (true) { ms.receive(dp); String s = new String(dp.getData(), 0, 0, dp.getLength()); System.out.println(s); } } catch (SocketException se) { System.err.println(se); } catch (IOException ie) { System.err.println(ie); } }}

Page 22: 13.  다중전송 소켓

22Computer Network Lab.

MulticastSender (1/2)import java.net.*;import java.io.*;import sun.net.*;

public class MulticastSender {

public static void main(String[] args) { InetAddress ia = null; int port = 0; String characters = "Here's some multicast data\n"; byte[] data = new byte[characters.length()]; // read the address from the command line try { try { ia = InetAddress.getByName(args[0]); } catch (UnknownHostException e) { / ia = InetAddressFactory.newInetAddress(args[0]);

ia = InetAddress.getByName(args[0]); } port = Integer.parseInt(args[1]); }

Page 23: 13.  다중전송 소켓

23Computer Network Lab.

MulticastSender (2/2)catch (Exception e) { System.err.println(e); System.err.println("Usage: java MulticastSender MulticastAddress port"); System.exit(1); } characters.getBytes(0, characters.length(), data, 0); DatagramPacket dp = new DatagramPacket(data, data.length, ia, port); try { MulticastSocket ms = new MulticastSocket(); ms.joinGroup(ia); for (int i = 1; i < 10; i++) { ms.send(dp, (byte) 1); } ms.leaveGroup(ia); ms.close(); } catch (SocketException se) { System.err.println(se); } catch (IOException ie) { System.err.println(ie); } }}

Page 24: 13.  다중전송 소켓

24Computer Network Lab.

결론 다중전송을 하기 위해서는 다중전송 라우터가

반드시 필요하지만 흔하지 않음 자바는 다중전송 그룹을 만들 수 있는 기능이

없음 .