一般來說,TCP/IP 是利用IP進行通訊時所必須用到的協議群的統稱。具體點,IP或ICMP、TCP或UDP、TELENT或ETP、以及HTTP等都屬於TCP/IP協議,而TCP/IP泛指這些協議。
TCP/IP協議分層模型
網路協議通常分為不同層次進行開發,每一層分別負責不同的通訊功能。一個協議族,比如TCP/IP,是一組不同層次上的多個協議的組合。TCP/IP通常被認為是一個四層協議系統,如下表所示:
層級 |
對應的協議或應用 |
負責的功能 |
應用層 |
Telnet、FTP和e-mail等 |
負責處理特定的應用程式的細節 |
運輸層 |
TCP 和 UDP |
為兩臺主機上的應用程式提供端到端的通訊 |
網路層 |
IP、ICMP 和 IGMP |
處理分組在網路中的活動,例如分組的選路 |
鏈路層 |
裝置驅動程式及介面層 |
處理與傳輸媒介的物理介面細節 |
通常情況下,應用程式就是一個使用者程序,而下三層則一般在(作業系統)核心中執行,例如 UNIX 作業系統。除此之外,應用層與下三層還有一個關鍵不同在於:應用層關心的是應用程式的細節,而不是資料在網路中的傳輸活動,下三層對應用程式一無所知,但它們要處理所有的通訊細節。
在TCP/IP協議族中,網路層IP提供的是一種不可靠的服務,也就是說,它只是儘快的將分組從源結點送到目的結點,但並不提供任何可靠性保證。而另一方面,TCP在不可靠的IP層上提供了一個可靠的運輸層。為了提供這種可靠的服務,TCP採用了超時重傳、傳送和接收端到端的確認分組等機制。由此可見,運輸層和網路層分別負責不同的功能。
TCP/IP 的分層
在 TCP/IP 協議族中,有很多中協議。如下圖所示:
在 TCP/IP 協議族中,有很多中協議。如下圖所示:
TCP 和 UDP 是兩種最為著名的運輸協議,二者都可以使用 IP 作為網路層協議。雖然 TCP 使用不可靠的 IP 服務,但它卻提供了一種可靠的運輸層服務;UDP 為應用程式傳送和接收資料包。一個數據報是指從傳送方傳輸到接收方的一個資訊單元。但是與 TCP 不同的是,UDP 是不可靠的的,它不能保證資料保證能夠安全無誤地到達最終目的。
IP 是網路層上的主要協議,同時被 TCP 和 UDP 使用。TCP 和 UDP 的每組資料都透過端系統和每個中間路由器中的IP層在網際網路中進行傳輸。ICMP是IP協議的附屬協議,IP層用它來與其他主機或路由器交換錯誤報文和其他重要資訊。Ping 和 Traceroute,它們都使用了 ICMP。IGMP 是 Internet 組織管理協議,它用來把一個 UDP 資料報多播到多個主機。
ARP(地址解析協議)和 RARP(逆地址解析協議)是某些網路介面使用的特殊協議,用來轉換IP層和網路介面層使用的地址。
當應用程式用TCP傳送資料時,資料被送入協議棧中,然後逐個透過每一層直到被當作一串位元流送入網路,其中每一層對收到的資料都要增加一些首部資訊(有時還要加一些尾部資訊)。TCP 傳給IP的資料單元稱作TCP報文段或簡稱為 TCP 段。IP傳給網路介面層的資料單元稱作IP資料報。透過乙太網傳輸的位元流稱為幀。 UDP 資料與 TCP 資料基本一致。唯一不同的是 UDP 傳給IP的資訊單元稱為 UDP 資料報,而且 UDP 的首部長為8位元組。
IP:網際協議
IP 是TCP/IP協議族中最為核心的協議。所有的TCP、UDP、ICMP及IGMP資料都以IP資料報格式傳輸,它提供不可靠、無連線的資料報傳送服務。
不可靠的意思是指它不能保證IP資料報能夠成功地到達目的地。IP僅提供最基本的傳輸服務。如果發生某種錯誤時,如某個路由器暫時用完了緩衝區,IP有一個簡單的錯誤處理演算法:丟棄該資料報,然後傳送ICMP訊息報給信源端。
無連線是指IP並不維護任何關於後續資料報的狀態資訊。每個資料報表的處理是相互獨立的。這也說明,IP資料報可以不按傳送順序接收。
IP首部
IP 資料報的格式,如圖所示:
版本號:版本號欄位佔4位: IP協議的版本號,一般有兩個值,如果為4就代表是IPv4,6就代表是IPv6協議。 4→IPv4, 6 → IPv6
首部長度:指首部佔32位字的數目。普通IP資料報(沒有任何選擇項)欄位的值是5。
服務型別(TOS)欄位:包括一個3bit的優先權子欄位,4bit的TOS子欄位和1bit未用位但必須置0。4 bit的TOS分別代表:最小時延、最大吞吐量、最高可靠性和最小費用。4bit中只能置其中1bit。
總長度欄位:指整個IP資料報的長度,以位元組為單位。利用首部長度欄位和總長度欄位就可以知道IP資料報中資料內容的起始位置和長度。總長度欄位是IP首部中必要的內容。
標識欄位:唯一的標識就是主機發送的每一份資料報。通常每傳送一份報文它的值就加1。
TTL:生存時間欄位設定了資料報可以經過的最多路由器數。
首部檢驗和欄位:根據IP首部計算的檢驗和碼。它不對首部後面的資料進行計算。ICMP、IGMP、UDP、TCP在它們各自的首部中均含有同時覆蓋首部和資料檢驗和碼。
如何計算一份資料報的IP檢驗和:1.檢驗和欄位置為0; 2.對首部的每個16bit進行二進位制反碼求和並存入檢驗和欄位中。 3. 接收方對收到的IP首部劃分為若干個16bit,並進行反碼求和,如果接收方計算結果全為1,則無錯。
IP路由選擇
主機的路由選擇可以非常簡單:如果目的主機在直接連線的網路上,那麼就把資料報直接傳給目的主機,否則傳給預設路由器。
在進行路由選擇決策時,主機和路由器都使用路由表。在表中,有三種類型的路由:特定主機型、特定網路型和預設路由型。路由表在表目具有一定的優先順序。在選擇路由時,主機路由優先於網路路由,最後在沒有其他可選路由存在時才選擇預設路由。
IP路由選擇是透過逐跳來實現的。資料報在各站的傳輸過程中目的IP地址始終不變,但是封裝和目的鏈路層地址在每一站都可以改變。
運輸層協議:TCP 和 UDP
運輸層介於應用層和網路層之間,將主機到主機的端對端通訊能力擴充套件為程序到程序的端到端通訊能力。它執行在位於英特網邊緣的端系統上,對上直接為不同的應用程式程序提供可靠的或盡力而為的通訊服務,對下則有效地利用網路層的IP盡力而為服務。運輸層是TCP/IP 分層網路體系結構中承上啟下的重要環節。
多路複用與多路分解
網路層的傳輸通道只有一個,但是應用程序之間的互動關係卻很多,因此運輸層擔負著將多個應用程序的報文透過同一個網路層傳遞通道進行傳輸,並正確地交給某個應用程序的任務,稱為運輸層的多路複用與多路分解。
套接字和埠
埠和套接字的作用:為了表示主機中存在多個程序,我們用埠號標識這臺主機中的程序,用IP地址標識這臺主機;埠連同標識主機介面的IP地址一起,能夠唯一標識網路中的任何程序(TCP 和 UDP 的埠號各自獨立);為了簡化程式設計操作,我們引入套接字(Socket)來描述網路兩端程序之間的通訊鏈(通訊連結串列示通訊雙方IP地址、埠號及運輸層協議之間的關聯)。
當接收主機收到一個數據報時,其運輸層並沒有直接將資料報交給應用程序,而是將其交給了一個套接字進行處理,並由其轉交給相應的應用程序。
多路複用要求:套接字有唯一的標識,該標識的具體格式與它是UDP還是TCP型別有關;每個報文段都有特殊欄位來指示該報文段要交付到的埠號
UDP 套接字用一個二元組(目的IP地址、目標埠號)來標識的,TCP套接字是用四元組(源IP地址、源埠號、目的IP地址、目的埠號)來標識的。
UDP :使用者資料報協議
UDP 是一個簡單的面向資料報的運輸層協議:程序中每個輸出操作都正好產生一個UDP資料報,並組裝成一份代傳送的 IP 資料報。它只是在 IP 的基礎上擴充套件了多路複用/分解功能。
UDP 具有以下特點:
1. 除了多路複用/分解及某種輕型的差錯檢測功能外,應用程式幾乎都是直接與IP打交道。
2. UDP稱為無連線的,使用UDP時,在傳送報文段之前,傳送方和接收方的運輸層實體之間沒有握手過程,因此UDP具有較小的協議開銷和傳送資料之前的時延
3. UDP不保證可靠交付,它繼承了IP的盡力而為交付的特性
4. UDP 沒有流量控制和擁塞控制
5. UDP 是面向報文的。應用程式交給UDP一個報文段,UDP就傳送該報文段,不會將應用程式交來的報文段劃分為若干個分組來發送,也不會將收到的若干個報文合併後再交付給應用程式。
6. UDP具有較高的協議效率。其首部開銷只有8位元組,而TCP的首部為20個位元組。
UDP 報文段的首部格式:
從圖中可以看到,UDP 資料報是由UDP首部和放置在UDP報文段的的資料欄位的應用層資料組成。
UDP計算檢驗和的方法和計算IP資料報首部檢驗和的方式相似,不同之處在於IP資料報的檢驗和只檢驗IP資料報的首部,但UDP的檢驗和是把UDP報文段和偽首部放在一起檢驗,以防止將報文段意外的交付到錯誤的目的地。
TCP:傳輸控制協議
TCP 能夠提供面向連線、可靠資料傳輸和擁塞控制等服務。
TCP 的主要特點可以歸納為以下幾點:
1. TCP 是面向連線的端到端協議,傳送方再向接收方傳送資料之前,必須透過“三次握手”。TCP連線的狀態僅保留在兩個端系統中,與中間路由和鏈路層交換機無關。
2. TCP 連線是點到點的。也就是說TCP連線是在單個傳送方與單個接收方之間的連線。
3. TCP 連線提供全雙工服務。
4. TCP 提供可靠的交付服務,也就是說透過TCP連線傳輸的資料,能夠保證無差錯、不丟失、不重複並且按序的到達。
5. TCP採用客戶/伺服器模式。
6. TCP報文段的劃分。當建立起一條TCP連線,兩個應用程序就可以互相傳送資料了,資料流透過套接字傳輸。
7. TCP 面向位元組流。TCP中的“流”是指流入到程序或從程序流出的位元組序列。
8. 除此之外,TCP還有著名的流量控制與擁塞控制。