[Java] Network 기초 용어 설명과 InetAddress 클래스를 활용하여 IP와 도메인 이름 다뤄보기

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

자바에서 제공하는 java.net 패키지를 사용하면 이러한 네트워크 어플리케이션의 데이터 통신 부분을 쉽게 작성할 수 있다.

 

 

클라이언트/서버

클라이언트/서버 는 컴퓨터간의 관계를 역할로 구분하는 개념이다. 서버는 서비스를 제공하는 컴퓨터 이고, 클라이언트는 서비스를 사용하는 컴퓨터가 된다.

 

하드웨어의 사양에 관계없이 서비스를 제공하는 소프트웨어가 실행되는 컴퓨터를 서버라 한다.

 

서비스는 서버가 클라이언트로부터 요청받는 작업을 처리하여 그 결과를 제공하는 것을 뜻한다.

 

서버가 서비스를 제공하기 위해서는 서버프로그램이 있어야 하고 클라이언트가 서비스를 제공받기 위해서는 서버프로그램과 연결할 수 있는 클라이언트 프로그램이 있어야 한다. ex)웹브라우저(클라이언트 프로그램)

 

 

네트워크를 구성할 때 전용서버를 두는 것을 서버기반모델(server-based model)이라 하고 별도의 전용서버없이 각 클라이언트가 서버역할을 동시에 수행하는 것을 P2P모델(peer-to-peer)이라 한다.

 

 

IP주소

IP주소는 컴퓨터를 구별하는데 사용되는 고유한 값으로 인터넷에 연결된 모든 컴퓨터는 IP주소를 갖는다.

 

IP주소와 서브넷 마스크를 비트연산자 '&'로 연산하면 IP주소에서 네트워크 주소만을 뽑아낼 수 있다.

 

호스트 주소가 0인 것은 네트워크 자신을 나타내고, 255는 브로드캐스트 주소로 사용되기 떄문에 실제로는 네트워크에 포함 가능한 호스트 개수는 254개 이다.

 

 

Domain

우리는 인터넷(웹) 서비스를 상요하기 위해 흔히 브라우저의 주소창에 "www.naver.com" 이나 "www.daum.net" 과 같은 이름을 입력한다.

 

이런 이름을 우리는 도메인 이름(Domain Name) 이라고 하며 시스템 내부적으로는 32 비트, 즉, 4 바이트로 표시되고 이를 IP주소라고 한다.

 

이 주소는 1바이트 마다 점을 찍어 192.18.97.71과 같이 표시된다.

 

하나의 도메인명에 여러 개의 IP 주소가 할당될 수도 있으며, 하나의 IP 주소에 여러 개의 도메인명이 부여될수도 있다.

 

하나의 IP 주소를 가진 컴퓨터를 호스트(컴퓨터)라고 하며, 하나의 호스트 내에는 용도에 따라 여러 개의 서버가 있을 수 있다.

 

각 서버에 접근하기 위해서는 포트(port)라는 통로를 이용하며 웹 서버의 경우는 포트가 80번이다.

 

그래서"www.naver.com:80" 이나 "www.daum.net:80"이라고 브라우저 주소창에 입력해도 동일한 웹 서비스를 이용할 수 있다

 

InetAddress

자바에서는 IP주소와 도메인 이름을 다루기 위한 클래스로 InetAddress를 제공하며 다음과 같은 메서드가 정의되어 있다.

 

기본적으로 IP4 이며 IP6은 Inet6Address 이다.

 

byte[] getAddress()

IP주소를 byte배열로 반환한다.

static InetAddress[]

getAllByName(String host)

도메인명(host)에 지정된 모든 호스트의 IP주소를 배열에 담아 반환한다.

static InetAddress getByAddress(byte[] addr)

byte배열을 통해 IP주소를 얻는다.

String getCanonicalHostName()

FQDN(full qualified domain name)을 반환한다.

String getHostAddress()

호스트의 IP 주소를 반환한다.

String getHostName()

호스트의 이름을 반환한다.

static InetAddress getLocalHost()

지역호스트의 IP주소를 반환한다.

boolean isMulticastAddress()

IP주소가 멀티캐스트 주소인지 알려준다.

boolean isLoopbackAddress()

IP주소가 loopback 주소(127.0.0.1)인지 알려준다.

 

public class NetworkEx1 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
          InetAddress ip = null;
          InetAddress[] ipArr = null;
          
          try {
              ip = InetAddress.getByName("www.naver.com");
 
              System.out.println("getHostName () : " + ip.getHostName());
              System.out.println("getHostAddress () : " + ip.getHostAddress());
              System.out.println("toString() : " + ip.toString());
 
              byte[] ipAddr = ip.getAddress();
              System.out.println("getAddress() : " + Arrays.toString(ipAddr));
 
              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 );
              System.out.println();
          } catch (UnknownHostException e) {
              e.printStackTrace();
          }
 
          try {
              ipArr = InetAddress.getAllByName("www.naver.com");
 
              for(int i=0; i<ipArr.length; i++) {
                   System.out.println("ipArr["+i+"] : " + ipArr[i]);
              }
          } catch (Exception e) {
              e.printStackTrace();
          }
     }
 
}
 
 

 

실행결과

getHostName () : www.naver.com

getIPName () : 210.89.160.88

toString() : www.naver.com/210.89.160.88

getAddress() : [-46, 89, -96, 88]

getAddress() + 256 : 210.89.160.88.

ipArr[0] : www.naver.com/210.89.160.88

ipArr[1] : www.naver.com/125.209.222.141

댓글

Designed by JB FACTORY