ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [NIO.2]NetworkChannel
    JAVA/NIO2 2014. 2. 14. 00:40

    자바에서 소켓은 JDK 1.0에서 소개 되었고, 버젼이 올라가고 시간이 흐르면서 많은 것이 변했다.

    특히 자바7 NIO.2에서 TCP/UDP 기반 애플리케이션을 작성하는 새로운 인터페이스/클래스를 추가하고, 기존 클래스에 새로운 매소드를 추가해서 소켓 지원을 개선 했다.


    무엇보다도 NIO.2에서는 모든 네트워크 채널 클래스에 공통 매서드를 제공하는 NetworkChannel 인터페이스를 도입했다.

    소켓 채널을 동기화하는 주요 클래스인 ServerSocketChannel, SocketChannel, DatagramChannel은 모두 NetworkChannel 인터페이스를 구현 한다.


    NetworkChannel 주요 내용

     - 로컬 주소에 바인딩 하거나 반환하는 매서드

    - 새로운 SocketOption<T> 인터페이스와 StandardSocketOption 클래스를 통해 소켓 옵션을 설정하거나, 가져오는 매소드 등이 정의

     - 서브인터페이스로 MulticastChannel 인터페이스 도입으로 인해 IP 멀티캐스팅을 지원하는 네트워크 채널을 매핑(DatagramChannel 에서만 구현 할수 있음)


    NetworkChannel 상세 소개


    제공 메소드

     - bind() 채널의 소켓을 로컬 주소에 바인딩 한다.(null 입력시 로컬 바인딩)

     - getLocalAddress() 바인딩되 주소를 추출 한다.(바인딩 되어 있지 않다면 null 반환)

     - getOption(SocketOption<T> name) 옵션을 가져온다.

     - setOption(SocketOption<T> name, T value) 옵션을 설정한다.

     - supportedOptions() 특정 채널에서 지원하는 옵션을 가져오는 작업(네트워크 소켓)



    StandardSocketOption 클래스에 있는 표준 옵션으로 SocketOption<T> 인터페이스를 구현한 표준 소켓 옵션

    IP_MULTICAST_IF 

    데이터그램 지향 소켓에서 전송되는 멀티캐스트 다이어그램에서 사용되는 네트워크인터페이스를 지정하기 위해 사용한다. null로 지정되면 운영체제에서 송신 인터페이스를 선택한다. 기본 동작에 따르면 null로 지정되면 소켓이 바인딩된 다음에 이 옵션의 값을 설정할 수 있다.


    IP_MULTICAST_LOOP

    멀티캐스트 다이어그램의 루프백을 제어하는 불 값(운영체제에 따라 다름)이다. 애플리케이션 작성자로서 자시이 전송하느 데이터를 자신의 호스트에 루프백할지를 결정 할수 있다. 기본 값은 true지만, 소켓이 바인딩된 이후에 이 옵션의 값을 설정할 수 있다.


    IP_MULTICAST_TTL

    데이터그램 지향 소켓에서 전송된 멀티캐스트 패킷의 TTL(time-to-live)로 0~255 사이의 정수 값이다. 이 값을 지정하지 않으면 멀티케스트 데이터그램은 로컬 네트워크 외부로 전달되는 것을 예방하기 위해 1을 기본 값으로 해서 전송되다. 이 옵션으로 멀티캐스트 데이터그램의 범위를 제어할 수 있다. 기본 값은 1로 설정되어 있지만 소켓이 바인딩되 이후에 언제든지 이 값을 설정 할수 있다.


    IP_TOS

    소켓에 의해 전송되는 IP 패킷 안에 정의되는 TOS(Type of Service) 옥텟(octet) 값을 나타내는 정수 값이다.(이 값의 해석은 네트워크로 제한된다.) 현재 이 값은 IPv4에서만 이용할 수 있으며, 기본 값은 보통 0이다 소켓이 바인된 이후 언제든 이 값을 설정 할수 있다.


    SO_BROADCAST

    브로드캐스트 데이터그램의 전송 여부를 결정하는 불 값이다.(IPv4 브로드캐스트 주소로 전송되는 데이터그램 지향 소켓에 한하여 동작) 기본 값은 FALSE이나 이 옵션은 언제든 설정할 수 있다.


    SO_KEEPALIVE 

    연결 유지를 결정하는 불 값이다. 기본값은 FALSE이나 이 옵션의 값은 언제든 설정할 수 있다.


    SO_LINGER 

    임아웃 시간(초)을 지정하는 정수 값이다. close() 매소드로 블로킹 모드 소켓을 닫으려 하면 저송하지 못한 데이터(논블로킹 모드에서 정의되어 있지 않음)를 전송하기 전에 linger interval 동안 대기한다.

    기본값은 음수로 되어 있는데, 이는 이 옵션이 비활성화 되어 있다는 뜻이다. 이 옵션은 언제든 설정할수 있으며, 최대 값은 운영체제에 따라 다르다.


    SO_RCVBUF 

    소켓 수신버퍼의 크기(바이트 단위)를 지정하는 정수 값(입력 버퍼는 네트워크 구현에서 사용된다)이다. 기본값은 운영체제에 따라 다르지만, 소켓이 바인딩된 이후나 열결된 이후에 이 옵션의 값을 설정 할 수 있다. 소켓이 바인딩된 이후 운영체제에 따라 이 값은 바뀔수 있다.


    SO_SNDBUF 

    소켓 전송 버퍼의 크기(바위트 단위)를 지정하는 정수 값(출력 버퍼는 네트워크 구현에서 사용된다.)이다. 기본값은 운영체제에 따라 다르지만 소켓이 바인딩된 이후나 연결된 이후에 옵션의 값을 설정할 수 있다. 소켓이 바인딩된 이후 운영체제에 따라 이 값은 바뀔수 있다.


    SO_REUSEADDR 

    주소의 재사용 여부를 나타내는 정수 값이다. 여러 프로그램이 같은 주소에 바인딩되어야 하는 데이터그램 멀티캐스팅에서 매우 유용한 옵션인다. 스트림 지향 소켓의 경우 이전 연결이 TIME_WAIT 상태에 있을 때 소켓을 주소에 바인딩할 수 있다.(TIME_WAIT는 운영체제가 소켓을 닫으라는 요청을 수신했지만 클라이언트 측의 통신 지연을 대비해 대기하라는 것을 뜻한다.) 기본 값은 운영체제에 따라 다르지만, 소켓이 바인딩되거나 연결되기 전에 설정 할 수 있다.


    TCP_NODELAY

    네이글(Nagle) 알고르짐의 사용여부를 정하는 정수 값(http://en.wikipedia.org/wiki/Nagle's_algorithm 참조)이다. 기본값은 FALSE지만, 이 옵션은 언제든지 설정할 수 있다.



    참조 문서 : http://docs.oracle.com/javase/7/docs/api/java/nio/channels/NetworkChannel.html


    'JAVA > NIO2' 카테고리의 다른 글

    블로킹 TCP 서버/클라이언트 작성하기  (0) 2014.03.11
    [NIO.2]블로킹(BIO) 논블로킹(NIO) 차이점  (0) 2014.03.08
    [NIO.2]FileChannel  (0) 2014.02.05
    [NIO.2]ByteBuffer  (0) 2014.02.04
    [NIO.2]SeekableByteChannel  (0) 2014.02.04
Designed by Tistory.