네트워크(Network) : 여러 컴퓨터들을 통신 회선으로 연결한 것
LAN (Local Area Network) : 가정, 회사, 건물, 특정 영역에 존재하는 컴퓨터를 연결한 것
WAN (Wide Area Network) : LAN을 연결한 것. 흔히 말하는 인터넷이다.
서버 : 서비스를 제공하는 프로그램
클라이언트 : 서비스를 요청하는 프로그램
Internet Protocol 주소
연결할 상대방 컴퓨터의 IP 주소를 모르면 프로그램들은 서로 통신할 수 없다. 프로그램은 DNS(Domain Name System)를 이용해 컴퓨터의 IP 주소를 검색한다.
도메인 이름 : IP 주소
----------------------------------
www.naver.com 222.122.195.5
웹 브라우저는 웹 서버와 통신하는 클라이언트로, 사용자가 입력한 도메인 이름으로 DNS에서 IP 주소를 검색해 찾은 다음 웹 서버와 연결해서 웹 페이지를 받는다.
IP는 컴퓨터의 네트워크 어댑터까지만 갈 수 있는 정보이기 때문에, 컴퓨터 내부에서 실행하는 서버를 선택하기 위해서는 추가적인 Port 번호가 필요하다.
클라이언트도 서버에서 보낸 정보를 받기 위해서는 Port 번호가 필요한데, 서버와 같이 고정적인 Port 번호에 바인딩 하는 것이 아니라 운영체제가 자동으로 부여하는 번호를 사용한다. 이 번호는 클라이언트가 서버로 요청할 때 함께 전송되어 서버가 클라이언트로 데이터를 보낼 때 사용된다.
자바는 IP 주소를 java.net 패키지의 InetAddress로 표현한다.
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();