Programming Language/Java

[JAVA] 네트워킹 이해하기 & InetAddress

  • -

네트워킹이란?

네트워킹이란 두 대 이상의 컴퓨터를 케이블로 연결하여 네트워크를 구성하는 것을 말한다.

자바에서 제공하는 java.net 패키지를 사용하면 네트워크 어플레이케이션은 단 몇 줄의 자바 코드 만으로도 작성이 가능하다.

클라이언트 / 서버

클라이언트/서버는 컴퓨간의 관계를 역할로 구분하는 개념이다.

서버는 서비스를 제공하는 컴퓨터이고 클라이언트는 서비스를 사용하는 컴퓨터가 된다.

서버 기반 모델

네트워크를 구성할 때 전용 서버를 두는 것을 서버 기반 모델이라고 한다.

서버 기반 모델의 특징으로는 다음과 같다

  • 안정적인 서비스의 제공이 가능하다.
  • 공유 데이터의 관리와 보안이 용이하다.
  • 서버구축비용과 관리비용이 든다.

P2P 모델

별도의 전용서버없이 각 클라이언트가 서버역할을 동시에 수행하는 것을 P2P모델이라고 한다.

P2P 모델의 특징은 다음과 같다.

  • 서버구축 및 운용비용을 절잠할 수 있다.
  • 자원의 활용을 극대화 할 수 있다.
  • 자원의 관리가 어렵다.
  • 보안이 취약하다.

IP주소

IP주소는 컴퓨터를 구별하는데 사용되는 고유한 값으로 인터넷에 연결된 모든 컴퓨터는 IP주소를 갖는다. IP주소는 4byte의 정수로 구성되어 있으며 4개의 정수가 마침표를 구분자로 'a, b, c, d'와 같은 형식으로 표현된다. 여기서 a, b, c, d는 부호 없는 1byte값, 즉 0~255사이의 정수이다.

 

IP주소는 다시 네트워크 주소와 호스트 주소로 나눌 수 있는데 32byte의 IP주소 중에서 네트워크 주소와 호스트 주소가 각각 몇 byte를 차지하는 지는 네트워크를 어떻게 구성하였는지에 따라 달라진다.

 

서로 다른 두 호스트의 IP주소의 네트워크 주소가 같다는 것은 두 호스트가 같은 네트워크에 포함되어 있다는 것을 의미한다. IP주소와 서브넷 마스크를 '&' 연산하면 네트워크 주소를 얻어낼 수 있어서 두 호스트가 같은 네트워크 상에 존재하는지를 쉽게 확인할 수 있다.

InetAddress

자바에는 IP주소를 다루기 위한 클래스로 InetAddress를 제공한다.

InetAddress에는 다음과 같은 메서드가 정의되어 있다.

메서드  설명
byte[] getAddress() IP주소를 byte배열로 반환
static InetAddress[] getAllByName(String host) 도메인명에 지정된 모든 호스트의 IP주소를 배열에 담아 반환
static InetAddress getByAddress(byte[] addr) byte배열을 통해 IP주소를 얻는다
static InetAddress getByName(String host) 도메인명을 통해 IP주소를 얻는다
String getCanonicalHostName() FQND를 반환한다
String getHostName() 호스트의 이름을 반환한다
String getHostAddress() 호스트의 IP주소를 반환한다
static InetAddress getLocalHost() 지역호스트의 IP주소를 반환한다
boolean isMulticastAddress() IP주소가 멀티캐스트 주소인지 알려준다
boolean isLoopbackAddress() IP주소가 loopback주소(127.0.0.1)인지 알려준다

활용 예제

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;

public class NetworkEx1 {
    public static void main(String[] args) {
        InetAddress ip = null;
        InetAddress[] ipArr = null;

        try{
            ip = InetAddress.getByName("www.naver.com");
            System.out.println("getHostName() : " + ip.getHostName());          // getHostName() : www.naver.com
            System.out.println("getHostAddress() : " + ip.getHostAddress());    // getHostAddress() : 223.130.195.95
            System.out.println("toString() : " + ip.toString());                // toString() : www.naver.com/223.130.195.95

            byte[] ipAddr = ip.getAddress();
            System.out.println("getAddress() : " + Arrays.toString(ipAddr));    // getAddress() : [-33, -126, -61, 95]

            String result = "";
            for (int i = 0; i < ipAddr.length; i++) {
                result += (ipAddr[i] < 0) ? ipAddr[i] + 256 : ipAddr[i];
                result += ".";
            }

            System.out.println("getAddress() + 256 : " + result);               // getAddress() + 256 : 223.130.195.95.
            System.out.println();

            ip = InetAddress.getLocalHost();
            System.out.println("getHostName() : " + ip.getHostName());          // getHostName() : DESKTOP-71R57IK
            System.out.println("getHostAddress() : " + ip.getHostAddress());    // getHostAddress() : 
            System.out.println();

            ipArr = InetAddress.getAllByName("www.naver.com");
            for (int i = 0; i < ipArr.length; i++) {
                System.out.println("ipArr[" +i+"] : " + ipArr[i]);
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }

    }
}

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.