小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

一文讀懂 TCP/IP 網(wǎng)絡(luò)模型

 常有理 2020-04-27

前言

互聯(lián)網(wǎng)是怎么構(gòu)成的,又是怎么運作的?什么面試官老喜歡問 TCP/IP 網(wǎng)絡(luò)?為什么遠(yuǎn)隔萬里的計算機可以互相通信?計算機網(wǎng)絡(luò)作為 IT 行業(yè)的基石,是工程師永遠(yuǎn)繞不開的話題。

網(wǎng)絡(luò)的分層體系結(jié)構(gòu)

計算機網(wǎng)絡(luò)是一個非常龐大且復(fù)雜的系統(tǒng),所以在設(shè)計之初就嚴(yán)格遵守著「分層」的設(shè)計理念。分層將龐大的問題細(xì)分為了若干個局部的小問題,具有下列好處:

  • 分層隔離
  • 靈活性好
  • 易于實現(xiàn)和維護(hù)
  • 能促進(jìn)標(biāo)準(zhǔn)化工作

其中「標(biāo)準(zhǔn)化」是促進(jìn)互聯(lián)網(wǎng)全球化的關(guān)鍵,在計算機網(wǎng)絡(luò)領(lǐng)域,你會聽說到各種各樣的協(xié)議,這些都是標(biāo)準(zhǔn)化的結(jié)果。試想,如果每個網(wǎng)卡廠商都使用了不同的網(wǎng)線接口風(fēng)格,那無疑是一個災(zāi)難。

主流網(wǎng)絡(luò)分層體系結(jié)構(gòu)有兩種:

  • OSI(Open Systems Interconnection Reference Model,開放系統(tǒng)互聯(lián)基本參考模型),就是常說的七層網(wǎng)絡(luò)模型。
  • TCP/IP(Transmission Control Protocol/Internet Protocol,傳輸控制協(xié)議/因特網(wǎng)協(xié)議)四層網(wǎng)絡(luò)模型,也有人愿意歸為 “五層網(wǎng)絡(luò)模型”,以其中最重要的 TCP 協(xié)議和 IP 協(xié)議命名。

一文讀懂 TCP/IP 網(wǎng)絡(luò)模型

值得一提的是,由國際化標(biāo)準(zhǔn)組織制定的 OSI 模型,本來是最應(yīng)該在全球范圍內(nèi)推廣的網(wǎng)絡(luò)模型,不過因為 OSI 的設(shè)計過于理想不合實際,再加上當(dāng)時應(yīng)用 TCP/IP 模型的因特網(wǎng)(Internet)已經(jīng)覆蓋了全球大部分地區(qū)。種種原因,導(dǎo)致 OSI 并沒有取得市場化的成功,僅僅是獲得了理論上的研究成果。而 TCP/IP 模型則被作為了事實上的國際標(biāo)準(zhǔn)。

TCP/IP 網(wǎng)絡(luò)模型

請注意,計算機網(wǎng)絡(luò)的分層體系結(jié)構(gòu)雖然是抽象的,但實現(xiàn)則是具體的。

一文讀懂 TCP/IP 網(wǎng)絡(luò)模型

上圖展示了 HTTP 應(yīng)用數(shù)據(jù)在主機間傳輸?shù)倪^程,首先自上而下、宏觀的來看數(shù)據(jù)在分層網(wǎng)絡(luò)模型里的流轉(zhuǎn)。

  • 應(yīng)用層的 “HTTP 數(shù)據(jù)” 是實際需要被傳輸?shù)臄?shù)據(jù)
  • “HTTP 數(shù)據(jù)” 被下發(fā)到傳輸層,并添加上 TCP 首部成為傳輸層的 PDU(Protocol Data Unit,協(xié)議數(shù)據(jù)單元),稱作數(shù)據(jù)段(Segment)。
  • 數(shù)據(jù)段再被下發(fā)到網(wǎng)絡(luò)層,添加了 IP 首部后成為網(wǎng)絡(luò)層的 PDU,稱作數(shù)據(jù)包(Packet)。
  • 數(shù)據(jù)包再被下發(fā)到數(shù)據(jù)鏈路層添加了 Ethernet 首部后得到的 PDU 被稱為數(shù)據(jù)幀(Frame)。
  • 數(shù)據(jù)幀最后被下發(fā)到物理層,以 01 電信號(比特數(shù)據(jù)位)的形式在物理介質(zhì)中傳輸。

TCP/IP 的每個層級都依賴于下層支撐,越往上就離用戶越近,反正則離硬件越近。從上至下,不斷為應(yīng)用數(shù)據(jù)附加首部的過程稱為封裝,從下至上不斷解析首部的過程則稱為解封裝。

一文讀懂 TCP/IP 網(wǎng)絡(luò)模型

最終在物理層傳輸?shù)臄?shù)據(jù)幀如上圖所示,含有多個首部(Head),它們具有不同的數(shù)據(jù)結(jié)構(gòu)和功能,服務(wù)于數(shù)據(jù)傳輸?shù)目尚行?。學(xué)習(xí)計算機網(wǎng)絡(luò),其實就是學(xué)習(xí)各式 Head 的功能,學(xué)習(xí)每一層的核心協(xié)議以及它所解決的問題。下面繼續(xù)自下而上的對數(shù)據(jù)幀進(jìn)行解析,深入各層級的實現(xiàn)細(xì)節(jié)。

物理介質(zhì)層

物理介質(zhì)是連接網(wǎng)絡(luò)終端設(shè)備(計算機、交換機、路由器)的物理手段,最常見的有網(wǎng)線(雙絞線),除此還有光纖、無線電波等。不同的物理介質(zhì)決定了電信號傳輸?shù)木嚯x、帶寬、速率、抗干擾能力等性能參數(shù)。

所以物理介質(zhì)層主要解決的問題是:

  • 規(guī)范了網(wǎng)絡(luò)終端設(shè)備之間的電氣、機械、流程和功能等方面的要求
  • 規(guī)范了電頻、速率、最大傳輸距離和物理接口等特征

物理層所帶來的最直觀的好處就是,我們可以使用同一根網(wǎng)線插進(jìn)任何品牌的計算機上。

一文讀懂 TCP/IP 網(wǎng)絡(luò)模型

數(shù)據(jù)鏈路層

上文提到,數(shù)據(jù)實際會以電信號的形式在物理介質(zhì)中傳輸,不過單純的 01 數(shù)字顯然是沒有價值的,需要為電信號進(jìn)行分組和排序,以特有的組織方式來賦予其特定的含義。數(shù)據(jù)鏈路層為了解決這個問題先后提出過包括有 Ethernet v.2、IEEE 802.2、Internetwork 在內(nèi)的多種協(xié)議,其中又以 Ethernet 協(xié)議占據(jù)主導(dǎo)地位。

Ethernet 協(xié)議,即以太網(wǎng)協(xié)議,規(guī)定了電信號的分組方式。一組電信號稱為一個數(shù)據(jù)幀,數(shù)據(jù)幀又由幀首、數(shù)據(jù)和幀尾三部分組成。發(fā)送方通過物理介質(zhì)把數(shù)據(jù)幀發(fā)送給接收方,接收方接收到一組電信號,就會認(rèn)為是接收到了一個數(shù)據(jù)幀。

一文讀懂 TCP/IP 網(wǎng)絡(luò)模型

  • 數(shù)據(jù)幀首部:占 14 字節(jié),包含有目標(biāo)主機網(wǎng)卡 MAC 地址、源主機網(wǎng)卡 MAC 地址以及數(shù)據(jù)幀類型標(biāo)識
  • 數(shù)據(jù):從上層(網(wǎng)絡(luò)層)傳遞下來的數(shù)據(jù)包,范圍在 [46, 1500] 個字節(jié)之間
  • 數(shù)據(jù)幀尾部:占 4 個字節(jié),是 CRC 校驗序列,用來確定數(shù)據(jù)幀在傳輸過程中是否有損壞
MAC 地址

在規(guī)范了電信號解讀方式后,數(shù)據(jù)鏈路層還要解決 “主機定位” 的問題:數(shù)據(jù)幀怎么知道自己應(yīng)該被哪一臺主機接收呢?

以太網(wǎng)協(xié)議規(guī)定了接入網(wǎng)絡(luò)的終端設(shè)備都必須安裝有網(wǎng)絡(luò)設(shè)配器(即 NIC 網(wǎng)卡),數(shù)據(jù)幀必須由網(wǎng)卡發(fā)送,再由另一張網(wǎng)卡接收。每張網(wǎng)卡都被分配一個 MAC 地址,具有全球唯一性。而數(shù)據(jù)接收方的 MAC 地址就被記錄在數(shù)據(jù)幀首部。

一文讀懂 TCP/IP 網(wǎng)絡(luò)模型

MAC 地址為 6 字節(jié),使用 12 個十六進(jìn)制數(shù)表示,e.g. 00:01:6C:06:A6:29

  • 前 6 個十六進(jìn)制數(shù)為廠商編號,由 IEEE(電氣和電子工程師協(xié)會)分配給廠商
  • 后 6 個則為該廠商的網(wǎng)卡流水號,由廠商自己分配

以太網(wǎng)協(xié)議數(shù)據(jù)幀定位原理:有了 MAC 地址以后,以太網(wǎng)協(xié)議采用廣播形式,將數(shù)據(jù)幀發(fā)給本地網(wǎng)絡(luò)內(nèi)所有的主機,主機在接收數(shù)據(jù)幀后會解析數(shù)據(jù)幀首部的目標(biāo)主機網(wǎng)卡 MAC 地址,再和自身的網(wǎng)卡 MAC 地址對比。若相同,就接收數(shù)據(jù)幀做下一步處理。若不同,則丟棄。

一文讀懂 TCP/IP 網(wǎng)絡(luò)模型

而且為了增幅廣播的性能和組網(wǎng)的靈活性,一般會在本地網(wǎng)絡(luò)中架設(shè)交換機來支持信號轉(zhuǎn)發(fā),交換機也是數(shù)據(jù)鏈路層的代表設(shè)備。

一文讀懂 TCP/IP 網(wǎng)絡(luò)模型

數(shù)據(jù)鏈路層主要解決的問題是:對電信號進(jìn)行分組并形成具有特定意義的數(shù)據(jù)幀,然后以廣播的形式通過物理介質(zhì)發(fā)送給接收方。

網(wǎng)絡(luò)層

從理論來講,使用 MAC 地址就可以實現(xiàn)定位到這里世界上任意一臺計算機,前提是廣播的作用域也是全球范圍的,但這并不現(xiàn)實。MAC 地址的定位方式存在本地子網(wǎng)的局限性。所以除了以太網(wǎng)協(xié)議之外,還迫切的需要解決下列問題:

  • 如何輕易的進(jìn)行子網(wǎng)劃分
  • 如何隔離子網(wǎng)之間的廣播信號
  • 在隔離廣播信號的前提下,如何保證子網(wǎng)之間的計算機依舊能夠通信
IP 協(xié)議

IP(Internet Protocol,因特網(wǎng)協(xié)議)是網(wǎng)絡(luò)層的核心協(xié)議,規(guī)定了網(wǎng)絡(luò)層的封裝規(guī)范,將上層(傳輸層)傳遞下來的數(shù)據(jù)段附加上 IP 首部封裝成 IP 數(shù)據(jù)包,又稱數(shù)據(jù)報文,IP 數(shù)據(jù)包同樣由包首部和數(shù)據(jù)兩部分組成,只是數(shù)據(jù)部分實際為傳輸層的數(shù)據(jù)段。

一文讀懂 TCP/IP 網(wǎng)絡(luò)模型

數(shù)據(jù)包首部長度為 20 字節(jié),數(shù)據(jù)部分最大長度為 65515 字節(jié),一個 IP 數(shù)據(jù)包總長達(dá) 65535 字節(jié)。而下層數(shù)據(jù)幀的數(shù)據(jù)部分最長為 1500 個字節(jié),所以如果 IP 數(shù)據(jù)包的實際長度超過了 1500,就需要對 IP 數(shù)據(jù)包進(jìn)行分片處理,由多個數(shù)據(jù)幀發(fā)送。

IP 數(shù)據(jù)包首部

一文讀懂 TCP/IP 網(wǎng)絡(luò)模型

  • Version 版本號:標(biāo)識 IP 地址的版本,目前有 IPv4 和 IPv6 兩個版本
  • Header Length 首部長度:標(biāo)識 IP 首部長度
  • Type of Service 服務(wù)類型:前 3 位標(biāo)識優(yōu)先級,4-7 位分別標(biāo)識時延、吞吐量、可靠性、開銷(一個數(shù)據(jù)包只能有一位生效)
  • Total Length 總長度:標(biāo)識 IP 數(shù)據(jù)包總長
  • Identification 鑒定字段:IP 數(shù)據(jù)包的唯一標(biāo)識,如果數(shù)據(jù)包被分片傳輸,接收方會根據(jù)分片中的該字段值來判斷哪些分片屬于同一個數(shù)據(jù)報,以此進(jìn)行分片重組。通常的每發(fā)送一份數(shù)據(jù)包該值就會被加 1。
  • IP Flags 標(biāo)志位:標(biāo)識 IP 數(shù)據(jù)包是否被分片。
  • Fragment Offset 偏移量:在接收方進(jìn)行分片重組時,標(biāo)識分片的順序,指明了分片起始點相對于數(shù)據(jù)包起始點的偏移量。因為 IP 協(xié)議是無連接的非可靠傳輸協(xié)議,所以需要該字段來應(yīng)對分片傳輸錯序的情況。
  • TTL 生存時間:標(biāo)識生存時長,指明了數(shù)據(jù)報可以經(jīng)過的路由器數(shù)量,防止丟失數(shù)據(jù)包的無休止傳播。初始值由源主機設(shè)置(通常為32或64),每經(jīng)過一個路由器,該字段值就會減 1。如果數(shù)據(jù)包的 TTL 減至 0,那么路由器會丟棄該數(shù)據(jù)包并發(fā)送一個 ICMP 超時消息給數(shù)據(jù)包的源主機 IP 地址。
  • Protocol 協(xié)議:標(biāo)識數(shù)據(jù)包數(shù)據(jù)部分來自于哪個協(xié)議(ICMP/IGMP/TCP/UDP/GRE/ESP)。
  • Header Checksum 首部校驗和:根據(jù) IP 數(shù)據(jù)包首部計算出來的校驗和
  • Option 選項:一個可變長的可選信息
  • Source Addres 源地址:IP 數(shù)據(jù)包源主機的 IP 地址
  • Destination Address 目標(biāo)地址:IP 數(shù)據(jù)包的目標(biāo)主機 IP 地址,是網(wǎng)關(guān)路由的關(guān)鍵依據(jù)。

IP 地址:因為 MAC 地址無法滿足復(fù)雜的網(wǎng)絡(luò)環(huán)境需求,所以 IP 協(xié)議制定了一套邏輯上的網(wǎng)絡(luò)地址(IP/子網(wǎng)掩碼)。IP 地址有 IPv4 和 IPv6 兩個版本,通過子網(wǎng)掩碼將 IP 地址分為網(wǎng)絡(luò)號、主機號兩個部分,前者標(biāo)識了一個子網(wǎng),后者標(biāo)識了子網(wǎng)中的主機。如果兩臺主機處在同一子網(wǎng),那么它們的網(wǎng)絡(luò)號必須是相同的。IP 地址解決了 “如何輕易的進(jìn)行子網(wǎng)劃分” 的問題。

一文讀懂 TCP/IP 網(wǎng)絡(luò)模型

ARP 協(xié)議

引入 IP 地址后,接入網(wǎng)絡(luò)的主機至少擁有一個 IP 地址和 MAC 地址。需要強調(diào)的是,IP 地址本質(zhì)上是一個邏輯地址,為了解決上層復(fù)雜的子網(wǎng)架構(gòu)問題而生,并不能作為最終定位主機的依據(jù),這仍要依靠 MAC 地址來完成。因此,網(wǎng)絡(luò)層還需要找到一種方法來完成 IP to MAC 的映射,ARP 協(xié)議應(yīng)運而生。

ARP(Address Resolution Protocol,地址解析協(xié)議)提供了根據(jù) IP 地址來獲取 MAC 地址的能力,地址解析之名由此而來。

地址解析原理:主機間的通信時,ARP 協(xié)議首先會發(fā)起一個請求 IP 數(shù)據(jù)包,IP 數(shù)據(jù)包的首部包含有目標(biāo)主機 IP 地址,這個數(shù)據(jù)包經(jīng)由數(shù)據(jù)鏈路層、物理介質(zhì)層,最終廣播到子網(wǎng)內(nèi)所有主機,主機接受到該 IP 數(shù)據(jù)包后解析出其首部所包含的目標(biāo)主機 IP 地址,再和自身 IP 地址進(jìn)行比對。若相同,則根據(jù)數(shù)據(jù)包首部包含的源主機 IP 地址將 MAC 地址返回;若不相同,則丟棄該數(shù)據(jù)包。同時 ARP 協(xié)議還會緩存一份地址映射表在本地,表記錄為返回的 MAC 地址和目標(biāo)主機 IP 地址。下次再需要通信時,ARP 會直接查詢地址映射表以提高效率。

路由協(xié)議

通過 ARP 協(xié)議的地址解析原理不難發(fā)現(xiàn),ARP 協(xié)議同樣具有子網(wǎng)局限性。為了突破這一限制實現(xiàn)跨子網(wǎng)通信,網(wǎng)絡(luò)層實現(xiàn)了路由協(xié)議。

路由協(xié)議提供了異構(gòu)網(wǎng)(子網(wǎng)間)互聯(lián)的能力,可以將一個子網(wǎng)的 IP 數(shù)據(jù)包發(fā)送到另一個子網(wǎng)。所謂 “路由” 即指導(dǎo)數(shù)據(jù)包轉(zhuǎn)發(fā)的路徑信息。路由協(xié)議是運行在路由器上的協(xié)議,在錯綜復(fù)雜的網(wǎng)絡(luò)世界中,路由器充當(dāng)了交通樞紐的角色,它會視實際的網(wǎng)絡(luò)環(huán)境來選擇最佳路徑進(jìn)行數(shù)據(jù)包轉(zhuǎn)發(fā),路由器是網(wǎng)絡(luò)層的代表設(shè)備。

IP 數(shù)據(jù)包路由原理:主機間的通信時,首先會通過 IP 協(xié)議來判斷兩臺主機是否處在同一子網(wǎng)。若是,直接交給 ARP 協(xié)議和以太網(wǎng)協(xié)議來完成子網(wǎng)廣播。若不是,以太網(wǎng)協(xié)議則會將 IP 數(shù)據(jù)包發(fā)送到子網(wǎng)網(wǎng)關(guān)(一般為路由器)進(jìn)行路由決策,在經(jīng)過若干次網(wǎng)關(guān)路由轉(zhuǎn)發(fā)之后,IP 數(shù)據(jù)包就進(jìn)入到目標(biāo)主機 IP 地址所處的子網(wǎng)中,最后還是通過子網(wǎng)廣播完成主機定位。

一文讀懂 TCP/IP 網(wǎng)絡(luò)模型

可見,路由器和路由協(xié)議解決了 “如何隔離子網(wǎng)之間的廣播信號” 和 “子網(wǎng)之間的計算機依舊能夠通信” 的問題。

傳輸層

通過物理介質(zhì)層、數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層的底層支撐,或者說通過 MAC 地址和 IP 地址的支撐,得以實現(xiàn)了主機間在全球互聯(lián)網(wǎng)中的互聯(lián)互通,所以三者也會被歸納為「基礎(chǔ)傳輸層」。

不過僅僅支持 “主機定位” 依舊是不足以滿足需求的,還需要完成主機上的 “應(yīng)用程序定位” 才可以。因為互聯(lián)網(wǎng)傳輸?shù)臄?shù)據(jù)往往是應(yīng)用程序的數(shù)據(jù),比如微信聊天,實際是兩臺設(shè)備上微信 APP 之間的數(shù)據(jù)傳輸。所以主機在接收到數(shù)據(jù)后,還需要解決:這個 IP 數(shù)據(jù)包應(yīng)該交由誰來處理?就是所謂的 “應(yīng)用程序定位” 問題。

對此,傳輸層規(guī)定為每個應(yīng)用程序都指定一個特殊的 “地址” 來輔助定位,這個 “地址” 就是 —— 進(jìn)程端口(Port)

傳輸層的主要作用就是建立進(jìn)程與進(jìn)程之間的通信,即 Port 到 Port 之間的數(shù)據(jù)傳輸,主要有 UDP 協(xié)議和 TCP 協(xié)議兩種實現(xiàn)。如果你具有網(wǎng)絡(luò)應(yīng)用編程經(jīng)驗,那么你對 (IP, Port) 的組合應(yīng)該不會感到陌生,這就是 Unix 系列操作系統(tǒng)定義的 Socket 套接字。

一文讀懂 TCP/IP 網(wǎng)絡(luò)模型

可用端口號在 [0, 65535] 之間,其中 [0, 1023] 屬于系統(tǒng)端口,由操作系統(tǒng)原生服務(wù)進(jìn)程使用,其余為用戶端口,由用戶自由分配。傳輸層的 PUD 為數(shù)據(jù)段(Segment),其首部也有 TCP 首部和 UDP 首部兩種類型。

一文讀懂 TCP/IP 網(wǎng)絡(luò)模型

數(shù)據(jù)段首部為 8 字節(jié),數(shù)據(jù)部分為上層應(yīng)用數(shù)據(jù)占 65527 字節(jié),總長不超過 65,535 字節(jié),正好作為下層 IP 數(shù)據(jù)包的數(shù)據(jù)部分。

TCP 協(xié)議

TCP(Transmission Control Protocol,傳輸控制協(xié)議),是一種面向連接的可靠傳輸協(xié)議,提供可靠(無差錯、不丟失、不重復(fù)、按順序)的字節(jié)流數(shù)據(jù)傳輸服務(wù)。在傳輸效率和可靠性之間選擇了后者,所以有開銷大、傳輸速度慢的缺點。

  • 面向連接:在使用 TCP 通信之前,需要進(jìn)行 “三次握手” 建立發(fā)收雙方連接,通信結(jié)束后還要進(jìn)行 “四次揮手” 確保斷開連接。
  • 點對點:一條 TCP 連接只能連接兩個端點。
  • 全雙工通信:允許通信雙方任意時刻雙向發(fā)送數(shù)據(jù),發(fā)送方設(shè)有發(fā)送緩存,接收方設(shè)有接收緩存。
  • 字節(jié)流傳輸:TCP 會將數(shù)據(jù)當(dāng)作字節(jié)流進(jìn)行處理,不嘗試?yán)斫馑鶄鬏數(shù)臄?shù)據(jù)含義,僅把數(shù)據(jù)看作一連串的字節(jié)序列。

TCP 的可靠性傳輸具有非常復(fù)雜的實現(xiàn)細(xì)節(jié),包括但不限于:

  • ACK 確定機制:當(dāng)接收方接收到數(shù)據(jù)段后,會返回 ACK 確認(rèn)
  • 定時重發(fā): 發(fā)送方發(fā)送數(shù)據(jù)段后,會啟動定時器,超時未接收到 ACK 確認(rèn),會重發(fā)該數(shù)據(jù)段
  • 數(shù)據(jù)校驗:接收方會對數(shù)據(jù)段進(jìn)行數(shù)據(jù)校驗,如果發(fā)現(xiàn)數(shù)據(jù)段有差錯,會將該數(shù)據(jù)段丟棄,等待超時重傳
  • 順序傳輸:TCP 字節(jié)流會為每個字節(jié)排序,確保數(shù)據(jù)傳輸順序的正確性
  • 滑動窗口:TCP 數(shù)據(jù)段長度可根據(jù)收發(fā)雙方的緩存、網(wǎng)絡(luò)等狀態(tài)而調(diào)整。接收方只允許發(fā)送方發(fā)送接收緩沖區(qū)所能接納的數(shù)據(jù),防止緩沖區(qū)溢出

數(shù)據(jù)段首部

一文讀懂 TCP/IP 網(wǎng)絡(luò)模型

  • Sequence Number 序列號:字節(jié)流中的每個字節(jié)都要按序編號,該字段值為本數(shù)據(jù)段數(shù)據(jù)部分的第一個字節(jié)的序號
  • Acknowledgment Number 確認(rèn)號:確認(rèn)序列號
  • Offset 偏移量:數(shù)據(jù)段首部的長度,字段值為首部長度除以 4
  • Reserved 預(yù)留:保留位,供今后使用
  • TCP flags 標(biāo)簽:標(biāo)識數(shù)據(jù)段性質(zhì)。
  • Window 窗口:標(biāo)識發(fā)送者接收窗口的大小
  • CheckSum 校驗值:用于檢查數(shù)據(jù)段在傳輸過程中是否出現(xiàn)差錯
  • Urgent Pointer 緊急指針:當(dāng)字段值為 1 時生效,標(biāo)識本數(shù)據(jù)段具有緊急數(shù)據(jù)

其中的 TCP Flags 字段,是非常重要的功能標(biāo)識,占 8 位,分別為:

  • C(CWR)、E(ECE):用于支持 ECN(顯示阻塞通告)
  • U(URGENT):當(dāng)值為 1 時,標(biāo)識此數(shù)據(jù)段有緊急數(shù)據(jù)(比如緊急關(guān)閉),應(yīng)優(yōu)先傳送,要與緊急指針字段配合使用
  • A(ACK):僅當(dāng)字段值為 1 時才有效,建立 TCP 連接后,所有數(shù)據(jù)段都必須把 ACK 字段值置為 1
  • P(PUSH):若 TCP 連接的一端希望另一端立即響應(yīng),PSH 字段便可以 “催促” 對方,不再等到緩存區(qū)填滿才發(fā)送返回
  • R(RESET):若 TCP 連接出現(xiàn)嚴(yán)重差錯,該字段的值置為 1,表示先斷開 TCP 連接,再重連
  • S(SYN,Synchronize Sequence Numbers):用于建立和釋放連接,當(dāng)字段值為 1 時,表示建立連接。
  • F(FIN):用于釋放連接,當(dāng)字段值為 1 時,表明發(fā)送方已經(jīng)發(fā)送完畢,要求釋放 TCP 連接

下面以三次握手和四次揮手為例,看看數(shù)據(jù)段首部是怎么進(jìn)行傳輸標(biāo)識并以此來保存可靠性的。

三次握手

一文讀懂 TCP/IP 網(wǎng)絡(luò)模型

  1. 建立連接時,客戶端發(fā)送 (SYN=1,seq=x) 數(shù)據(jù)段到服務(wù)器,然后進(jìn)入 SYN_SENT 狀態(tài)并等待服務(wù)器確認(rèn);
  2. 服務(wù)器收到 (SYN=1,seq=x) 數(shù)據(jù)段后,返回 (ACK=1, ack=x+1, SYN=1, seq=y) 數(shù)據(jù)段,服務(wù)器進(jìn)入 SYN_RECV 狀態(tài);
  3. 客戶端收到服務(wù)器的 ACK 確認(rèn)后,也會向服務(wù)器發(fā)送 ACK 確認(rèn) (ACK=1, ack=y+1),至此客戶端和服務(wù)器都進(jìn)入了 ESTABLISHED 狀態(tài)。三次握手完成,TCP 連接建立成功。

為什么要使用三次握手來保證數(shù)據(jù)傳輸?shù)目煽啃裕?/strong>
“握手” 的行為實際上為了告知收發(fā)雙方自己的 ISN(Initial Sequence Number,初始化序號),如上圖的 seq=x 或 seq=y,這個數(shù)值會被作為建立連接之后進(jìn)行順序數(shù)據(jù)傳輸?shù)囊罁?jù)。從數(shù)據(jù)段首部的 Sequence Number 和 Acknowledgment Number 都占 32 位可知,seq 和 ack 的取值范圍均為 [0, 2^32-1],順序循環(huán)使用。需要注意的是,seq 并非每次都是從 0 開始的,TCP 協(xié)議會以 4μs 一次的頻率進(jìn)行 ISN+=1 操作,以此來避免 TCP 重連時會出現(xiàn)同一條連接中存在兩個及以上 seq 相同的包,最終導(dǎo)致順序錯亂。

四次揮手

一文讀懂 TCP/IP 網(wǎng)絡(luò)模型

  1. 斷開連接時,客戶端發(fā)送 (FIN=1, seq=m) 數(shù)據(jù)段,其中 m 的數(shù)值為客戶端最后一次向服務(wù)器發(fā)送的數(shù)據(jù)段的最后一個字節(jié)的序號再加上 1,客戶端進(jìn)入 FIN-WAIT-1 狀態(tài)。
  2. 服務(wù)器接收到 (FIN=1, seq=m) 之后,返回 (ACK=1, ack=m+1, seq=n) 確認(rèn)數(shù)據(jù)段,服務(wù)器進(jìn)入 CLOSE-WAIT 狀態(tài)。
  3. 服務(wù)器再向客戶端發(fā)送 (FIN=1, seq=u, ACK=1, ack=m+1) 數(shù)據(jù)段,服務(wù)器進(jìn)入 LAST-ACK 狀態(tài)。
  4. 客戶端接收到 (FIN=1, seq=u, ACK=1, ack=m+1) 數(shù)據(jù)段后,返回 (ACK=1, ack=u+1, seq=m+1) 確認(rèn)數(shù)據(jù)段,服務(wù)器和客戶端都進(jìn)入 CLOSED 狀態(tài)。四次揮手完成,TCP 連接就此斷開。
UDP 協(xié)議

UDP(User Datagram Protocol,用戶數(shù)據(jù)報協(xié)議),是一種無連接的非可靠傳輸層協(xié)議。UDP 不提供數(shù)據(jù)包分組、組裝,不能對數(shù)據(jù)段進(jìn)行排序,所以 UDP 數(shù)據(jù)段的首部非常簡單。換句話說,當(dāng)數(shù)據(jù)段發(fā)送出去之后,發(fā)送方是無法得知其是否完整且安全的到達(dá)了接收方的。這樣的傳輸機制決定了它的最大優(yōu)點就是快,同時也決定了它最大的缺點不可靠、不穩(wěn)定。

UDP 數(shù)據(jù)段首部:

一文讀懂 TCP/IP 網(wǎng)絡(luò)模型

  • Source Port 源應(yīng)用程序端口:發(fā)送方的應(yīng)用程序端口
  • Destination Port 目的應(yīng)用程序端口:接收方的應(yīng)用程序端口
  • Length 長度:數(shù)據(jù)段的長度
  • Checksum 校驗值:用于檢查數(shù)據(jù)段在傳輸過程中是否出現(xiàn)差錯
應(yīng)用層

應(yīng)用層是直接面向用戶的,所以相對于數(shù)據(jù)傳輸?shù)募?xì)節(jié),應(yīng)用層更加關(guān)注數(shù)據(jù)的表示形式,其主要工作是定義數(shù)據(jù)格式并按照相應(yīng)的格式要求進(jìn)行數(shù)據(jù)解讀。因此,應(yīng)用層定義了各種各樣的協(xié)議來規(guī)范數(shù)據(jù)格式,常見的有 HTTP(萬維網(wǎng)), FTP(文件傳輸), SMTP(郵件) 等等。

以互聯(lián)網(wǎng)上應(yīng)用最廣泛的 HTTP(HyperText Transfer Protocol,超文本傳輸協(xié)議)為例,其數(shù)據(jù)首部格式如下:

一文讀懂 TCP/IP 網(wǎng)絡(luò)模型

如上圖標(biāo)記內(nèi)容,HTTP 規(guī)范了定義和解讀數(shù)據(jù)格式的方式:

  • 在 Request Headers 中使用 Content-Type 表示客戶端發(fā)送的數(shù)據(jù)格式類型,Accept 表示客戶端期望接受的數(shù)據(jù)格式類型
  • 在 Response Headers 中使用 Content-Type 表示服務(wù)器端響應(yīng)的數(shù)據(jù)格式類型
  • 通常 Request Accept 需要與 Response Content-Type 保持一致

總結(jié)一下,應(yīng)用層的作用主要是為計算機上的應(yīng)用程序提供服務(wù),包括提供數(shù)據(jù)格式表現(xiàn)、數(shù)據(jù)加密、遠(yuǎn)程終端會話等應(yīng)用功能。應(yīng)用層無需關(guān)心數(shù)據(jù)的傳輸細(xì)節(jié),這是分層設(shè)計帶來的好處,程序員完全可以在不了解底層協(xié)議的前提下使用應(yīng)用層的眾多協(xié)議來進(jìn)行工作。

最后

回顧總結(jié)一下:

  • 物理介質(zhì)層:是最底層的數(shù)據(jù)傳輸物理媒介
  • 數(shù)據(jù)鏈路層:通過 MAC 地址來定位本地子網(wǎng)中的主機
  • 網(wǎng)絡(luò)層:通過 IP 地址來定位不同子網(wǎng)間的主機
  • 傳輸層:通過 Port 來定位到主機上的應(yīng)用程序
  • 應(yīng)用層:為主機上不同的應(yīng)用程序提供服務(wù)

核心協(xié)議全家福

一文讀懂 TCP/IP 網(wǎng)絡(luò)模型

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多