1. 程式人生 > 其它 >計算機網路總結(一)——TCP和UDP

計算機網路總結(一)——TCP和UDP

1.計算機網路基礎知識

1.1 計算機網路體系結構

1. TCP/IP模型

OSI 七層模型把網路通訊的工作分為 7 層,從下到上分別是物理層、資料鏈路層、網路層、傳輸層、會話層、表示層和應用層。

OSI 只是存在於概念和理論上的一種模型,它的缺點是分層太多,增加了網路工作的複雜性,所以沒有大規模應用。後來人們對 OSI 進行了簡化,合併了一些層,最終只保留了 4 層,從下到上分別是介面層、網路層、傳輸層和應用層,這就是大名鼎鼎的 TCP/IP 模型。

2. TCP/IP模型功能描述

這個網路模型主要用來進行資料封裝

我們平常使用的程式(或軟體)一般都是通過應用層來訪問網路的,程式產生的資料會

一層一層的往下傳輸,直到最後的網路介面層, 就通過網線傳送到網際網路上去了。資料每往下走一層,就會被這一層的協議增加一層包裝,等到傳送到網際網路上時,已經比原始資料多了四層包裝

當另一臺計算機接收到資料包時,會從網路介面層再一層一層往上傳輸,每傳輸一層就拆開一層包裝,直到最後的應用層,就得到了最原始的資料,這才是程式要使用的資料

給資料加包裝的過程,實際上就是在資料的頭部增加一個標誌(一個數據塊),表示資料經過了這一層,已經處理過了。給資料拆包裝的過程正好相反,就是去掉資料頭部的標誌,讓它逐漸現出原形。

兩臺計算機進行通訊時,必須遵守以下原則:

  • 必須是同一層次進行通訊,比如,A 計算機的應用層和 B 計算機的傳輸層就不能通訊,因為它們不在一個層次,資料的拆包會遇到問題。

  • 每一層的功能都必須相同,也就是擁有完全相同的網路模型。如果網路模型都不同,那不就亂套了,誰都不認識誰。

  • 資料只能逐層傳輸,不能躍層。

  • 每一層可以使用下層提供的服務,並向上層提供服務。

    兩臺計算機進行通訊時,必須遵守以下原則:

3. TCP/IP協議族

協議(Protocol)就是網路通訊過程中的約定或者合同,通訊的雙方必須都遵守才能正常收發資料。協議有很多種,例如 TCP、UDP、IP 等,通訊的雙方必須使用同一協議才能通訊。協議是一種規範,由計算機組織制定,規定了很多細節,例如,如何建立連線,如何相互識別等。

TCP/IP模型”中所涉及到的協議稱為“TCP/IP協議族”,TCP和IP是最常用的兩種底層協議,它們的層級如下:

4. IP、MAC和埠號

(1) IP地址

IP地址是 Internet Protocol Address 的縮寫,譯為“網際協議地址”。

一臺計算機可以擁有一個獨立的 IP 地址,一個區域網也可以擁有一個獨立的 IP 地址(對外就好像只有一臺計算機)。對於目前廣泛使用 IPv4 地址,它的資源是非常有限的,一臺計算機一個 IP 地址是不現實的,往往是一個區域網才擁有一個 IP 地址。

(2)MAC地址

真正能唯一標識一臺計算機的是 MAC 地址,每個網絡卡的 MAC 地址在全世界都是獨一無二的。計算機出廠時,MAC 地址已經被寫死到網卡里面了。

MAC 地址是 Media Access Control Address 的縮寫,直譯為“媒體訪問控制地址”,也稱為區域網地址(LAN Address),乙太網地址(Ethernet Address)或實體地址(Physical Address)。

(3)埠號

有了 IP 地址和 MAC 地址,雖然可以找到目標計算機,但仍然不能進行通訊。一臺計算機可以同時提供多種網路服務,例如 Web 服務(網站)、FTP 服務(檔案傳輸服務)、SMTP 服務(郵箱服務)等,僅有 IP 地址和 MAC 地址,計算機雖然可以正確接收到資料包,但是卻不知道要將資料包交給哪個網路程式來處理,所以通訊失敗。

為了區分不同的網路程式,計算機會為每個網路程式分配一個獨一無二的埠號(Port Number),例如,Web 服務的埠號是 80,FTP 服務的埠號是 21,SMTP 服務的埠號是 25。

1.2 TCP和UDP

1. TCP和UDP的特點和區別

傳輸控制協議 TCP(Transmission Control Protocol)

TCP是面向連線的,可靠的,位元組流,有流量控制,擁塞控制,提供全雙工通訊,面向位元組流(把應用層傳下來的報文看成位元組流,把位元組流組織成大小不等的資料塊),每一條 TCP 連線只能是點對點的(一對一)。

使用者資料報協議 UDP(User Datagram Protocol)

UDP是無連線的,盡最大可能交付,沒有擁塞控制,面向報文(對於應用程式傳下來的報文不合並也不拆分,只是新增 UDP 首部),支援一對一、一對多、多對一和多對多的互動通訊。

2. TCP和UDP的首部格式

UDP 首部欄位只有 8 個位元組,包括源埠、目的埠、長度、檢驗和。如圖所示:

TCP首部比UDP複雜的多,如圖所示:

序號:用於對位元組流進行編號,例如序號為 301,表示第一個位元組的編號為 301,如果攜帶的資料長度為 100 位元組,那麼下一個報文段的序號應為 401。

確認號:期望收到的下一個報文段的序號。例如 B 正確收到 A 傳送來的一個報文段,序號為 501,攜帶的資料長度為 200 位元組,因此 B 期望下一個報文段的序號為 701,B 傳送給 A 的確認報文段中確認號就為 701。

資料偏移:指的是資料部分距離報文段起始處的偏移量,實際上指的是首部的長度。

控制位:八位從左到右分別是 CWR,ECE,URG,ACK,PSH,RST,SYN,FIN。

CWR:CWR 標誌與後面的 ECE 標誌都用於 IP 首部的 ECN 欄位,ECE 標誌為 1 時,則通知對方已將擁塞視窗縮小;

ECE:若其值為 1 則會通知對方,從對方到這邊的網路有阻塞。在收到資料包的 IP 首部中 ECN 為 1 時將 TCP 首部中的 ECE 設為 1;

URG:該位設為 1,表示包中有需要緊急處理的資料,對於需要緊急處理的資料,與後面的緊急指標有關;

ACK:該位設為 1,表示確認應答的欄位有效,TCP規定除了最初建立連線時的 SYN 包之外該位必須設為 1;

PSH:該位設為 1,表示需要將收到的資料立刻傳給上層應用協議,若設為 0,則先將資料進行快取;

RST:該位設為 1,表示 TCP 連接出現異常必須強制斷開連線;

SYN:用於建立連線,該位設為 1,表示希望建立連線,並在其序列號的欄位進行序列號初值設定

FIN:用於斷開連線,該位設為 1,表示今後不再有資料傳送,希望斷開連線。當通訊結束希望斷開連線時,通訊雙方的主機之間就可以相互交換 FIN 位置為 1 的 TCP 段。

每個主機又對對方的 FIN 包進行確認應答之後可以斷開連線。不過,主機收到 FIN 設定為 1 的 TCP 段之後不必馬上回復一個 FIN 包,而是可以等到緩衝區中的所有資料都因為已成功傳送而被自動刪除之後再發 FIN 包;

視窗:視窗值作為接收方讓傳送方設定其傳送視窗的依據。之所以要有這個限制,是因為接收方的資料快取空間是有限的。

參考:

  1. 《TCP-IP網路程式設計》 韓-尹聖雨
  2. 《圖解網路》小林coding