네트워크(Network)

네트워크(Network)

1. 네트워크

 - 연결된 객체 간의 상호작용

 - 인터넷 안에서 이뤄지는 작용

 

2. 주요 개념들

 - IP 주소 : 인터넷상에서 장치간 통신을 위해 각 장치에 지정하는 식별용 주소

 - 로컬 호스트 : 내 컴퓨터가 내 컴퓨터에 접속할 수 있는 주소 (127.0.0.1)

 - 포트(port) : 컴퓨터 내에서 실행되고 있는 네트워크 프로세스를 구분하기 위한 값

    ※ 대표적인 포트들 :

        - 53 : 도메인 이름

        - 20 : 파일 전송 포트

        - 80 : HTTP 포트 (웹 전용)

 - 소켓 : 데이터 전송 시, 데이터를 묶는 단위

 

3. 네트워크 방식

 - 네트워크에는 정보를 주고받는 '방식(Protocol)'이 나뉘어 있음

    - TCP : 패킷 단위로 데이터를 전송, 실패 시 재전송을 하는 신뢰도가 높은 방식

    - UDP : 패킷 단위로 데이터를 전송, 실패 시 재전송 하지 않는 신뢰도가 낮은 방식

 

// Example1
package sample;

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

public class Main {
	public static void main(String[] args) throws IOException {
		//#1. InetAddress 객체 생성
		//@1-1. 원격지IP 객체 생성
		InetAddress ia1 = InetAddress.getByName("www.google.com");
		InetAddress ia2 = InetAddress.getByAddress(new byte[] {(byte)172,(byte)217,(byte)161,36});
		InetAddress ia3 = InetAddress.getByAddress("www.google.com", new byte[] {(byte)172,(byte)217,(byte)161,36});
		System.out.println(ia1);	// www.google.com/142.250.206.196
		System.out.println(ia2);	// /172.217.161.36
		System.out.println(ia3);	// www.google.com/172.217.161.36
		System.out.println();
		
		//@1-2. 로컬/로프백IP
		InetAddress ia4 = InetAddress.getLocalHost();
		InetAddress ia5 = InetAddress.getLoopbackAddress();
		System.out.println(ia4);	// 자신의 IP 주소
		System.out.println(ia5);	// 자신의 로컬 호스트
		System.out.println();
		
		
		//@1-3. 하나의 호스트가 여러 개의 IP를 가지고 있는 경우
		InetAddress[] ia6 = InetAddress.getAllByName("www.naver.com");
		System.out.println(Arrays.toString(ia6));	// [www.naver.com/223.130.200.107, www.naver.com/223.130.195.200]
		System.out.println();
		
		//#2. InetAddress 메소드
		byte[] address = ia1.getAddress();
		System.out.println(Arrays.toString(address));
		System.out.println(ia1.getHostAddress());
		System.out.println(ia1.getHostName());
		System.out.println();
		
		// 1000ms의 시간 제한을 두고,
		System.out.println(ia1.isReachable(1000)); //true
		System.out.println(ia1.isLoopbackAddress()); //false
		System.out.println(ia1.isMulticastAddress()); //false 224-239.0-255.0-255.0-255
		System.out.println(InetAddress.getByAddress(new byte[] {127,0,0,1}).isLoopbackAddress()); //true
		System.out.println(InetAddress.getByAddress(new byte[] {(byte)234,(byte)234,(byte)234,(byte)234}).isMulticastAddress()); //true
	}
}

 

// Example2
package sample;

import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;

public class Main {
	public static void main(String[] args) throws UnknownHostException {
		
		//#1. SocketAddress 객체 생성 (InetSocketAddress 생성자 사용)
		InetAddress ia = InetAddress.getByName("www.google.com");
		int port = 10000;
		InetSocketAddress isa1 = new InetSocketAddress(port);	// 10000번 포트
		InetSocketAddress isa2 = new InetSocketAddress("www.google.com", port);	// 구글의 10000번 포트
		InetSocketAddress isa3 = new InetSocketAddress(ia, port);
		
		System.out.println(isa1);	// 0.0.0.0/0.0.0.0:10000 (주소가 없는 상태)
		System.out.println(isa2);	// www.google.com/172.217.25.164:10000
		System.out.println(isa3);	// www.google.com/172.217.25.164:10000
		System.out.println();

		//#2. SocketAddress의 메소드
		System.out.println(isa2.getAddress());		// www.google.com/172.217.25.164
		System.out.println(isa2.getHostName());		// www.google.com
		System.out.println(isa2.getPort());			// 10000
	}
}