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 |