elevne's Study Note
Java - Network, IP 본문
네트워크는 여러 대의 컴퓨터를 통신 회선으로 연결한 것을 말한다. 지역 네트워크는 회사, 건물, 특정 영역에 존재하는 컴퓨터를 통신 회선으로 연결한 것, 인터넷은 이러한 지역 네트워크들을 통신 회선으로 연결한 것을 말한다.
컴퓨터의 고유한 주소 역할을 IP, Internet Protocol 이 해준다. IP 주소는 네트워크 어댑터 (Lan 카드) 마다 할당되는데, 한 개의 컴퓨터에 두 개의 네트워크 어댑터가 장착되어 있다면 두 개의 IP 주소를 할당할 수 있는 것이다. 프로그램은 DNS (Domain Name System) 을 통해 연결할 컴퓨터의 IP 주소를 찾는다. 대중에게 서비스를 제공하는 대부분의 서버는 도메인 이름을 가지고, IP 주소를 등록한다. (e.g., www.naver.com : 222.122.195.5) 웹 브라우저는 사용자가 입력한 도메인 이름을 DNS 에서 검색하여 IP 를 얻은 다음 해당 IP 를 가진 서버로 연결한다.
한 대의 컴퓨터에는 다양한 서버 프로그램이 실행되고 있을 수 있다. 이 경우 클라이언트는 어떤 서버와 통신해야 할지 결정해야 하는데, IP 는 컴퓨터의 네트워크 어댑터까지만 갈 수 있는 정보이기 때문에 컴퓨터 내에서 실행하는 서버를 선택하기 위해서는 추가적인 정보가 필요하다. 이 때 쓰이는 정보가 Port 이다. 서버를 시작할 때 고정적인 포트 번호를 가지고 실행하는데, 이를 Port Binding 이라고 한다. 클라이언트도 서버에서 보낸 정보를 받기 위해 포트 번호가 필요한데, 서버와 같이 고정적인 포트 번호가 아니라 운영체제가 자동으로 부여하는 동적 포트 번호를 사용한다. 이 동적 포트 번호는 클라이언트가 서버로 연결 요청을 할 떄 전송되어 서버가 클라이언트로 데이터를 보낼 때 사용된다. 포트 번호의 전체 범위는 0 ~ 65535 이고, 아래와 같이 세 범위로 구분된다.
구분명 | 범위 | 설명 |
Well Known Port Numbers | 0 ~ 1023 | 국제인터넷주소관리기구가 특정 애플리케이션용으로 미리 예약한 포트 |
Registered Port Numbers | 1024 ~ 49151 | 회사에서 등록해 사용할 수 있는 포트 |
Dynamic Or Private Port Numbers | 49152 ~ 65535 | 운영체제가 부여하는 동적 포트 또는 개인적인 목적으로 사용할 수 있는 포트 |
Java 는 IP 주소를 java.net.InetAddress 객체로 표현한다. 이는 로컬 컴퓨터의 IP 주소 뿐만 아니라 도메인 이름을 DNS 에서 검색한 후 IP 주소를 가져오는 기능을 제공하기도 한다. 아래와 같이 사용해볼 수 있다.
public static void main(String[] args) {
try {
InetAddress local = InetAddress.getLocalHost();
System.out.println("LOCAL ADDRESS: " + local.getHostAddress());
InetAddress[] iaArr = InetAddress.getAllByName("www.naver.com");
for (InetAddress remote : iaArr) {
System.out.println("NAVER: " + remote.getHostAddress());
}
} catch (Exception e) {
e.printStackTrace();
}
}
getLocalHost() 로 로컬컴퓨터의 주소, InetAddress.getAllByName() 메소드로 도메인 이름을 DNS 에서 검색해볼 수 있는 것이다.
Reference:
이것이 자바다
'Backend > Java' 카테고리의 다른 글
Java - Socket(UDP) (0) | 2023.05.26 |
---|---|
Java - Socket(TCP) (0) | 2023.05.25 |
Java - Optional (0) | 2023.05.23 |
Java - 보조 스트림 (0) | 2023.05.21 |
Java - IO 입출력 (0) | 2023.05.20 |