1. 程式人生 > >Windows作業系統上的一些名字解析

Windows作業系統上的一些名字解析

介紹

當您開啟計算機開始訪問網路資源時,就涉及到一個問題:名字解析,名字解析就是把需要訪問的計算機名字解析成 IP 地址的過程。為什麼需要有這個過程呢?原因是 TCP/IP 網路上的計算機之間是通過 IP 地址來相互通訊的。 IP 地址就好像是我們的門牌號碼,網路上的每臺計算機或每個網站都至少有一個 IP 地址, IP 地址是一個 32 位元長的數字,表示方式是每個 8 個位元之間加一個點,比如 10.80.141.70 。到這裡就有一個問題了:您能夠記住您經常訪問的網站的 IP 地址嗎?答案恐怕是否,因為這樣一串數字並不便於普通人進行記憶。這就是為什麼網路上的每臺計算機至少有一個便於記憶的名字,一般人只要通過它們的名字而不是 IP 地址就可以訪問了。如果 Windows 不能成功地把一個名字解析成 IP 地址,訪問也就不可能進行了。下面我們就來講講 Windows 上有些什麼型別的名字以及 Windows 是如何來做名字解析的。

Windows 上名字的型別

Windows 上有兩類名字,一類是主機名字( Host Name )。主機名字最長有 255 個字元,可以包含數字、字母以及連字號 ”-“ 和點 ”.” 等。您的計算機的計算機名字或者您公司的伺服器的計算機名字就是一種主機名字,比如 sh-fileserver 。而且,網際網路上的網站域名也是一種主機名字,比如 www.microsoft.com 。

另一類名字是 NetBIOS 名字,大家可能會覺得比較陌生。 NetBIOS 名字是 Windows 上特有的一類名字,長度為 16 個字元,由 15 個字元和一個不可列印的 NetBIOS 名字字尾字元組成。 NetBIOS 名字字尾表示這個 NetBIOS 名字所代表的服務型別。比如說,一臺 Windows 域控制器會有一個字尾為 0x 1C 的 NetBIOS 名字,網路中的其它計算機見到了這個 NetBIOS 名字就知道這是一臺域控制器了。常見的 NetBIOS 字尾有 0x20 (檔案和列印服務)、 0x00 (工作站服務)、 0x03 (報信者服務)等。您大可不必去記住這些複雜 NetBIOS 名字字尾,因為應用程式會根據要訪問的服務型別來決定 NetBIOS 名字字尾的。

對應這兩類名字, Windows 上有兩類名字解析,分別是主機名字解析和 NetBIOS 名字解析。不同的應用程式會使用不同的名字解析。使用 WinSock (一種網路程式開發介面)開發的應用程式使用主機名字解析的,例如 Internet Explorer , ftp 等。有很多網路程式都是使用 WinSock 開發的。而大部分 Windows 元件會兩種名字解析都用,只要有一類名字解析成功,就放棄另一類名字解析。典型的例子有訪問網路上的共享檔案或印表機,或者 ping 一臺計算機。

下面我們要分別介紹兩類名字解析過程。

主機名字解析

在介紹主機名字解析之前,我們先來了解一下 DNS ( Domain Name Service )。網際網路上的域名是呈樹狀結構的,樹狀結構上的每一個節點就是一個 DNS 域名,例如 www.microsoft.com 和 www.msn.com 等都是 DNS 域名。 DNS 伺服器負責將 DNS 域名解析成 IP 地址的網路服務。

Windows 解析主機名字時是按照以下順序進行的。

查詢 DNS 客戶端快取和 hosts 檔案

首先檢查主機名字是否存在於 DNS 客戶端快取或 hosts 檔案中。 DNS 客戶端快取是用於存放 DNS 查詢結果的。例如,您訪問某個網站,通過查詢網際網路上 DNS 伺服器得到這個網站的 IP 地址,這個網站的 DNS 名字以及它的 IP 地址就會新增到 Windows 的 DNS 客戶端快取中。您再次訪問這個網站時, Windows 就不用再次查詢網際網路上 DNS 伺服器了,會直接從 DNS 客戶端快取獲得這個網站的 IP 地址,這可以很大地提高網路訪問速度以及減少網路流量。但是, DNS 客戶端快取裡的記錄是有有效期的,也就是說在一段時間之後,這條記錄會被從快取中刪掉,當再次訪問這個網站時, Windows 就需要再次查詢網際網路上 DNS 伺服器了。這樣做的好處是如果這個網站的 IP 地址改變之後,您的計算機不會一直使用老的 IP 地址。在 Windows 上,您可以用 ipconfig /displaydns 命令來查詢 DNS 客戶端快取裡有什麼紀錄,或者使用 ipconfig /flushdns 來清除 DNS 客戶端快取裡的紀錄。

下面是 ipconfig /displaydns 的一個例子:

localhost

Record Name . . . . . : localhost

Record Type . . . . . : 1

Time To Live . . . . : 0

Data Length . . . . . : 4

Section . . . . . . . : Answer

A ( Host ) Record . . . : 127.0.0.1

www.msn.com.cn

Record Name . . . . . : www.msn.com.cn

Record Type . . . . . : 5

Time To Live . . . . : 33

Data Length . . . . . : 4

Section . . . . . . . : Answer

CNAME Record . . . . : cnmsn.qihoo.com

c.live.com

Record Name . . . . . : c.live.com

Record Type . . . . . : 1

Time To Live . . . . : 339

Data Length . . . . . : 4

Section . . . . . . . : Answer

A ( Host ) Record . . . : 207.46.216.55

hosts 檔案是 Windows 上用來存放靜態的主機名字和 IP 地址對映的,它放在 %SystemRoot%system32 drivers etc 目錄下。如果您知道一個主機名字所對應的 IP 地址,而且這個名字不能通過 DNS 查詢獲得,就可以把這個主機名字和它的 IP 地址加到 hosts 檔案中,下面是一個樣本 hosts 檔案裡的內容:

127.0.0.1 localhost

10.22.80.16 testserver.test.com

10.54.94.97 rhinoserver

hosts 檔案被修改儲存之後, hosts 檔案裡的內容就立即被裝載到 DNS 客戶端快取。如果 hosts 檔案裡包含錯誤的紀錄,就會導致訪問錯誤。有一些網路加速軟體會把訪問過的網站域名和它們的 IP 地址加到 hosts 檔案中,這樣可以減少 DNS 名字查詢的時間。但是這會導致一個問題,如果某個網站的 IP 地址改變了,那就再也訪問不到這個網站了,因為每次訪問的都是老的那個 IP 地址。所以不建議把能夠通過 DNS 解析的主機名字加到 hosts 檔案裡,這樣可以避免不少問題。

查詢 DNS 伺服器

如果 Windows 在 DNS 客戶端快取和 hosts 檔案裡找不到要查詢的主機名字,會查詢 DNS 伺服器。這時, Windows 會根據需要查詢的主機名字來決定如何提交查詢問題到 DNS 伺服器。

主機名字有三種類型。第一類主機名字含有多個部分,以點分割,而且以點結尾,例如 www.contoso.com. ,我們也把這種名字稱為 FQDN ( Fully Qualified Domain Name )。所有提交到 DNS 伺服器去查詢的名字都必須是 FQDN 。如果一個使用者直接訪問一個 FQDN 名字, Windows 直接用這個名字去查詢 DNS 伺服器。

第二類主機名字只有一個部分,不含有點,例如 sh-fileserver 。第三類主機名字含有多個部分,以點分割,但是不以點結尾,例如 www.contoso.com 。對於後兩類主機名字, Windows 會修改主機名字,然後再提交到 DNS 伺服器去查詢。這是不是有些超出大家的預料,我們來講講 Windows 為什麼要這麼做。假設您上海分公司的 Windows 域名是 shanghai.contoso.com ,您的計算機名是 seal ,它的全名是 seal.shanghai.contoso.com ,下面是在您的計算機上執行 ipconfig /all 命令的結果的一部分,注意 DNS 字尾搜尋列表( DNS Suffix Search List )之後列出的兩個名字 shanghai.contoso.com 和 contoso.com 。

Windows IP Configuration

Host Name . . . . . . . . . . . . : seal

Primary Dns Suffix . . . . . . . : shanghai.contoso.com

Node Type . . . . . . . . . . . . : Mixed

IP Routing Enabled. . . . . . . . : No

WINS Proxy Enabled. . . . . . . . : No

DNS Suffix Search List. . . . . . : shanghai.contoso.com

contoso.com

假設北京總部的 Windows 域名是 contoso.com ,您要訪問北京總部的一臺檔案伺服器 bj-fileserver ,它的全名是 bj-fileserver.contoso.com 。您開啟檔案管理器,直接輸入 bj-fileserver 。注意,您輸入的只是伺服器的計算機名,而不是用冗長的 FQDN 。 Windows 為了獲得 bj-fileserver 的 IP 地址,會在 bj-fileserver 之後依次附加 DNS 字尾搜尋列表中的名字來形成 FQDN ,併發送給 DNS 伺服器,直到 DNS 伺服器返回一個正確的結果。下面就是 Windows 依次傳送給 DNS 伺服器的 FQDN :

bj-fileserver.shanghai.contoso.com.

bj-fileserver. contoso.com.

對於第一個查詢, DNS 伺服器返回的結果是不知道,因為這個名字並不存在;對於第二個查詢, DNS 伺服器返回 bj-fileserver 的 IP 地址,查詢結束。

您可以在網絡卡的 Internet 協議 TCP/IP 屬性 - 〉高階 - 〉 DNS 頁面裡修改 DNS 字尾搜尋列表,如下圖:

如果查詢 DNS 伺服器還是失敗,那麼主機名字解析就失敗了。


NetBIOS 名字解析

下面我們來講講 NetBIOS 名字解析。 Windows 解析 NetBIOS 名字時按照以下順序的。

NetBIOS 名字快取

NetBIOS 名字快取和 DNS 客戶端快取類似,是用於存放已經獲得的 NetBIOS 查詢結果,這可以節約多次訪問同一個 NetBIOS 名字的名字解析次數。您可以用 nbtstat –c 命令來獲得 NetBIOS 名字快取裡的紀錄 :

D:>nbtstat -c

Local Area Connection:

Node IpAddress: [10.22.78.16] Scope Id: []

NetBIOS Remote Cache Name Table

Name Type Host Address Life [sec]

SEEPS <20> UNIQUE 10.54.94.97 600

VBDBASE <20> UNIQUE 10.53.94.97 582

NetBIOS 名字快取裡的紀錄也有有效期,預設是 10 分鐘。您可以用命令 nbtstat -R 來清除名字快取。

在 NetBIOS 名字解析中有和 hosts 檔案類似的檔案 lmhosts 檔案, lmhosts 檔案也是用來存放靜態的 NetBIOS 名字和 IP 地址對映的,它的位置也是在 %SystemRoot%system32driversetc 目錄下。預設情況下, lmhosts 檔案並不存在,系統有一個 lmhosts 樣本檔案 lmhosts.sam ,您可以仿照 lmhosts.sam 檔案來編寫您的 lmhosts 。下面是一個樣本 lmhosts 檔案裡的內容:

10.60.11.70 seeps

10.54.91.123 sh-fileserver #PRE

10.54.94.117 bj-fileserver #PRE

修改了 lmhosts 檔案之後,你可以執行命令 nbtstat -R 來重新清除 NetBIOS 名字快取以及重新裝載 lmhosts 檔案。您會注意到上面的 lmhosts 檔案中有的記錄後面有 #PRE ,有的沒有。有 #PRE 表示這一條紀錄在 lmhosts 檔案被裝載之後會被加到 NetBIOS 名字快取中,而且不會過期。下面就是在重新裝載上面這個 lmhosts 檔案之後, NetBIOS 名字快取裡的內容:

Local Area Connection:

Node IpAddress: [10.60.11.70] Scope Id: []

NetBIOS Remote Cache Name Table

Name Type Host Address Life [sec]

BJ-FILESERVER <03> UNIQUE 10.54.94.117 -1

BJ-FILESERVER <00> UNIQUE 10.54.94.117 -1

BJ-FILESERVER <20> UNIQUE 10.54.94.117 -1

SH-FILESERVER <03> UNIQUE 10.54.91.123 -1

SH-FILESERVER <00> UNIQUE 10.54.91.123 -1

SH-FILESERVER <20> UNIQUE 10.54.91.123 -1

使用 lmhosts 檔案可能會遇到與 hosts 檔案類似的問題,如果 lmhosts 檔案有錯誤的記錄會導致不能正確訪問目的計算機。



動態查詢 NetBIOS 名字

如果在 NetBIOS 名字快取中不能找到想查詢的 NetBIOS 名字, Windows 會根據計算機的節點型別來決定接下來如何查詢。我們有必要來介紹一下節點型別。你在運行了命令 ipconfig /all 之後會看到節點型別( Node Type ):

Windows IP Configuration

Host Name . . . . . . . . . . . . : seal

Primary Dns Suffix . . . . . . . : shanghai.contoso.com

Node Type . . . . . . . . . . . . : Mixed

IP Routing Enabled. . . . . . . . : No

WINS Proxy Enabled. . . . . . . . : No

DNS Suffix Search List. . . . . . : shanghai.contoso.com

contoso.com

這個節點型別決定了 Windows 如何從網路上去解析一個 NetBIOS 名字。共有如下四種節點型別:

B 節點( Broadcast ):只在本地網路發廣播包來查詢 NetBIOS 名字

P 節點( Point to Point ):只向 WINS 伺服器查詢 NetBIOS 名字

M 節點( Mixed ):首先嚐試廣播查詢,如果查詢失敗,再向 WINS 伺服器查詢

H 節點( Hybrid ):首先向 WINS 伺服器查詢 NetBIOS 名字,如果查詢失敗,再廣播查詢

這裡需要介紹一下 WINS 伺服器,它的全稱是 Windows Internet Name Service 。 WINS 伺服器提供 NetBIOS 名字查詢服務。如果您的計算機配置了 WINS 伺服器,您的計算機就會在 WINS 伺服器上註冊它的 NetBIOS 名字和 IP 地址。其他計算機查詢 WINS 伺服器就可以知道您的計算機的 IP 地址了。您執行命令 nbtstat -n 可以看到您的計算機註冊的 NetBIOS 名字 :

Local Area Connection:

Node IpAddress: [10.60.11.70] Scope Id: []

NetBIOS Local Name Table

Name Type Status

SEAL <00> UNIQUE Registered

CONTOSO <00> GROUP Registered

SEAL <20> UNIQUE Registered

查詢 lmhosts 檔案

如果查詢 NetBIOS 名字快取和通過網路做 NetBIOS 名字解析都失敗, Windows 會讀 lmhosts 檔案來解析 NetBIOS 名字。我們已經知道 lmhosts 檔案中有 #PRE 字尾的紀錄會被裝載到 NetBIOS 名字快取中,現在 Windows 只會檢查那些沒有 #PRE 字尾的紀錄。

如果前面三個步驟都解析失敗,那麼 NetBIOS 名字解析就失敗了。

示例

在瞭解了兩類名字解析之後,我們來看看在 Windows 上 ping 的過程是如何的。我們還是假設當前計算機的 DNS 字尾搜尋列表為 shanghai.contoso.com 和 contoso.com ,節點型別是 M 節點,所有的快取以及 lmhosts 和 hosts 檔案都是空的。

如果 ping 上海的檔案伺服器 sh-fileserver ,它的全名是 sh-fileserver.shanghai.contoso.com ,會有以下過程:

查詢 DNS 客戶端快取及 hosts 檔案,查詢失敗

向 DNS 伺服器查詢 FQDN sh-fileserver.shanghai.contoso.com ,查詢成功

返回 sh-fileserver 的 IP 地址

如果 ping 北京總部的檔案伺服器 bj-fileserver ,它的全名是 bj-fileserver. contoso.com ,會有以下過程:

查詢 DNS 客戶端快取及 hosts 檔案,查詢失敗

向 DNS 伺服器查詢 FQDN bj-fileserver.shanghai.contoso.com ,查詢失敗

向 DNS 伺服器查詢 FQDN bj-fileserver. contoso.com ,查詢成功

返回 bj-fileserver 的 IP 地址

如果 ping 一個不存在的名字 fake-server ,會有如下過程:

查詢 DNS 客戶端快取及 hosts 檔案,查詢失敗

向 DNS 伺服器查詢 FQDN fake-server.shanghai.contoso.com. ,查詢失敗

向 DNS 伺服器查詢 FQDN fake-server. contoso.com. ,查詢失敗

查詢 NetBIOS 名字快取,查詢失敗

廣播查詢 NetBIOS 名字 fake-server <00> ,查詢失敗

向 WINS 伺服器查詢 NetBIOS 名字 fake-server <00> ,查詢失敗

查詢 lmhosts 檔案,查詢失敗

最終名字解析失敗

相關推薦

Windows作業系統一些名字解析

介紹 當您開啟計算機開始訪問網路資源時,就涉及到一個問題:名字解析,名字解析就是把需要訪問的計算機名字解析成 IP 地址的過程。為什麼需要有這個過程呢?原因是 TCP/IP 網路上的計算機之間是通過 IP 地址來相互通訊的。 IP 地址就好像是我們的門牌號碼,網路上的每臺

tensorflow在windows作業系統的安裝

在電腦上安裝PyCharm和Python3,然後把Python3的安裝路徑寫進系統變數裡,Python安裝完之後, https://bootstrap.pypa.io/get-pip.py,把這頁的程式碼複製出來,拿到python裡執行,就可以成功安裝 pip3了,然後把pip3的路徑寫進環境變數,開啟c

windows作業系統啟用SSLv3協議引發的威脅

一、主機啟用SSLv3協議引發的威脅 遠端主機受到稱為POODLE的中間人(MitM)資訊洩露漏洞的影響。該漏洞是由於SSL 3.0在解密使用密碼塊連結(CBC)模式下的塊密碼加密的訊息時處理填充位元組的方式。 二、建議處置措施: 處置措施:禁用啟用SSLv3協議 方法:

如何在64位windows作業系統使用PLSQL Developer

1.由於 PLSQL Developer 沒有64位版本,所以在64位系統上執行時會出現如下圖介面(沒有connect as選項):   2.到Oracle官網上下載一個32位的客戶端(instantclient),一定要下載 basic 版本的。最好去官網下載吧,網上的有

Windows作業系統安裝和配置LDAP Server

1.雙擊程式包,出現安裝嚮導介面,單擊Yes     2.歡迎介面,單擊Next   3.勾選“I accept…”,單擊Next   4.點選Install,進入準備安裝介面    5.選擇安

Windows作業系統編譯Hadoop原始碼

在上篇部落格中,筆者提到曾經在Windows上編譯Hadoop原始碼。這裡將具體流程列出。 一、作業系統和Hadoop版本 Windows 10專業版(64位),Hadoop 2.7.2。 二、安裝

關於windows作業系統一些概念。

轉自:http://zhidao.baidu.com/link?url=qqOjY6ztqMf3ASUUpO6IPy8tLFN2ABgusgQXK9ZOXZb1GCgYtktDFyseUytqn_lTvamP-lkrAYrmJDx4oDhA6q 【機械硬碟結構及資料讀寫方

JDK不同作業系統的FileSystem(Windows

前言 我們知道不同的作業系統有各自的檔案系統,這些檔案系統又存在很多差異,而Java 因為是跨平臺的,所以它必須要統一處理這些不同平臺檔案系統之間的差異,才能往上提供統一的入口。 關於FileSystem類 JDK 裡面抽象出了一個 FileSyste

推薦一些 Windows 平臺的優質高效軟體

最近又發現了不少優秀的軟體,準備介紹給大家. 21. Seer 空格預覽 Seer 是一款 Windows 下免費的模仿 macOS 系統檔案預覽的工具,可以讓你不用開啟檔案就能快速通過按空白鍵預覽檔案的內容,這對於電腦中檔案較多的使用者來說非常實用!Seer 的功能比 m

windows internals(深入解析windows作業系統)筆記

1.R0執行核心態R3執行使用者態,R1.R2閒置 2.侵入式除錯和非侵入式除錯   侵入式:可以檢查和改變程序的記憶體,設定斷點,執行其他的除錯資訊   非侵入式:並不作為一個偵錯程式負載到目標程序。可以檢查和改變程序中的記憶體,不能設定斷點。 1.Windows是一

《深入解析Windows作業系統》要點整理

關於作業系統中為什麼要使用控制代碼: 個人理解是,因為虛擬記憶體的機制,導致同一個物件的實體地址是經常變化的,所以作業系統不能通過實體地址直接操作物件,而採用控制代碼這樣的索引來查詢實體地址。 在同一個程序中,其實是可以通過虛擬地址去查詢物件的。但控制代碼相對於用虛擬地址的

一些軟體在windows平臺的使用技巧

1 有時候換另一臺windows電腦的時候,發現新建文字文件,命名為hello.js 但是其文字型別仍然是txt,而且不能更改,如下所示 此時,可以開啟任意一個資料夾,點選左上角的 組織----資料夾和搜尋選項-----檢視,找到‘隱藏已知檔案型別的副檔名 ,把前面的勾去

windows 10 使用aspnet_regiis.exe -i 命令報 “此作業系統版本不支援此選項” 的解決辦法

本來想註冊ASP.NET 4.5到windows 10的IIS上,否則在IIS 10上部署ASP.NET MVC站點老是報錯,結果用CMD視窗在C:\Windows\Microsoft.NET\Framework64\v4.0.30319下使用命令aspnet_regiis

TensorFlow - 在 windows 系統安裝

conda 安裝 rsh anaconda src 最新 之前 power ins 安裝方式: 1、pip (將介紹) 2、Anaconda 我采用的是本地 pip 方式 需提前安裝 Python - Python 3.5.x > TF 只支持 Python 3

Windows系統以C++打印出當前活動用戶的環境變量

include copyto cal ntb views read += tac windows.h 在Windows系統上以C++打印出當前活動用戶的環境變量,代碼如下(QT環境): [cpp] view plain copy void

Hyper-V 2016 系列教程38 在 Windows 10 安裝 Hyper-V

windows server 2012 2016; hyper-v;虛擬化啟用 Hyper-V 以在 Windows 10 上創建虛擬機。可以通過多種方式啟用 Hyper-V,包括使用 Windows 10 控制面板、PowerShell(我的最愛)或使用部署映像服務和管理工具 (DISM)。 本文檔將逐一介

Hyper-V 2016 系列教程37 Windows 10 的 Hyper-V 簡介

windows server 2012 2016; hyper-v;虛擬化以下內容部分取自微軟官網: 無論你是軟件開發人員、IT 專業人員還是技術愛好者,你們中的許多人都需要運行多個操作系統。 Hyper-V 讓你可以在 Windows 上以虛擬機形式運行操作系統或計算機系統,而不是將物理硬件

如何在WIndows電腦安裝 SVN Server 實現代碼版本控制

們的 要求 eight logs 默認 添加用戶 window ron .cn One 下載-安裝 SVN SVNServer      先去官網下載服務器版本的svn server,下載地址 :https://www.visualsvn.com/server/downl

JavaWeb開發環境配置(Windows)--

auto tps .org 環境變量配置 spa java程序 java版本 可執行 技術 JavaWeb開發環境的配置主要包括以下幾個方面: JAVA運行環境的搭建; 服務器的安裝和配置; 數據庫的安裝和配置; IDE的選擇和安裝; JAVA運行環境的搭建 一般Jav

IT輪子系列(六)——Excel傳與解析,一套代碼解決所有Excel業務傳,你Get到了嗎

tryparse mappath src 個推 列名 import ges bject tab 前言 在日常開發當中,excel的上傳與解析是很常見的。根據業務不同,解析的數據模型也都不一樣。不同的數據模型也就需要不同的校驗邏輯,這往往需要寫多套的代碼進行字段的檢驗,如必填