4. Internet Address
인터넷 주소
인터넷에 연결된 장치 : 노드(node), 노드가 컴퓨터인 경우 해당 노드 : 호스트 각 노드나 호스트는 인터넷 주소 또는 IP 주소라고 불리는 최 소 하나의 고유한 숫자에 의해 식별됨.
IPv4
0에서 255까지의 범위를 표현할 수 있음.
각 바이트는 마침표로 구분됨(ex : 152.19.134.132) → 4자리 표기법(dotted quad format)
IPv6
4자리 16진수의 8개의 블록으로 구성됨.
콜론에 의해 구분됨. ex) 2400:cb00:2048:0001:0000:0000:6ca2:c665
DNS(Domain Name System)
사람들이 쉽게 기억할 수 있는 호스트네임(hostname)을 컴퓨터가 기억하는 152.19.134.132와 같은 주소로 연결
InetAddress 클래스
IPv4, IPv6 주소에 대한 자바의 고수준 표현 방식.
Socket, ServerSocket, URL, DatagramSocket, DatagramPacket 등을 포함한 대부분의 다른 네트워킹 클래스에 의해 사용됨. hostname과 IP address를 모두 포함하고 있음.
InetAddress 객체 생성하기
getByName() 메서드
도메인 주소로 IP검색
IP주소로 호스트네임 검색
getLocalHost() 메서드
getAllByName() 메서드
호스트에 대한 정보가 모두 필요하면 getByName()(여러개중 어느것을 반환할지 모름)이 아닌 getAllByName()을 사용
캐시
DNS(lookup)검색은 최종 쿼리 서버에 도착하기까지 여러 서버를 거쳐야하고 손실이 될 수 있어 비용이 많이 드는 명령에 해당함. 그래서 cache하여 저장함
InetAddress클래스는 특정 호스트에 대한 주소를 검색하여 저장한 다음에는 추가 요청에 대해서 다시 검색하지 않는다.
만약 처음에 호스트를 찾지 못해 에러가 발생하는 등 타임아웃으로 인해 검색에 실패하면 두번째에는 캐시에 저장된 값을 이용한다.
networkaddress.cache.ttl
: 성공한 DNS 쿼리에 대해 자바가 저장할 시간을 초단위로 설정networkaddress.cache.negative.ttl
: 실패한 DNS 쿼리에 대해 자바가 저장할 시간을 초단위로 설정저장 시간 내에 같은 호스트에 대해 검색을 다시 시도할 경우 항상 같은 값이 반환 (캐시에 저장된 값이 계속 반환 되는 것)
networkaddress.cache.negative.ttl에 -1 을 설정하면 time-out 없이 영원히 저장.
IP 주소로 검색하기
InetAddress.*getByName*("43.202.139.42")
는 InetAddress 객체를 생성할 뿐이다. 실제 hostname을 얻기위한 DNS 검색은res2.getHostName()
을 요청할 때만 수행된다.또한 hostname 을 사용하는 것이 IP 를 직접 사용하는 것보다 좀 더 안정적이다. 일반적인 서비스들은 서비스를 제공하는 동안 hostname 이 변경되는 일은 잘 발생하지 않지만 그에 비해 서비스 중에 IP가 변경되는 일은 드물지 않게 발생한다고 한다.
보안 이슈
hostname 으로부터 새로운 InetAddress객체를 생성하는 일은 DNS검색(lookup)을 필요로 하기 때문에 잠재적인 보안 문제에 노출되어 있다.
SecurityManager
의public void checkConnect(String host, int port)
port 에 0이상의 숫자를 입력하면 해당 포트에 접속이 가능한지 체크
port = -1 을 넣으면 DNS 검색이 가능한지 체크
Get 메서드
hostname을 문자열로 반환하고 IP 주소를 문자열과 바이트 배열로 반환하는 네개의 Get 메서드를 제공한다.
byte 배열에서 127보다 큰 값은 음수로 다뤄짐. 바이트 배열로 어떤 작업을 해야할 경우 byte를 int로 늘린 후 처리해야함
int unsignedByte = signedByte < 0 ? signedByte + 256 : signedByte;
주소 타입
몇몇 IP 주소와 몇몇 주소 패턴은 특별한 의미를 가지고 있음.
ex)
127.0.0.1 : 로컬 루프백 주소,
224.0.0.0 ~ 239.255.255.255 : 몇몇 등록된 호스트에게 동시에 전송하기 위한 멀티캐스트 주소로 사용
InetAddress 객체가 어느 타입의 주소에 속하는지 검사하기 위한 10개의 메서드를 제공함.
Last updated