[Java] 네트워크 기초 ①

kiteB·2022년 5월 3일
1

Java2

목록 보기
27/36
post-thumbnail

[ 네트워크 기초 ]

네트워크(network)는 여러 대의 컴퓨터를 통신 회선으로 연결한 것을 말한다.

  • 지역 네트워크는 회사, 건물, 특정 영역에 존재하는 컴퓨터를 통신 회선으로 연결한 것을 말한다.
  • 인터넷(internet)은 지역 네트워크를 통신 회선으로 연결한 것을 말한다.

1. 서버와 클라이언트

  • 컴퓨터가 인터넷에 연결되어 있다면 실제로 데이터를 주고받는 행위는 프로그램들이 한다.
    • 서비스를 제공하는 프로그램을 일반적으로 서버(server)라고 부르고,
    • 서비스를 받는 프로그램클라이언트(client)라고 부른다.
  • 인터넷에서 두 프로그램이 통신하기 위해서는 연결을 요청하는 역할연결을 수락하는 역할이 필요하다.
    • 클라이언트는 서비스를 받기 위해서 연결을 요청하고, 서버연결을 수락하여 서비스를 제공해준다.
    • 서버는 클라이언트가 요청(request)하는 내용을 처리해주고, 응답(response)을 클라이언트로 보낸다.
  • 클라이언트/서버(C/S: client/server) 모델은 한 개의 서버와 다수의 클라이언트로 구성되는 것이 보통이나,
    두 개의 프로그램이 서버인 동시에 클라이언트 역할을 하는 P2P(peer to peer) 모델도 있다.
    • P2P 모델에서는 먼저 접속을 시도한 컴퓨터가 클라이언트가 된다.
    • Ex) 1:1 채팅, 파일 공유 프로그램 등

2. IP 주소와 포트 (Port)

✅ IP 주소

  • 컴퓨터의 고유한 주소인 IP 주소는 네트워크 어댑터(랜(LAN) 카드)마다 할당되는데, 한 개의 컴퓨터에 두 개의 네트워크 어댑터가 장착되어 있다면, 두 개의 IP 주소를 할당할 수 있다.
  • IP주소는 xxx.xxx.xxx.xxx와 같은 형식으로 표현된다.
    • xxx는 부호 없는 0~255 사이의 정수이다.

✅ DNS

  • 연결할 상대방 컴퓨터의 IP 주소를 모른다면 프로그램들은 통신할 수 없다.
  • 프로그램은 DNS(Domain Naming System)를 이용해서 연결할 컴퓨터의 IP 주소를 찾는다.

[DNS] 
도메인 이름 : 등록된 IP 주소
www.naver.com : 222.122.195.5
  • 인터넷 익스플로러와 같은 웹 브라우저는 사용자가 입력한 도메인 이름을 DNS에서 검색하여 IP를 얻은 다음, 해당 IP를 가진 서버로 연결한다.

✅ 포트(Port)

  • 한 대의 컴퓨터에는 다양한 서버 프로그램들이 실행될 수 있다.
    • Ex) 웹(Web) 서버, 데이터베이스 관리 시스템(DBMS), FTP 서버 등이 하나의 IP 주소를 갖는 컴퓨터에서 동시에 실행될 수 있다.
  • 이런 경우 클라이언트는 어떤 서버와 통신해야 할지 결정해야 한다.
  • IP는 컴퓨터의 네트워크 어댑터까지만 갈 수 있는 정보이기 때문에 컴퓨터 내에서 실행하는 서버를 선택하기 위해서추가적인 정보인, 포트(port) 번호가 필요하다.
  • 서버는 시작할 때 고정적인 포트 번호를 가지고 실행하는데, 이것을 포트 바인딩(binding)이라고 한다.
  • 클라이언트도 서버에서 보낸 정보를 받기 위해 포트 번호가 필요한데, 서버와 같이 고정적인 포트 번호가 아니라 운영체제가 자동으로 부여하는 동적 포트 번호를 사용한다.
    • 이 동적 포트 번호는 클라이언트가 서버로 연결 요청할 때 전송되어 서버가 클라이언트로 데이터를 보낼 때 사용된다.

✅ 포트 번호 범위

  • 포트 번호의 전체 범위는 0~65535인데, 다음과 같이 세 가지 범위로 구분된다.
구분명범위설명
Well Konw Port Numbers0~1023국제인터넷주소관리기구(ICANN)가 특정 애플리케이션용으로 미리 예약한 포트
Registered Port Numbers1024~49151회사에서 등록해서 사용할 수 있는 포트
Dynamic Or Private Port Numbers49152~65535운영체제가 부여하는 동적 포트 또는 개인적인 목적으로 사용할 수 있는 포트

3. InetAddress로 IP 주소 얻기

자바는 IP 주소를 java.net.InetAddress 객체로 표현한다.

  • InetAddress로컬 컴퓨터의 IP 주소 뿐만 아니라 도메인 이름을 DNS에서 검색한 후 IP 주소를 가져오는 기능을 제공한다.

✅ 컴퓨터에서 InetAddress 얻기

  • 로컬 컴퓨터의 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 주소 얻기

  • InetAddress 객체에서 IP 주소를 얻기 위해서는 getHostAddress() 메소드를 호출하면 된다.
  • 리턴값은 문자열로 된 IP 주소이다.
String ip = InetAddress.getHostAddress();

[ 참고자료 ]

이것이 자바다 책

profile
🚧 https://coji.tistory.com/ 🏠

0개의 댓글