首頁
中文書目錄
原文書目錄
 站內快速搜尋
資源中心
Book Series
Special Interest













■好消息,歐萊禮書籍已重新鋪貨至各大書局及網路書店,歡迎讀者選購       ■歡迎各院校採用歐萊禮書籍,學校團購請洽校園服務團隊

[FAQ]

about the book- Java network program

----- Original Message -----
From: "Eunice D.Y. Lien"
To: <bookquestion@oreilly.com.tw>
Sent: Thursday, July 19, 2001 4:19 PM
Subject: about the book- Java network program


你好,我買 Java 網路程式設計這本書!
書中 P.64 範例 4-2 無法 run 出書中講的結果!
在範例 4-1 講述 InetAddress.getByName() 這個function 可以把 DNS-> IP,範例4-2說,這個 function,若輸入值不是一個 DNS name string, 是一串 IP address,會自動轉出 "DNS/IP" 這個結果出來,結果我丟一個 IP 進去測 4-1,出來是個 "IP/IP" 的輸出結果,與書中說的輸出結果不符合!
因我把這個程式改成由外部輸入參數去測,測試方式為:
在dos下,用 JDK1.2.2 版
c:\>java iii 140.113.17.154
輸出結果為 140.113.17.154/140.113.17.154
這個IP 是交大一個 bbs 站
我的測試程式如附件所示,你可對照書裡的程式看,沒改多少!

又 P.65 之中下方說,Internet 上一台機器,有多個 IP 的例子很少見,so 作者要測試InetAddress.getAllByName() 這個 function , 卻沒提出一個合理的測試範例,這個程式我改寫成外部變數輸入,測試 c:\>java iii1 www.microsoft.com 就可以出現多個 IP, 符合這個例子要測試的精神了!

Eunice


您好,
     首先感謝您購買敝公司的出版品。
     關於 getByName(),或許作者沒講清楚。我在此作一些補充。
     getByName() 其實只是一個 DNS client (正式的術語是 resolver ),真正會回答 "IP/hostname 對應關係" 的是 DNS Server,當 DNS server 能查出 IP 位址所對應的 hostname 時,getByteName() 的輸出結果就是 hostname/IP,反之,若 DNS server 找不到 IP 位址所對應的 hostname,或是反解 IP 位址所得到的 hostname,並非該 IP 位址的 "正式 hostname" ,那 getByName() 的輸出結果就是 IP/IP。
總而言之,getByName() 得到的結果是什麼,你見到的就是什麼。

     附圖是在我機器上的測試結果,在 1st.jpg
211.23.161.10 是一個 正解/反解 皆相符的 IP 位址,你可以發現 getByName() 的確能秀出正確的 hostname/IP。
 但是無法正確秀出 140.113.17.154 的查詢結果,原因是我們的 DNS server 查不到其正式的主機名稱 (至於我怎麼知道的,稍後會解釋)。所以,接下來我強迫我們的  DNS server 再查一次,這次的結果就是正確的;請參考 2nd.jpg

     剛剛說過,若反解 IP 位址所得到的 hostname,並非該 IP 位址的 "正式 hostname" ,getByName() 也不會秀出 IP 位址所對應的 hostname,3rd.jpg 中所示的就是這樣的例子。
203.70.83.154 這個 IP 位址的 "正式 hostname" 是 www.123ttw.com.tw ,但是該網站的 ISP 沒幫他們做反解,因此,resolver 得到的是 h154-203.70.83.seed.net.tw  這個臨時性的 hostname,不是 "正式"  的。
 所以,getByName() 查不到 203.70.83.154 的 "正式 hostname";因此,即使我強迫 DNS server 再查一次也沒有用。(請參考 3rd.jpg )。


    如果您不熟悉 DNS 的運作原理,請參考以下附帶說明 :

     當 resolver 向 DNS 送出 hostname 時,DNS 會回答 IP 位址,這過程俗稱為 "正解";反之,當 resolver 向 DNS 送出 IP 位址時,DNS 會回答 hostname,這就俗稱為 "反解"。
一般而言,正解不會有太大困難,除非你查的 hostname 不存在,否則都能得到其 IP 位址。
反解比較麻煩些,因為有 IP 位址的機器,並不一定每台都會向 DNS server 註冊其 hostname,在技術上,反解其實是 in-addr.arpa 這個特殊網域的正解。
 問題是,這樣的設計會導致那些 IP 位址區塊不是剛好一個 class A, B , C  的網路(也就是 netmask length 不是剛好 8, 16, 24-bits 的 IP address pool ),無法由自己的 DNS server 來提供反解,必須靠提供該位址區的 ISP 來幫忙設反解。

     關於您提到的第二個問題(單名多址的例子),我們非常謝謝您提供的例子,事實上,作者在這本書的第二版,已經修正了他的說法,他在第二版是這樣說的 :
 "相對於 Internet 上的大多數 hostnames 而言,單名多址的狀況屬於相對少數"。
其實,以作者寫第一版( 1996 年)時的環境而言,他那樣說並沒有錯。
 以現況而言,單名多址的狀況只出現在一些超級大型的網站 ( yahoo, microsoft, IBM , HP ),
 在 Internet 上,這些大型網站的確是很出名,但是相對於 Internet 上的所有網站而言,這些大型網站的確算是 "相對少數"。但因為它們都很熱門,所以用 "罕見" 二字來形容,的確不妥。

Bill Lin


| 首頁 | 聯絡我們 |
© 2009, O'Reilly Media, Inc. Taiwan Branch