Presentation is loading. Please wait.

Presentation is loading. Please wait.

Computer Network Lab. 1 13. 다중전송 소켓 컴퓨터 네트워크 실험실 이 희 규, 조 한 진.

Similar presentations


Presentation on theme: "Computer Network Lab. 1 13. 다중전송 소켓 컴퓨터 네트워크 실험실 이 희 규, 조 한 진."— Presentation transcript:

1 Computer Network Lab. 1 13. 다중전송 소켓 컴퓨터 네트워크 실험실 이 희 규, 조 한 진

2 Computer Network Lab. 2 목 차목 차 n 다중전송 n 인터넷상에서의 다중전송 n 다중전송 주소와 다중전송 그룹 n 라우터와 라우팅 n 다중전송 소켓 작업 n 생성자 n 메소드 n MulticastSniffer n MulticastSender n 결론

3 Computer Network Lab. 3 다중전송 n 하나의 호스트에서 다중전송 그룹에 가입한 다 른 호스트들에게 데이터를 전송하는 것

4 Computer Network Lab. 4 인터넷상에서의 다중전송 0 1 2 3 4 4 5 4 32 10 캠퍼스세상 3 3 2 1 2 1 2

5 Computer Network Lab. 5 다중전송 주소와 다중전송 그룹 n 다중전송 주소 l 다중전송 주소는 224.0.0.0 – 239.255.255.255 사이의 IP 주소 사용 l 주소의 첫번째 4 비트로 1110 을 갖는 클래스 D 로 주소 l 다중전송 주소도 호스트 이름을 가질 수 있음 011multicast address(28bits)1

6 Computer Network Lab. 6 다중전송 주소와 다중전송 그룹 n 다중전송 그룹 l 다중전송 주소를 공유하는 인터넷 호스트들의 집단 l 다중전송 그룹의 가입과 탈퇴는 자유 l 그룹은 일시적일 수도 있고, 영구한 것일 수도 있음 l 현재 자바는 다중전송 그룹을 만들 수 있는 기능이 없 지만, 그룹에 가입할 수 있는 클래스 제공 l IANA(Internet Assigned Number Authority) 에서 필요한 경우 영구 다중전송 주소 배부

7 Computer Network Lab. 7 라우터와 라우팅 다중전송 소켓을 이용하지 않음다중전송 소켓을 이용함 클라이언트 라우터 인터넷 라우터 서버

8 Computer Network Lab. 8 다중전송 소켓 작업 n MulticastSocket() 생성자를 이용해 객체 생성 n MulticastSocket 의 joinGroup() 메소드를 사용하여 다중전 송 그룹 가입 n DatagramSocket 의 receive() 메소드를 호출을 통한 데이터 수신 n MulticastSocket 의 leaveGroup() 메소드를을 호출하여 다 중전송 그룹 탈퇴 n java.net.DatagramSocket 의 close() 메소드를 사용하여 소 켓 종료

9 Computer Network Lab. 9 생성자 (1/4) n public MulticastSocket() throws SocketException l 익명 포트에 바인드 (bind) 되는 소켓을 생성. l java.net.DatagramSocket 의 getLocalPort() 을 통해 포트 번호 획득. l 소켓 생성 불가능 시에 SocketException 발생

10 Computer Network Lab. 10 생성자 (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); }

11 Computer Network Lab. 11 생성자 (3/4) n public MulticastSocket(int port) throws SocketException l 잘 알려진 포트로 데이터 그램을 수신하는 소켓 생성 l 1 – 1023 포트에 바인드시 시스템 루트권한 필요 l 소켓 생성 불가능 시에 SocketException 발생

12 Computer Network Lab. 12 생성자 (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); }

13 Computer Network Lab. 13 메소드 (1/7) n public void joinGroup(InetAddress mcastaddr) throws SocketException l MulticastSocket 로부터 데이터를 받기 위해, 다중전송 그룹에 가입 l 다중전송 주소가 아니면 (224.0.0.0 – 239.255.255.255) SocketException 을 발생 ( 자바 1.1 에서는 IOException)

14 Computer Network Lab. 14 메소드 (2/7) n public void leaveGroup(Inetaddress mcastaddr) throws SocketException l 다중전송 그룹으로부터 더 이상 데이터그램을 받지 않을 것임을 알림 l 다중전송 주소가 아니면 (224.0.0.0 – 239.255.255.255) SocketException 을 발생 ( 자바 1.1 에서는 IOException)

15 Computer Network Lab. 15 메소드 (3/7) n public synchronized void send(DatagramPacket dp, byte ttl) throws IOException, SocketException l 데이터를 DatagramPacket 의 객체 dp 에 채워 넣고, 이것 을 전달 l TTL 은 패킷의 이동 공간을 제한하기 위해서 사용

16 Computer Network Lab. 16 메소드 (4/7) n 미 대륙에서 만들어진 테이터그램을 기준으로 했을 때 TTL 추정치 다중전송할 목적지 TTL 값 로컬호스트 로컬서브넷 가장 가까운 인터넷 라우터와 같은 쪽에 있지만, 다른 랜을 사용하는 로컬 캠퍼스 미국에 있는 광 대역폭 사이트, 백본에 가까이 있다. 미국 북미 대륙 전 세계의 광대역 사이트 전 세계에 있는 모든 사이트 0 1 16 32 48 64 128 225

17 Computer Network Lab. 17 메소드 (5/7) n public void setInterface(InetAddress interface) throws SocketException( 자바 1.1 에서만 ) l 멀티 홈 호스트에서, 다중전송을 위해서 사용될 네트 워크 인터페이스 선택 l InetAddress 가 로컬 기계상의 네트워크 인터페이스가 아니면 SocketException 발생

18 Computer Network Lab. 18 메소드 (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); } }

19 Computer Network Lab. 19 메소드 (7/7) n public InetAddress getInterface() throws SocketException l 사용중인 네트워크 인터페이스의 주소를 알고 싶을 때 사용 try { ms = new MulticastSocket(2048); ia =ms.getInterface(); } catch (SocketException se) { System.err.println(se); }

20 Computer Network Lab. 20 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 { 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

21 Computer Network Lab. 21 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); }

22 Computer Network Lab. 22 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 { ia = InetAddress.getByName(args[0]); } catch (UnknownHostException e) { / ia = InetAddressFactory.newInetAddress(args[0]); ia = InetAddress.getByName(args[0]); } port = Integer.parseInt(args[1]); }

23 Computer Network Lab. 23 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); }

24 Computer Network Lab. 24 결론 n 다중전송을 하기 위해서는 다중전송 라우터가 반드시 필요하지만 흔하지 않음 n 자바는 다중전송 그룹을 만들 수 있는 기능이 없 음.


Download ppt "Computer Network Lab. 1 13. 다중전송 소켓 컴퓨터 네트워크 실험실 이 희 규, 조 한 진."

Similar presentations


Ads by Google