자바

18.6 네트워크 기초

네트워크(network) 는 여러 대의 컴퓨터를 통신 회선으로 연결한 것을 말한다. 만약 여러분의 집에 방마다 컴퓨터가 있고, 이 컴퓨터들을 유.무선 등의 통신 회선으로 연결했다면 홈네트워크(homenetwork) 가 형성된 것이다. 지역 네트워크는 회사, 건물, 특정 영역에 존재하는 컴퓨터를 통신 회선으로 연결한 것을 말하고, 인터넷(internet)은 지역 네트워크를 통신 회선으로 연결한 것을 말한다.

18.6.1 서버와 클라이언트

컴퓨터가 인터넷에 연결되어 있다면 실제로 데이터를 주고받는 행위는 프로그램들이 한다. 서비스를 제공하는 프로그램을 일반적으로 서버(server)라고 부르고, 서비스를 받는 프로그램을 클라이언트(client)라고 부른다. 인터넷에서 두 프로그램이 통신하기 위해서는 연결을 요청하는 역할과 연결을 수락하는 역할이 필요하다. 클라이언트는 서비스를 받기 위해 연결을 요청하고, 서버는 연결을 수락하여 서비스를 제공해준다. 서버는 클라이언트가 요청( request)하는 내용을 처리해주고, 응답(response) 을 클라이언트로 보낸다.

클라이언트/서버(C/S:client/server)모델은 한 개의 서버와 다수의 클라이언트로 구성되는 것이 보통이나 두 개의 프로그램이 서버인 동시에 클라이언트 역할을 하는 p2p(peer to peer) 모델도 있다. p2p 모델에서는 먼저 접속을 시도한 컴퓨터가 클라이언트가 된다. 예를 들어 1:1 채팅과 파일 공유 프로그램이 여기에 포함된다.

 

18.6.2 IP 주소와 포트(Port) 

여러분의 집에는 고유한 주소가 있기 때문에 우편물이나 택배물이 정확하게 여러분의 집을 찾아간다. 컴퓨터에도 고유한 주소가 있다. 이것이 바로 IP(Internet Protocol)주소이다.  IP 주소는 네트워크 어댑터(랜(Lan) 카드) 마다 할당되는데, 한 개의 컴퓨터에 두 개의 네트워크 어댑터가 장착 되어 있다면, 두 개의 IP 주소를 할당할 수 있다. 네트워크 어댑터에 어떤 IP 주소가 부여되어 있는지 확인하려면 명령 프로프트(cmd.exe) 에서 다음과 같이 실행하면 된다.

IP 주소는 xxx.xxx.xxx.xxx 와 같은 형식으로 표현된다. 여기서 xxx는 부호 없는 0~255 사이의 정수이다. 연결할 상대방 컴퓨터의 IP 주소를 모른다면 프로그램들은 통신을 할 수 없다. 전화번호를 모르면 전화를 할 수 없는 이치와 같다. 우리가 전화번호를 모르면 114로 문의하듯이, 프로그램은 DNS( Domain Name System) 를 이용해서 연결할 컴퓨터의 IP 주소를 찾는다. 대중에게 서비스를 제공하는 대부분의 서버는 도메인 이름을 가지고 있는데, 다음과 같이 DNS 에 도메인 이름으로 IP 를 등록해 놓는다.

사용자는  IP 주소보다는 도메인 이름을 더 쉽게 기억하기 때문에 인터넷 서비스 광고를 보면 서버 컴퓨터의 IP 대신, 도메인 이름을 홍보한다. 인터넷 익스플로러와 같은 웹 브라우저는 사용자가 입력한 도메인 이름을 DNS에서 검색하여 IP를 얻은 다음, 해당 IP를 가진 서버로 연결한다.

한 대의 컴퓨터에는 다양한 서버 프로그램들이 실행될 수 있다. 예를 들어 웹(Web) 서버, 데이터 베이스 관리 시스템(DBMS) ,  FTP 서버 등이 하나의 IP 주소를 작는 컴퓨터에서 동시에 실행될 수 있다. 이 경우 클라이언트는 어떤 서버와 통신해야 할지 결정해야 한다. IP 는 컴퓨터의 네트워크 어댑터까지만 갈 수 있는 정보이기 때문에 컴퓨터 내에서 실행하는 서버를 선택하기 위해서는 추가적인 정보가 필요하다. 이 정보가 포트(port) 번호이다.

서버는 시작할 때 고정적인 포트 번호를 가지고 실행하는데, 이것을 포트 바인딩(binding) 이라고 한다. 예를 들어 기본적으로 웹 서버는 80번과 바인딩하고, FTP 서버는 21번과 바이딩한다. 클라이언트가 웹 서버에 연결하려면 80번으로 연결 요청을 해야 하고, FTP 서버에 연결하려면 21번으로 연결 요청을 해야 한다.

 

클라이언트도 서버에서 보낸 정보를 받기 위해 포트 번호가 필요한데, 서버와 같이 고정적인 포트 번호가 아니라 운영체제가 자동으로 부여하는 동적 포트 번호를 사용한다. 이 동적 포트 번호는 클라이언트가 서버로 연결 요청을 할 때 전송되어 서버가 클라이언트로 데이터를 보낼 때 사용된다.

포트 번호의 전체 범위는 0 ~65535인데, 다음과 같이 세 가지 범위로 구분된다.

구분명 범위 설명
Well Know Port Numbers 0 ~1023 국제인터넷주소관리기구(ICANN)가 특정 애플리케이션용으로 미리 예약한 포트
Registered Port Numbers 1024~49151 회사에서 등록해서 사용할 수 있는 포트
Dynamic Or Private Port Numbers 49152~65535 운영체제가 부여하는 동적 포트 또는 개인적인 목적으로 사용할 수 있는 포트

 

18.6.3 InetAddress 로 IP 주소 얻기

자바는 IP주소를 java.net.InetAddress 객체로 표현한다. InetAddress 는 로컬 컴퓨터의 IP 주소뿐만 아니라 도메인 이름을 DNS 에서 검색한 후 IP주소를 가져오는 기능을 제공한다. 로컬 컴퓨터의 InetAddress 를 얻고 싶다면 InetAddress.getLocalHost() 메소드를 다음과 같이 호출하면 된다.

InetAddress ia =InetAddress.getLocalHost();

외부 컴퓨터의 도메인 이름을 알고 있다면 다음 두 개의 메소드를 사용하여 InetAddress 객체를 얻으면 된다.

 

InetAddress ia =InetAddress.getByName(String host);

InetAddress[] iaArr =InetAddress.getAllByName(String host);

 

getByName() 메소드는 매개값으로 준 도메인 이름으로 DNS에서 단 하나의 IP 주소를 얻어와 InetAddress 를 생성하고 리턴한다. 연결  클라이언트가 많은 회사의 경우 서버의 과부하를 막기 위해 하나의 도메인 이름에 여러 개의 컴퓨터 IP 를 등록해서 운영하기도 한다. 이 경우 DNS 에 등록된 모든 IP 주소를 얻고 싶다면 getAllByName() 메소드를 호출하면 된다. 리턴 타입은 InetAddress[] 배열이다. InetAddress 객체에서 IP 주소를 얻기 위해서는 getHostAddress() 메소드를 다음과 같이 호출하면 된다. 리턴값은 문자열로된 IP 주소이다.

 

String ip =InetAddress.getHostAddress();

 

다음 예제는 로컬 컴퓨터의 IP와 네이버 (www.naver.com) 의 IP 정보를 출력한다.

 

public class InetAddressExample {

    public static void main(String[] args) {
        try{
            InetAddress  local =InetAddress.getLocalHost();
            
            System.out.println("내 컴퓨터 IP 주소 :" + local.getHostAddress());
            
            
            InetAddress[] iaArr =InetAddress.getAllByName("www.naver.com");
            for(InetAddress remote : iaArr){
                System.out.println("www.naver.com IP주소 :" + remote.getHostAddress());
            }
            
        }catch(UnknownHostException e){
            e.printStackTrace();
        }
    
    }
    
}
 

실행 결과를 보면 네이버는 동일한 도메인 이름으로 두 개의 IP를 가지고 있다.

내 컴퓨터 IP 주소 :169.254.39.190
www.naver.com IP주소 :125.209.222.141
www.naver.com IP주소 :202.179.177.22
 

 

 

 

about author

PHRASE

Level 60  머나먼나라

어진이는 자기를 다스린다. 치수(治水)하는 이는 물을 이끌고, 화살 만드는 이는 살대를 바르게 하고, 대목(大木,큰 건축물을 잘 짓는 기술을 가진 목수)은 목재를 다듬고, 어진 사람은 자기를 제어한다. -법구경

댓글 ( 4)

댓글 남기기

작성

자바 목록    more