Windows 與 TCP/IP

發佈日期: 2007 年 3 月 7 日

作者: 賴榮樞
http://www.goodman-lai.idv.tw

TCP/IP 是網際網路的關鍵核心,也是業界的標準,因此 Windows 作業系統也實作了這項協定組。由於「網路化」已經是電腦裝置(甚至電子產品)的重要能力,而 TCP/IP 又是如此受到業界的廣泛應用,所以系統管理者都非常需要紮實的 TCP/IP 基礎,以面對網路環境的設定或調校。本文將先簡述協定對網路通訊的必要性,也將扼要說明 TCP/IP 的發展簡史。然後將討論現今最廣為採用的分層式網路架構,並且對照 Windows 及這些分層式網路架構的實作方式。最後則將列出各個 Windows 版本所支援的 TCP/IP 重要功能。

本頁內容

為什麼網路通訊需要協定
TCP/IP 發展簡史
分層式的網路架構
Windows 的實作方式
各個 Windows 版本所支援的 TCP/IP 重要功能

我們通常會以「協定組」(protocol suite)稱呼 TCP/IP,這是因為 TCP/IP 實際上是由許多不同的協定所組成,更重要的是因為 TCP/IP 的架構採用了分層式的設計方式,因此可以在每一層安排不同的協定。這種設計方式讓 TCP/IP 更彈性、靈活。

TCP/IP 雖然是由一組協定所組成,但是這組協定的名稱(也就是 TCP/IP),是取自這組協定裡重要的兩層協定:TCP(Transmission Control Protocol)和 IP(Internet Protocol),因此可以想見這兩層協定的重要性。甚至,在許多網際網路的官方文件,會以 Internet Protocol Suite 來稱呼這一整組驅動網際網路的協定,更可以想見 Internet Protocol 的地位。

為什麼網路通訊需要協定

協定(protocol)是一組決定事物該如何運行或完成的規則,而我們日常生活其實充滿了各種協定。例如要到銀行辦理交易的顧客,必須按照規則排隊等候;此外,我們也有語言的協定,也就是文法。同樣的,電腦和網路也需要協定才能共同運作,而且不同性質的需求,需要不同類型的協定。

為了達到通訊的目的,資料通訊的協定必須具備四個重要的特性。首先,協定必須指明資料的格式,其次是通訊裝置必須能理解所使用的協定格式,再者協定應該要能根據通訊雙方的能力來決定通訊的速度(不然有一方會來不及處理所傳輸的資料,不過這可以利用緩衝區來舒緩傳輸負載),最後是通訊協定應該能夠決定雙方可以開始通訊的時機。

協定對網路通訊是無比重要,任何網路通訊的學習或實際工作時,絕大部分的心力都放在協定;而且在瞭解協定、熟悉協定的特性之後,許多網路設定就會變得理所當然。

TCP/IP 發展簡史

報章媒體或普羅大眾開口閉口必稱現在是「網際網路時代」,而實際上,當初設計 TCP/IP 的目的,就是希望能連接各種既有的異質實體網路,而建構出「互相連接的網路」(interconnected network),也就是「互連網」(internetwork 或簡稱 internet)。互連網發展至今,也就成為無遠弗屆的「網際網路」(Internet)。

若提及 TCP/IP 的發展,就不能不提到文特‧瑟夫這個名字,因為他正是 TCP/IP 的設計者之一。本名 Vinton Gray Cerf 的瑟夫是 TCP/IP 的共同設計者,因此也有人直接尊稱他為網際網路之父("founding father" of the Internet)。

大家都知道目前的網際網路,是源自於美國國防部先進研究計畫署(United States Department of Defense Advanced Research Projects Agency)從 1960 年代開始出資贊助的專案計畫,也就是 ARPANET(Advanced Research Projects Agency net)。1970 年的九月二日,ARPANET 的第一個節點安裝在加州大學洛杉磯分校(UCLA)的實驗室。ARPANET 雖然是實驗性質的網路,但卻也替現今網際網路的技術、方法,提供了先行、熱身的機會與環境,甚至可視為現今網際網路的前身。例如現今的網際網路採用了迥異於傳統電路交換的封包交換技術,也是經過 ARPANET 的實驗,證明封包交換確實是可行的技術;而 ARPANET 所使用的協定「網路控制協定」(Network Control Protocol,NCP),也是現今網際網路 TCP 協定的先驅。

TCP/IP 的創造者

瑟夫於 1965 年畢業史丹福大學,獲得數學學士學位,畢業後的兩年期間,曾經在 IBM 的洛杉磯分公司擔任分時作業系統的工程師,也因此認定了自己必須繼續進修電腦方面的專業課程。隨後瑟夫進入了加大洛杉磯分校研習電腦科學,最終並取得電腦科學的博士學位。瑟夫的論文也與先進研究計畫署的 Snuper Computer 專案有關(這個專案的目的是要以電腦遠端觀測另一部電腦的程式執行),因為瑟夫在加大洛杉磯分校唸書時,就是這個專案的研究生,而這也算是瑟夫與先進研究計畫署淵源的開始。

在 1968 年秋天,加大洛杉磯分校即將為先進研究計畫署的 ARPANET,執行一項稱為「網路測量中心」(Network Measurement Center,NMC)的專案,這項專案的負責人是提出封包交換理論的先驅李奧納多‧柯連洛克(Leonard Kleinrock),而這項專案將負責網路效能的測試與分析;當時正是加大洛杉磯分校學生的瑟夫,也進入了這個專案,而這是瑟夫與 ARPANET 的另一個淵源。

在 1968 年底,先進研究計畫署開始準備為四所學校設立 ARPANET 的首批四個節點,包括加大洛杉磯分校、史丹福大學、猶他州立大學、加州大學聖塔芭芭拉分校等四所參與計畫的學校,分別由相關的師生負責進行相關的網路架設工作。千萬別以為這是一件簡單的工作:ARPANET 是網際網路的前身,而 TCP/IP 的設計者雖然都參與了這項計畫,但此時這群電腦網路菁英為 ARPANET 設計了「網路控制協定」(Network Control Protocol,NCP);甚至連乙太網路的雛形,也是在 1972 年才出現。這群學生(包括畢業生)及指導教授,只能根據理論,以及執行分時系統的大型主機,一點一滴的討論、累積,並且利用 NCP 協定讓 ARPANET 得以連線。

革命性的 TCP/IP 協定

雖然 ARPANET 已經能夠順利連線,證明了封包交換的的確是可行的技術,但此時距離網際網路還有差距,還有很多問題必須克服,其中最大的問題就是如何讓網路上各種不同的電腦,能「以相同的方式溝通」。瑟夫在加大洛杉磯分校其間,認識了羅伯特‧康恩(Robert E. Kahn,不過大家都叫他鮑伯(Bob)),兩人經常共同討論網路方面的技術與想法,包括如何讓各種電腦都能互相連接。瑟夫和康恩首先想到了「閘道」(gateway)的概念,也就是在這些電腦或電腦所在的網路之間,放置能夠轉換不同訊息的閘道裝置,這相當於為各種電腦或電腦網路擔任資料通訊的翻譯工作。

其次,瑟夫和康恩也為網路訊息的傳遞,構思另一個更獨立、更能廣被大多數主機接受的網路通訊協定。瑟夫在 1972 年回到史丹福大學任教,在 1973 年底,瑟夫和康恩完成了一篇影響網路通訊甚鉅的論文:〈封包網路交換協定〉(A Protocol for Packet Network Intercommunication),並且在 1974 年五月正式發表這篇論文,論文中提出了現在大家熟悉的「傳輸控制協定」(transmission-control protocol,TCP),以及「資料包」(datagram)的概念。這其中還有一件趣聞:這篇論文是瑟夫和康恩共同完成,但在發表之前,兩人卻是以丟銅板的方式,來決定論文作者的排名,瑟夫擲贏了銅板,因此名字放在康恩之前。

在提出了革命性的 TCP 協定之後,瑟夫在 1976 年接受了先進研究計畫署的工作,擔任 APRA Internet 的計畫經理,扮演了 TCP 協定發展的重要關鍵角色。在 1978 年,瑟夫與 APRA Internet 計畫的其他同事,為 TCP 協定發表了第三個版本,在這個版本將 TCP 分成兩個部分,也就是將負責繞送封包的部分,從 TCP 獨立出來,成為現在各位熟知的「網際網路協定」(Internet Protocol,IP),而這項協定也更名為 TCP/IP。而目前廣為使用的 IPv4,則是在 1981 年所發表。

1982 年美國國防部的通訊署(Defense Communications Agency)和 ARPA 將 TCP 和 IP 合併為 TCP/IP 協定組,並且在 1983 年全面將 ARPANET 的 NCP 換成 TCP/IP。此外,應用層的諸多協定,例如 Telnet(1972 年)、FTP(1973 年)、DNS(1984 年)、HTTP(1996 年),也分別於不同的時間逐一發表,而寄望取代 IPv4 的 IPv6 則是在 1996 年發表。

分層式的網路架構

網路元件可以分為實體元件和邏輯元件,構成網路的實體和邏輯元件都根據標準規格和協定而彼此運作,種類繁多的標準規格和協定不只建構起網路的功能,也架構出網路運作的模式,這種模式稱為「網路模型」。目前已經發展出許多種資料通訊的網路模型,但有兩種模型贏得最多的認同,第一種是 OSI(Open Systems Interconnection,開放系統互連),第二種是與前述 TCP/IP 關係密切,而且比 OSI 還早誕生的 DARPA(Defense Advanced Research Projects Agency)模型。

DARPA 是領導、贊助發展出 TCP/IP 協定組的美國政府單位,在發展過程當中也依照網路運作的邏輯概念,制訂了四層的網路運作模型。因此 TCP/IP 協定組自然而然也就對映到 DARPA 模型的四個層級。OSI 則是國際標準組織 ISO 所制訂的七層網路模型,這七層完整的描繪出網路運作的一切細節,不過並沒有廠商完全以此實作。而 DARPA 模型雖然只有四層,但也幾乎涵蓋了 OSI 七層的功能。

這兩種模型都是開放的模型,而且也都是分層式架構。分層式架構構賦予每一層獨特的目的和功能,層層分工讓每一層只需要做好自己該作的事,但是各層之間的功能卻是環環相扣:接收並處理上一層傳來的資料,處理完再送往下一層(相反的方向亦然)。您可能經常聽到 TCP/IP stack,之所以會稱為 stack,就是因為分層式架構一層一層的「堆疊」出整個通訊協定。

OSI 七層模型

  • 應用層:這一層的功能是讓使用者所操作的應用程式能夠存取網路。應用層並不會加入標頭(header)或標尾(trailer)資料。

  • 展示層:這一層將確保送往應用層的資料,是應用層能夠理解的格式。如果傳送端和接收端使用不同的編碼結構,展示層就會加以轉譯,如果有需要,展示層也會執行加密和壓縮。

  • 交談層:在傳送端和接收端開始通訊之前,這兩端應該要先建立連線(或稱為交談),而交談層就是負責建立、維護、終止這兩端藉由網路所執行的連線,交談層通常也會管理兩端通訊設備所產生的訊息。

  • 傳輸層:傳輸層的任務是確保來自傳送端的整個訊息都能送達接收端,而且當傳輸層將資料送往上一層時,會重組資料,將資料送往下一層,則會切割資料。

  • 網路層:傳輸層要確定整個訊息都已送出,而網路層則要確保封包都能送到接收端。網路層也會處理封包的邏輯定址(logical addressing),並且根據傳送端和接收端是否處於同一個邏輯網路,而可能需要負責路由服務。

  • 資料鍊結層:這一層會將來自實體層的位元流拆解成位元,再以「訊框」為單位重組這些位元資料,並且替每個訊框加上實體位址。此外,資料鍊結層也提供流程控制、錯誤控制、存取控制等功能。

  • 實體層:實體層透過某種類型的實體媒介傳送位元流,實體媒介可能是有線或無線。這一層也要處理實體媒介的機械或電子規格、位元的同步、實體拓撲、傳送模式等。

DARPA 四層模型

  • 應用層:這相當於 OSI 模型應用層、展示層、交談層的三層合併,也稱為「行程層」(process layer),因為這裡是協定組與主機行程的介面。

  • 傳輸層:這相當於 OSI 的傳輸層,DARPA 模型的傳輸層有兩個主要的協定:TCP 和 UDP(User Datagram Protocol)。

  • 互連層:這相當於 OSI 的網路層,不僅是 IP 協定的運作所在,也是其他 TCP/IP 協定傳送資料的關鍵。

  • 網路介面層:這相當於 OSI 的資料鍊結層和實體層。

以下列出了 OSI、DARPA 模型、TCP/IP 協定組、Windows 實作方式,以及這四種的相互對映。

Dd125471.39wintcpip1(zh-tw,TechNet.10).jpg

Windows 的實作方式

以下我們將焦點放在 Windows 的實作方式。

  • 網路應用程式:位於最上層、且通常位於 User mode 的網路應用程式,將取用所有下層提供的 API 或服務,而達成指定的網路功能。網路應用程式通常會以 .exe 執行檔或 Windows 系統服務的形式實作。

  • 網路 API DLL:以動態連結程式庫(Dynamic Linking Library,DLL)的形式實作出與協定無關的網路功能,並且可以位於 User mode,或同時位於 User mode 和 Kernel mode(若在 Kernel mode,則是以下的網路 API 驅動程式)。開發人員編寫上層的應用程式時,可以不需要知道協定細節而使用網路功能。這一層的實例包括了 WinSocks 或 WinINet。

  • 網路 API 驅動程式:這是實作在 Kernel mode 的網路 API。

  • 協定驅動程式:位於 Kernel mode,並且會針對特定協定(例如 TCP/IP、NetBEUI、或 IPX/SPX 等)而實作。這一層也稱為 Transport Device Interface 或 NDIS 驅動程式,有時也會簡稱 TDI transport 或 transport。您可以在 Windows 的 System32\Drivers 資料夾找到 tcpip.sys,就是 Windows 的 TCP/IP 協定驅動程式。

  • 裝置驅動程式:位於 Kernel mode 的裝置驅動程式包括 NDIS library 和 NDIS miniport。NDIS 是 Network Device Interface Specification 的縮寫,這是編寫 Windows 網路裝置驅動程式的介面規格,目的是讓硬體廠商開發 Windows 驅動程式。

此外,微軟也在 Windows Vista 等後續 Windows 版本加入了 Windows Connect Now 的網路連接概念,並延伸出新的驅動程式架構,相關細節可參閱《WCN 將重新定義網路的範圍與應用》或 WHDC 網站

各個 Windows 版本所支援的 TCP/IP 重要功能

早期的 Windows 版本是以 NetBIOS(Network Basic Input/Output System)作為網路通訊介面,雖然很適合用在小型的區域網路,但面對大型網路架構就力有未逮。微軟也察覺到 TCP/IP 將會是主流的網路協定,因此除了以 NetBIOS over TCP/IP(NBT)技術讓 NetBIOS 具備繞送功能,也重新改寫 Windows TCP/IP 協定組的程式碼,而 Microsoft Windows NT 3.5 則是重新改寫之後第一個受惠 Windows 版本。每一個 Windows 版本都持續發展並新增或加強了 TCP/IP 功能,尤其是伺服端的 Windows 版本,更比用戶端的 Windows 版本多了很多 TCP/IP 網路服務功能。以下表格列出了各個 Windows 版本所支援的 TCP/IP 功能。

Dd125471.39wintcpip2(zh-tw,TechNet.10).jpg

N=No, Y=Yes, and D=Disabled by Default

參考資料

  • 企業資料通訊(培生出版、賴榮樞譯)

  • MICROSOFT WINDOWS INTERNALS(Microsoft Press,Mark E. Russinovich、David A. Solomon)

  • Microsoft Windows Server 2003 TCP/IP Implementation Details(Microsoft Corporation)

顯示: