網際網路協議套組

網際網路協議套件（Internet Protocol Suite）是一種網路通訊模型，以及用於網路傳輸的協議集合，為網際網路的基礎通訊架構，被應用於各種網路通信中。

它常通稱為TCP/IP協議族（TCP/IP Protocol Suite），簡稱TCP/IP。該協定家族的兩個核心協定：TCP（傳輸控制協議）和IP（網際協議），為該家族中最早通過的標準。由於在網路通訊協議普遍採用分層的結構，當多個層次的協議共同工作時，類似電腦科學中的堆棧，因此又稱為TCP/IP協議棧（TCP/IP Stack）。這些協議最早發源於美國國防部（縮寫為DoD）的ARPA網項目，因此也稱作DoD模型（DoD Model）。這個協定套組由網際網路工程任務組負責維護。

TCP/IP提供了點對點連結的機制，將資料應該如何封裝、定址、傳輸、路由以及在目的地如何接收，都加以標準化。它將軟體通信過程抽象化為四個抽象層，採取協定堆疊的方式，分別實作出不同通信協定。協定套組下的各種協定，依其功能分別歸屬到這四個階層之中。

TCP/IP模型通常視為簡化的七層OSI模型。一般認為TCP/IP的連結層相當於OSI/RM的實體層及資料鏈結層。不過，思科認為此模型並不包含實體層，只能對應OSI的其中6層。

## 歷史

### 研發初期

1983年1月1日，在網際網路的前身（ARPA網）中通訊方式換成新的定義，TCP/IP取代舊的網路控制協議（NCP，Network Control Protocol），從而成為今天的網際網路的基石。最早的TCP/IP由文頓·瑟夫和羅伯特·卡恩兩位開發，慢慢地通過競爭戰勝其他一些網路協議的方案，比如國際標準化組織ISO的OSI模型。TCP/IP的蓬勃發展發生在1990年代中期。當時一些重要而可靠的工具的出世，例如頁面描述語言HTML和瀏覽器Mosaic，促成了網際網路應用的飛速發展。

隨著網際網路的發展，目前流行的IPv4協議（網際協議版本四）已經接近它的功能上限。IPv4最致命的兩個缺陷在於：

- 地址只有32位，IP位址空間有限。
- 不支持服務質量（Quality of Service，QoS），無法管理帶寬和優先級，故而不能很好的支持現今越來越多實時的語音和影片應用。因此IPv6（網際協議版本六）浮出水面，用以取代IPv4。

TCP/IP成功的另一個因素在於對為數眾多的低層協議的支持。這些低層協議對應OSI模型中的第一層（物理層）和第二層（數據鏈路層）。每層的所有協議幾乎都有一半數量支持TCP/IP，例如：乙太網（Ethernet）、令牌環（Token Ring）、光纖數據分布接口（FDDI）、點對點協議（PPP）、X.25、幀中繼（Frame Relay）、ATM、Sonet、SDH等通訊方法中都可以應用。

## 研製背景

最初想到讓不同電腦之間實現連接的，是美國加州大學洛杉磯分校網路工作小組的史蒂芬·克羅克（Stephen D. Crocker）。1970年，克羅克及其小組著手制定最初的主機對主機通信協議，它稱為網路控制協議（Network Control Protocol，縮寫NCP）。該協議用於阿帕網，並在局部網路條件下運行穩定，但隨著阿帕網的使用者增多，NCP逐漸暴露出兩大缺陷：

- NCP只是一台主機對另一台主機的通訊協議，並未給網路中的每台電腦設置唯一的地址，導致電腦在越來越龐大的網路中難以準確定位需要傳輸數據的對象。
- NCP缺乏糾錯功能，數據在傳輸過程中一旦出現錯誤，網路就可能停止運行，而隨著出錯的電腦增多，網路運行效率也將大打折扣。

## 開發過程

在構建阿帕網先驅之後，DARPA開始其他數據傳輸技術的研究。NCP誕生後兩年，1972年，羅伯特·卡恩（Robert E. Kahn）受僱於DARPA的資訊技術處理辦公室，在那裡他研究衛星數據包網路和地面無線數據包網路，並且意識到能夠在它們之間溝通的價值。

在1973年春天，已有的ARPANET網路控制程序（NCP）協議的開發者文頓·瑟夫（Vinton Cerf）加入到卡恩為ARPANET設計下一代協議而開發開放互連模型的工作中。到了1973年夏天，卡恩和瑟夫很快開發出基本的改進形式，其中的網路協議之間的差異通過使用公用網際網路協議而隱藏起來，且可靠性由主機保證而不是ARPANET那樣由網路保證。瑟夫稱讚了Hubert Zimmerman和Louis Pouzin（CYCLADES網路的設計者）在這個設計上發揮重要影響。

由於網路的作用減少到最小的程度，更有可能將任何網路連接到一起，而不用管它們不同的特點，這樣能解決卡恩最初的問題。流行的說法提到瑟夫和卡恩工作的最終產品TCP/IP將在運行「兩個罐子和一根弦」上，實際上它已經用在信鴿上。一個稱為網關（後來改為路由器以免與網關混淆）的電腦為每個網路提供一個接口並且在它們之間來回傳輸數據包。這個設計思想更細的形式由瑟夫在斯坦福的網路研究組的1973年–1974年期間開發出來。處於同一時期誕生PARC通用包協議組的施樂PARC早期網路研究工作也有著重要的技術影響；人們在兩者之間搖擺不定。DARPA於是與BBN、斯坦福和倫敦大學簽署協議開發不同硬體平台上協議的運行版本。有四個版本開發出來——TCPv1、TCPv2、在1978年春天分成TCPv3和IPv3的版本，後來就是穩定的TCP/IPv4——目前網際網路仍然使用的標準協議。

1975年，兩個網路之間的TCP/IP通信在斯坦福和倫敦大學（UCL）之間進行測試。1977年11月，三個網路之間的TCP/IP測試在美國、英國和挪威之間進行。在1978年到1983年間，其他一些TCP/IP原型在多個研究中心之間開發出來。ARPANET完全轉換到TCP/IP在1983年1月1日發生。1984年，美國國防部將TCP/IP作為所有電腦網絡的標準。1985年，網際網路架構理事會舉行爲期三天有250家廠商代表參加的關於計算產業使用TCP/IP的工作會議，幫助協議的推廣並且引領它日漸增長的商業應用。

2005年9月9日卡恩和瑟夫由於對美國文化的卓越貢獻獲總統自由勳章。

## TCP/IP協議棧組成

整個通信網路的任務，可以劃分成不同的功能區塊，即所謂的層級（layer）。用於網際網路的協議可以比照TCP/IP參考模型進行分類。TCP/IP協議棧起始於第三層協議IP（網際協議）。所有這些協議都在相應的RFC文檔中討論及標準化。重要的協議在相應的RFC文檔中均標記狀態：「必須」（required），「推薦」（recommended），「可選」（selective）。其他的協議還可能有「試驗」（experimental）或「歷史」（historic）的狀態。」

## 必須協議

所有的TCP/IP應用都必須實現IP和ICMP。對於一個路由器（router）而言，有這兩個協議就可以運作，雖然從應用的角度來看，這樣一個路由器意義不大。實際的路由器一般還需要運行許多「推薦」使用的協議，以及一些其他的協議。

幾乎所有連接到網際網路上的電腦上都存在的IPv4協議出生在1981年，今天的版本和最早的版本並沒有多少改變。升級版IPv6的工作始於1995年，目的在於取代IPv4。ICMP協議主要用於收集有關網路的資訊查找錯誤等工作。

## TCP/IP參考模型

<image>

<image>

TCP/IP參考模型是一個抽象的分層模型，這個模型中，所有的TCP/IP系列網路協議都歸類到4個抽象的「層」中。每一抽象層建立在低一層提供的服務上，並且為高一層提供服務。

完成一些特定的任務需要眾多的協議協同工作，這些協議分布在參考模型的不同層中的，因此有時稱它們為一個協議棧。TCP/IP參考模型為TCP/IP協議棧訂身製作。其中IP協議只關心如何使得數據能夠跨越本地網路邊界的問題，而不關心如何利用傳輸媒體，數據如何傳輸。整個TCP/IP協議棧則負責解決數據如何通過許許多多個點對點通路（一個點對點通路，也稱為一「跳」，1 hop）順利傳輸，由此不同的網路成員能夠在許多「跳」的基礎上建立相互的數據通路。如想分析更普遍的網路通信問題，ISO的OSI模型也能起更好的幫助作用。

網際網路協議族是一組實現支持網際網路和大多數商業網路運行的協議棧的網路傳輸協議。它有時也稱為TCP/IP協議組，這個名稱來源於其中兩個最重要的協議：傳輸控制協議（TCP）和網際網路協議（IP），它們也是最先定義的兩個協議。同許多其他協議一樣網路傳輸協議也可以看作一個多層組合，每層解決數據傳輸中的一組問題並且向使用這些低層服務的高層提供定義好的服務。高層邏輯上與使用者更為接近，所處理數據更為抽象，它們依賴於低層將數據轉換成最終能夠進行實體控制的形式。網路傳輸協議能夠大致匹配到一些廠商喜歡使用的固定7層的OSI模型。然而這些層並非都能夠很好地與基於IP的網路對應（根據應用的設計和支持網路的不同它們確實是涉及到不同的層）並且一些人認為試圖將網際網路協議組對應到OSI會帶來混淆而不是有所幫助。

### 網際網路協議棧中的層

人們已經進行一些討論關於如何將TCP/IP參考模型映射到OSI模型。由於TCP/IP和OSI模型組不能精確地匹配，還沒有一個完全正確的答案。

另外，OSI模型下層還不具備能夠真正占據真正層的位置的能力；在傳輸層和網路層之間還需要另外一個層（網路互連層）。特定網路類型專用的一些協議應該運行在網路層上，但是卻運行在基本的硬體幀交換上。類似協議的例子有ARP和STP（用來保持冗餘網橋的空閒狀態直到真正需要它們）。

然而，它們是本地協議並且在網路互連功能下面運行。不可否認，將兩個組（更不用說它們只是運行在如ICMP等不同的互連網路協議上的邏輯上的網路層的一部分）整個放在同一層會引起混淆，但是OSI模型還沒有複雜到能夠做更好的工作。

下面的圖表試圖顯示不同的TCP/IP和其他的協議在最初OSI模型中的位置：

7｜應用層application layer｜例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP、TLS

6｜表示層presentation layer｜例如XDR、ASN.1、NCP、TLS、ASCII

5｜會話層session layer｜例如ASAP、ISO 8327 / CCITT X.225、RPC、NetBIOS、Winsock、BSD sockets、SOCKS、PAP

4｜傳輸層transport layer｜例如TCP、UDP、RTP、SCTP、SPX、ATP、IL

3｜網路層network layer｜例如IP、ICMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、X.25

2｜數據鏈路層data link layer｜例如乙太網、令牌環、HDLC、幀中繼、ISDN、ATM、IEEE 802.11、FDDI、PPP

1｜物理層physical layer｜例如數據機、無線電、光纖

通常人們認為OSI模型的最上面三層（應用層、表示層和會話層）在TCP/IP組中是一個應用層。由於TCP/IP有一個相對較弱的會話層，由TCP和RTP下的打開和關閉連接組成，並且在TCP和UDP下的各種應用提供不同的埠號，這些功能能夠由單個的應用程式（或者那些應用程式所使用的庫）增加。

與此相似的是，IP是按照將它下面的網路當作一個黑盒子的思想設計的，這樣在討論TCP/IP的時候就可以把它當作一個獨立的層。

4｜應用層application layer｜例如HTTP、FTP、DNS （如BGP和RIP這樣的路由協議，儘管由於各種各樣的原因它們分別運行在TCP和UDP上，仍然可以將它們看作網路層的一部分）

3｜傳輸層transport layer｜例如TCP、UDP、RTP、SCTP （如OSPF這樣的路由協議，儘管運行在IP上也可以看作是網路層的一部分）

2｜網路互連層internet layer｜對於TCP/IP來說這是網際網路協議（IP）（如ICMP和IGMP這樣的必須協議儘管運行在IP上，也仍然可以看作是網路互連層的一部分；ARP不運行在IP上）

1｜網路存取（連結）層Network Access (link) layer｜例如乙太網、Wi-Fi、MPLS等。

#### 應用層

該層包括所有和應用程式協同工作，利用基礎網路交換應用程式專用的數據的協議。

應用層是大多數普通與網路相關的程序為了通過網路與其他程序通信所使用的層。這個層的處理過程是應用特有的；數據從網路相關的程序以這種應用內部使用的格式進行傳送，然後編碼成標準協議的格式。

一些特定的程序視爲在此層運行。它們提供服務直接支持使用者應用。這些程序和它們對應的協議包括HTTP（全球資訊網服務）、FTP（文件傳輸）、SMTP（電子郵件）、SSH（安全遠程登錄）、DNS（名稱⇔IP位址尋找）以及許多其他協議。

一旦從應用程式來的數據編碼成一個標準的應用層協議，它將傳送到IP棧的下一層。

在傳輸層，應用程式最常用的是TCP或者UDP，並且伺服器應用程式經常與一個公開的埠號相聯繫。伺服器應用程式的埠由網際網路號碼分配局（IANA）正式地分配，但是現今一些新協議的開發者經常選擇它們自己的埠號。由於在同一個系統上很少超過少數幾個的伺服器應用，埠衝突引起的問題很少。應用軟體通常也允許用戶強制性地指定埠號作為運行參數。

連結外部的客戶端程序通常使用系統分配的一個隨機埠號。監聽一個埠並且通過伺服器將那個埠發送到應用的另外一個副本以建立對等連結（如IRC上的dcc文件傳輸）的應用也可以使用一個隨機埠，但是應用程式通常允許定義一個特定的埠範圍的規範以允許埠能夠通過實現網路地址轉換（NAT）的路由器映射到內部。

每一個應用層（TCP/IP參考模型的最高層）協議一般都會使用到兩個傳輸層協議之一：

面向連接的TCP傳輸控制協議和無連接的包傳輸的UDP使用者數據報文協議。

常用的應用層協議有：

運行在TCP協議上的協議：

- HTTP（Hypertext Transfer Protocol，超文本傳輸協議），主要用於普通瀏覽。
- HTTPS（Hypertext Transfer Protocol over Secure Socket Layer，or HTTP over SSL，安全超文本傳輸協議），HTTP協議的安全版本。
- FTP（File Transfer Protocol，文件傳輸協議），由名知義，用於文件傳輸。
- POP3（Post Office Protocol，version 3，郵局協議），收郵件用。
- SMTP（Simple Mail Transfer Protocol，簡單郵件傳輸協議），用來發送電子郵件。
- TELNET（Teletype over the Network，網路電傳），通過一個終端（terminal）登陸到網路。
- SSH（Secure Shell，用於替代安全性差的TELNET），用於加密安全登陸用。

運行在UDP協議上的協議：

- BOOTP（Boot Protocol，啟動協議），應用於無盤設備。
- NTP（Network Time Protocol，網路時間協議），用於網路同步。
- DHCP（Dynamic Host Configuration Protocol，動態主機配置協議），動態配置IP位址。

其他：

- DNS（Domain Name Service，域名服務），用於完成地址查找，郵件轉發等工作（運行在TCP和UDP協議上）。
- ECHO（Echo Protocol，迴繞協議），用於查錯及測量應答時間（運行在TCP和UDP協議上）。
- SNMP（Simple Network Management Protocol，簡單網路管理協議），用於網路資訊的收集和網路管理。
- ARP（Address Resolution Protocol，地址解析協議），用於動態解析乙太網硬體的地址。

#### 傳輸層

傳輸層（transport layer）的協議，能夠解決諸如端到端可靠性（「數據是否已經到達目的地？」）和保證數據按照正確的順序到達這樣的問題。在TCP/IP協議組中，傳輸協議也包括所給數據應該送給哪個應用程式。

在TCP/IP協議組中技術上位於這個層的動態路由協議通常認為是網路層的一部分；一個例子就是OSPF（IP協議89）。

TCP（IP協議6）是一個「可靠的」、面向連結的傳輸機制，它提供一種可靠的字節流保證數據完整、無損並且按順序到達。TCP儘量連續不斷地測試網路的負載並且控制發送數據的速度以避免網路過載。另外，TCP試圖將數據按照規定的順序發送。這是它與UDP不同之處，這在實時數據流或者路由高網路層丟失率應用的時候可能成為一個缺陷。

較新的SCTP也是一個「可靠的」、面向連結的傳輸機制。它是面向記錄而不是面向字節的，它在一個單獨的連結上提供通過多路復用提供的多個子流。它也提供多路自尋址支持，其中連結終端能夠以多個IP位址表示（代表多個實體接口），這樣的話即使其中一個連接失敗了也不中斷。它最初是為電話應用開發的（在IP上傳輸SS7），但是也可以用於其他的應用。

UDP（IP協議號17）是一個無連結的數據報協議。它是一個「盡力傳遞」（best effort）或者說「不可靠」協議——不是因為它特別不可靠，而是因為它不檢查數據包是否已經到達目的地，並且不保證它們按順序到達。如果一個應用程式需要這些特性，那它必須自行檢測和判斷，或者使用TCP協議。

UDP的典型性應用是如流媒體（音訊和影片等）這樣按時到達比可靠性更重要的應用，或者如DNS查找這樣的簡單查詢／響應應用，如果建立可靠的連結所作的額外工作將是不成比例地大。

DCCP目前正由IETF開發。它提供TCP流動控制語義，但對於使用者來說保留UDP的數據報服務模型。

TCP和UDP都用來支持一些高層的應用。任何給定網路地址的應用通過它們的TCP或者UDP埠號區分。根據慣例使一些大眾所知的埠與特定的應用相聯繫。

RTP是為如音訊和影片流這樣的實時數據設計的數據報協議。RTP是使用UDP包格式作為基礎的會話層，然而據說它位於網際網路協議棧的傳輸層。

#### 網路互連層

TCP/IP協議族中的網路互連層（internet layer）在OSI模型中叫做網路層（network layer）。

正如最初所定義的，網路層解決在一個單一網路上傳輸數據包的問題。類似的協議有X.25和ARPANET的Host/IMP Protocol。

隨著網際網路思想的出現，在這個層上添加附加的功能，也就是將數據從源網路傳輸到目的網路。這就牽涉到在網路組成的網上選擇路徑將數據包傳輸，也就是網際網路。

在網際網路協議組中，IP完成數據從源發送到目的的基本任務。IP能夠承載多種不同的高層協議的數據；這些協議使用一個唯一的IP協議號進行標識。ICMP和IGMP分別是1和2。

一些IP承載的協議，如ICMP（用來發送關於IP發送的診斷資訊）和IGMP（用來管理多播數據），它們位於IP層之上但是完成網路層的功能，這表明網際網路和OSI模型之間的不兼容性。所有的路由協議，如BGP、OSPF、和RIP實際上也是網路層的一部分，儘管它們似乎應該屬於更高的協議棧。

#### 網路存取（連結）層

網路存取（連結）層實際上並不是網際網路協議組中的一部分，但是它是數據包從一個設備的網路層傳輸到另外一個設備的網路層的方法。這個過程能夠在網卡的軟體驅動程序中控制，也可以在韌體或者專用晶片中控制。這將完成如添加報頭準備發送、通過實體媒介實際發送這樣一些數據鏈路功能。另一端，鏈路層將完成數據幀接收、去除報頭並且將接收到的包傳到網路層。

然而，鏈路層並不經常這樣簡單。它也可能是一個虛擬專有網路（VPN）或者隧道，在這裡從網路層來的包使用隧道協議和其他（或者同樣的）協議組發送而不是發送到實體的接口上。VPN和通道通常預先建好，並且它們有一些直接發送到實體接口所沒有的特殊特點（例如，它可以加密經過它的數據）。由於現在鏈路「層」是一個完整的網路，這種協議組的遞歸使用可能引起混淆。但是它是一個實現常見複雜功能的一個優秀方法。（儘管需要注意預防一個已經封裝並且經隧道發送下去的數據包進行再次地封裝和發送）。

### IP網路如何併吞競爭的網路

在長期的發展過程中，IP逐漸取代其他網路。這裏是簡單的解釋。IP傳輸通用數據。數據能夠用於任何目的，並且能夠很輕易地取代以前由專有數據網路傳輸的數據。下面是普通的過程：

- 一個用於特定目的所開發出來的網路。如果它順利工作，使用者將能使用它。
- 為了提供便利的IP服務，經常用於訪問電子郵件或者聊天，通常以某種方式通過專有網路隧道實現。隧道方式最初可能非常沒有效率，因為電子郵件和聊天只需要很低的帶寬。
- 通過一點點的投資IP基礎設施逐漸在專有數據網路周邊出現。
- 用IP取代專有服務的需求出現，經常是一個使用者要求。
- IP替代品過程遍布整個網際網路，這使IP替代品比最初的專有網路更加有價值（由於網路效應）。
- 專有網路受到壓制。許多用戶開始維護使用IP替代品的複製品。
- IP包的間接開銷很小，少於1%，這樣在成本上非常有競爭性。人們開發能夠將IP帶到專有網路上的大部分使用者的不昂貴的傳輸媒介。
- 大多數使用者為削減開銷而取消專有網路。

### 實現

- KA9QPPJ
- lwIP

如今，大多數商業作業系統包括TCP/IP棧並且預設安裝它們，對於大多數使用者來說，沒有必要去探求它們如何實現。TCP/IP包含在所有的商業Unix和Linux發布包中，同樣也包含在Mac OS X、Windows系統和Windows Server中。

## 外部連結

- RFC 1180 TCP/IP指南，網際網路工程任務組，1991年1月
- TCP/IP常見問題解答
- ARPANET TCP/IP摘要研究
- TCP/IP流程圖
- 實踐中的網際網路
- TCP/IP Definition
- TCP/IP協議集詳細資料
- uIP - 針對8/16位元微控制器之用的TCP/IP協定堆疊程式
- Internet History
- RFC 1122 - 網際網路主機要求，通訊層