네트워크 입출력

소영·2024년 3월 27일
0

네트워크 기초

네트워크(Network) : 여러 컴퓨터들을 통신 회선으로 연결한 것
LAN (Local Area Network) : 가정, 회사, 건물, 특정 영역에 존재하는 컴퓨터를 연결한 것
WAN (Wide Area Network) : LAN을 연결한 것. 흔히 말하는 인터넷이다.

서버와 클라이언트

서버 : 서비스를 제공하는 프로그램
클라이언트 : 서비스를 요청하는 프로그램

IP 주소

Internet Protocol 주소

  • 네트워크 어댑터마다 할당
    만약 두 개의 네트워크 어댑터가 장착되어 있다면, 두 개의 IP 주소를 할당받을 수 있다.
  • 네트워크 어댑터에 어떤 주소가 부여되어 있는지 확인하려면 ipconfig(맥은 ifconfig) 명령어를 실행하면 된다.

연결할 상대방 컴퓨터의 IP 주소를 모르면 프로그램들은 서로 통신할 수 없다. 프로그램은 DNS(Domain Name System)를 이용해 컴퓨터의 IP 주소를 검색한다.

도메인 이름		:	IP 주소
----------------------------------
www.naver.com		222.122.195.5

웹 브라우저는 웹 서버와 통신하는 클라이언트로, 사용자가 입력한 도메인 이름으로 DNS에서 IP 주소를 검색해 찾은 다음 웹 서버와 연결해서 웹 페이지를 받는다.

Port 번호

IP는 컴퓨터의 네트워크 어댑터까지만 갈 수 있는 정보이기 때문에, 컴퓨터 내부에서 실행하는 서버를 선택하기 위해서는 추가적인 Port 번호가 필요하다.

  • Port는 운영체제가 관리하는 서버 프로그램의 연결 번호이다.
  • 서버는 시작할 때 특정 Port 번호에 바인딩한다.

클라이언트도 서버에서 보낸 정보를 받기 위해서는 Port 번호가 필요한데, 서버와 같이 고정적인 Port 번호에 바인딩 하는 것이 아니라 운영체제가 자동으로 부여하는 번호를 사용한다. 이 번호는 클라이언트가 서버로 요청할 때 함께 전송되어 서버가 클라이언트로 데이터를 보낼 때 사용된다.

  1. Well Know Port Numbers (0 ~ 1023)
    국제 인터넷주소관리기구(ICANN)가 특정 애플리케이션용으로 미리 예약한 Port
  2. Registered Port Numbers (1024 ~ 49151)
    회사에서 등록해서 사용할 수 있는 Port
  3. Dynamic Or Private Port Numbers (49152 ~ 65535)
    운영체제가 부여하는 동적 Port / 개인적으로 사용할 수 있는 Port

IP 주소 얻기

자바는 IP 주소를 java.net 패키지의 InetAddress로 표현한다.

  • 로컬 컴퓨터의 IP 주소를 가져오거나
  • 도메인 이름으로 DNS에서 검색한 후 IP 주소를 가져온다.
InetAddress ia = InetAddress.getLocalHost();

만약 컴퓨터의 도메인 이름을 알고 있다면

InetAddress ia = InetAddress.getByName(String domainName);
InetAddress[] iaArr = InetAddress.getAllByName(String domainName);

두 개의 메소드를 사용하여 객체를 얻을 수 있다.
getByName() 메소드는 DNS에서 도메인 이름으로 등록된 단 하나의 IP 주소를 가져오고, getAllByName() 메소드는 등록된 모든 IP 주소를 배열로 가져온다. 하나의 도메인 이름으로 여러 IP가 등록되어 있는 이유는 클라이언트가 많이 연결되었을 경우 서버 부하를 나누기 위해서이다.

이 메소드들로부터 얻은 InetAddress 객체에서 IP 주소를 얻으려면 getHostAddress() 메소드를 호출하면 된다. 리턴값은 문자열로 된 IP 주소이다.

String ip = InetAddress.getHostAddress();
profile
차곡 차곡 기록 쌓기

0개의 댓글