네트워킹(Networking) (1) - InetAddress

2022. 4. 30. 11:21·자바/네트워킹

1. 네트워킹의 개념

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

 

- 자바에서 제공하는 java.net 패키지를 사용하면 이러한 네트워크 어플리케이션의 데이터 통신

부분을 단 몇 줄의 자바 코드만으로도 쉽게 작성할 수 있다.

 

- 아래 2번부터는 간단한 네트워크 기본 개념을 다룰 것이므로, 가볍게 읽고 넘어가자.

 

 

 

 

2. 클라이언트/서버

- 클라이언트는 서비스를 사용하는 컴퓨터(Service User)이다.

 

- 서버는 서비스를 제공하는 컴퓨터(Service Provider)이다.

 

- 서버가 서비스를 제공하기 위해서는 서버 프로그램이 있어야 하고, 클라언트가 서비를 제공받기

위해서 서버 프로그램과 연결할 수 있는 클라이언트 프로그램이 있어야 한다.

 

- 클라이언트는 서버의 역할을 할 수 있는데, FTP 서버 프로그램이나 Tomcat과 같은 웹서버 프로그램을

설치하면 서버역할 또한 가능하다.

 

- 파일 공유 프로그램인 소리바다나 푸르나와 같은 프로그램은 클라이언트 프로그램과 서버 프로그램을 하나로

합친 것으로, 이를 설치한 컴퓨터는 클라이언트인 동시에 서버가 되어 파일을 가져오는 동시에 또 다른 컴퓨터

에게 파일을 제공할 수 있다.

 

 

- 아래는 서버기반 모델과 P2P의 장단점을 설명한다.

서버기반 모델 P2P
안정적인 서비스의 제공이 가능하다. 서버구축 및 운용비용을 절감할 수 있다.
공유 데이터의 관리와 보안이 용이하다. 자원의 활용을 극대화 할 수 있다.
서버구축비용과 관리 비용이 든다. 자원의 관리가 어렵다.
  보안이 취약하다.

 

( 네트워크를 구성할 때 전용 서버를 두는 것을 서버기반모델(server-based-model)이라 한다. )

( 별도의 전용 서버없이 각 클라이언트가 서버역할을 동시에 수행하는 것을 P2P(peer-to-peer)이라 한다. )

 

 

 

 

3. IP 주소

- 4byte 정수로 구성되어 있다.

 

- 4개의 정수가 마침표를 구분자로 'a,b,c,d'와 같은 형식으로 표현된다.

 

- 각 자리당 1byte이며, 범위는 0~255 의 정수이다.

 

- IP 주소는 네트워크 주소와 호스트 주소로 나뉜다.

( 그러므로, 각각 몇 bit를 차지하는 지는 네트워크의 구성에 따라 다르다. )

 

- 만약 서로 다른 호스트의 IP주소의 네트워크 주소가 같다면, 같은 네트워크에 포함되어 있다는 것을 의미한다.

 

- CMD를 켜 ipconfig.exe를 실행시키면 아래와 같이 자세한 IP 주소가 나오게 된다.

 

Ethernet adapter 로컬 영역 연결:

          Connection-specific DNS Suffix     .  :

          IP Address..............................................................: 192.168.10.100

          Subnet Mask.........................................................: 255.255.255.0

          ....

 

( 여기서 IP주소와 서브넷 마스크를 2진수로 비트연산(&)을 하면 네트워크 주소만 뽑아낼 수 있다. )

( 그 결과로 네트워크 주소는 앞 24비트(192.168.10)과 호스트 주소 뒤 8비트(100)이라는 것을 알 수 있다. )

 

( 그러므로, 호스트 256(2^8)의 호스트만이 이 네트워크에 포함될 수 있다. )

( 그러나, 0(192.168.10.0)은 네트워크 자신, 255(192.168.10.255)는 브로드캐스트 주소로 사용되기 때문에

실제로는 네트워크에 포함 가능한 호스트 개수는 254개이다. )

 

 

 

 

4. InetAddress

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

 

- 아래는 InetAddress의 메서드를 설명한다.

 

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

 

 

 

 

4-1 InetAddress를 이해하기 위한 예제(1)

 

package Networking;

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

public class Exercise001 {	
	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());
				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 {
				ip = InetAddress.getLocalHost();
				System.out.println("getHostName() :"   +ip.getHostName());
				System.out.println("getHostAddress() :"+ip.getHostAddress());
				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 (UnknownHostException e) {
				e.printStackTrace();
			}

		} // main
	}
}

 

 

 

다음장

네트워킹(Networking) (2) (tistory.com)

 

네트워킹(Networking) (2)

5. URL (Uniform Resource Locator) - URL은 인터넷에 존재하는 여러 서버들이 제공하는 자원에 접근할 수 있는 주소를 표현하기 위한 것이다. - 형식은 '프로토콜://호스트명:포트번호/경로명/파일명?쿼리

kind-coding.tistory.com

 

저작자표시 (새창열림)

'자바 > 네트워킹' 카테고리의 다른 글

소켓 프로그래밍: TCP와 UDP(4)  (0) 2022.05.02
소켓 프로그래밍: TCP와 UDP(3)  (0) 2022.05.02
소켓 프로그래밍: TCP와 UDP(2)  (0) 2022.05.02
소켓 프로그래밍: TCP와 UDP(1)  (0) 2022.05.01
네트워킹(Networking) (2) - URL, URLConnection  (0) 2022.04.30
'자바/네트워킹' 카테고리의 다른 글
  • 소켓 프로그래밍: TCP와 UDP(3)
  • 소켓 프로그래밍: TCP와 UDP(2)
  • 소켓 프로그래밍: TCP와 UDP(1)
  • 네트워킹(Networking) (2) - URL, URLConnection
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      serializable
      소켓 프로그래밍
      유용한 클래스
      snail
      스트림
      역직렬화
      Arrays
      알고스팟
      Collections Framework
      안정 정렬
      코딩트리조별과제
      map()
      중간연산
      file
      java.time 패키지
      제자리 정렬
      문자 기반 스트림
      선택 정렬
      TCP 소켓 프로그래밍
      InputStream
      ServerSocket
      안드로이드 스튜디오
      코딩테스트
      불안정 정렬
      java.lang패키지
      람다식
      자바 개념
      outputstream
      다형성
      코드트리
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    네트워킹(Networking) (1) - InetAddress
    상단으로

    티스토리툴바