官术网_书友最值得收藏!

  • 一本書讀懂TCP/IP
  • 王元杰 楊波 周亞寧 陳志剛 紀旻旻
  • 8355字
  • 2019-11-22 18:56:07

1.2 TCP/IP是什么

IP世界的根本大法,是TCP/IP協(xié)議族。

IP世界是由通信實體構成的,而通信實體,是要分層的。

就如一個公司混亂的管理要進行改革一樣。我們首先思考一下一個企業(yè)最可能出現(xiàn)的管理混亂有哪些表現(xiàn)。

員工“越界”:員工不經(jīng)過部門經(jīng)理直接向公司總經(jīng)理匯報工作;秘書經(jīng)常到總經(jīng)理處指責其對公司的未來規(guī)劃缺乏經(jīng)驗。

部門經(jīng)理做“二傳手”:提交給總經(jīng)理的匯報,是員工匯報的簡單疊加;總經(jīng)理給部門經(jīng)理分配的工作,部門經(jīng)理不做思索地推給某個員工。

兩個部門之間職責不清:市場部經(jīng)理經(jīng)常指責客服部員工A,因為A沒有按照市場部經(jīng)理的要求向某個客戶提供服務,而是把有限的時間給了另外一個客戶,而這個工作是由客服部經(jīng)理指派的;采購部經(jīng)理要求市場部員工B在某個項目中必須向客戶提供聯(lián)想品牌筆記本電腦,而實際情況是,客戶要求必須使用SONY筆記本電腦但采購部經(jīng)理并不知情。

總經(jīng)理一抓到底:布置任務跳過部門經(jīng)理直接與員工溝通,而部門經(jīng)理也經(jīng)常布置任務給員工,部門經(jīng)理無從了解員工的工作量,總經(jīng)理也無法把控任務的進度。

公司與客戶接口混亂:任何人都可以向客戶隨意承諾,而承諾出來的東西又無法兌現(xiàn)。

不管你做多少培訓、增加多少職業(yè)經(jīng)理人,最終改變這種狀況的,無非是以下幾個舉措。

分層:要把總經(jīng)理——部門經(jīng)理——員工的三層結構搞清晰,每層的職責范圍明確定義。公司總經(jīng)理負責公司戰(zhàn)略和重大事務的處理;公司部門經(jīng)理負責管理部門,向公司總經(jīng)理匯報工作;公司員工負責具體事物處理,向部門經(jīng)理匯報工作。

明確層之間的關系:需要明確任何一個層面的人員,其與上下層的關系;總經(jīng)理將公司戰(zhàn)略和要求部署給每個部門經(jīng)理,每個部門經(jīng)理細化后部署給每個員工。

對等層之間的關系:需要明確任何一個層面的人員,與對等部門或對等公司的關系(對等公司如客戶和原材料供應方)。

這樣,公司都形成了三個層次的機構,每個層次都與上下層次的權責清晰明了,對外業(yè)務接口統(tǒng)一,溝通渠道通暢,業(yè)務流程規(guī)范。

通信實體也必須分出層次,以保證各種網(wǎng)絡技術能和諧地共存和良好地配合,并不斷激勵技術創(chuàng)新。通信網(wǎng)的分層,與公司的組織結構極其相似。加入通信網(wǎng)中的各個實體就好比一個個公司,比如路由器是一個通信實體,某個通信軟件(如瀏覽器或者QQ)是一個通信實體,網(wǎng)絡游戲的服務器軟件和用戶端軟件都是通信實體。這些實體必須滿足以下要求。

要分出若干層次,管理上類似的功能要放在同一層,在實現(xiàn)技術經(jīng)常變化的地方增加層次,每個層次有自己的職責。

要明確每個層次與上下層的關系,層次之間的邊界要合理,使層次間的信息流量盡量最小且容易規(guī)范。

兩個實體之間要明確每個層面之間的關系。

1.OSI RM(開放系統(tǒng)互連參考模型)

基于上述要求,國際標準化組織(ISO)于1984年建立了一套非常抽象的分層結構,這就是著名的ISO/OSI(國際標準化組織的開放網(wǎng)絡架構)。與其說這是一個通信標準,不如說這是一種管理哲學。任何事物之間的聯(lián)系都可以用OSI表示出來,雖然不是所有的事物都必須具備其所有的層面(通信網(wǎng)本身大部分實體也不具備其所有層面),但是這對我們分析事物是非常有幫助的。

兩個通信實體可以友好合作、充分信任,但是也可以不互相信,可以打架、罵人,但是它們必須能互相理解對方說的是什么。

就像兩國沖突,他們可以打若干年的仗,但是必須都具有能互相理解的語言展開外交辭令,可以和談、破裂,可以下戰(zhàn)書、聲明、抗議。如果沒有統(tǒng)一的能互相理解的語言,那叫雞同鴨講。

為了讓兩個通信實體保持最基本的溝通,在“層”的基礎上,專家們定義了“協(xié)議”、“標準”和“規(guī)范”。

我們把這7層OSI結構與實現(xiàn)生活中的“說話”聯(lián)系起來,有助于大家對OSI的理解,如表1.1所示。

表1.1 OSI參考模型

(1)物理層

物理層就像人與人溝通中的能夠互相聽懂的“發(fā)音”。物理層解決最基礎的傳送通道,涉及問題主要是建立、維護和釋放物理鏈路所需的機械的、電氣的/光學的、功能的和規(guī)程的特性,如光纜如何抗衰耗,無線設備如何提高發(fā)射功率,為什么雙絞線要有屏蔽層等。

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

有了發(fā)音,才能有“字”或者“詞”,對于說錯的話,要盡快予以糾正;如果不能很好地糾正,就要重新把話再說一遍。

接下來,我們開始考慮在物理層提供的按“位”服務的基礎上,在相鄰的網(wǎng)絡節(jié)點之間提供簡單的、傳輸以幀為單位的數(shù)據(jù),同時它還負責數(shù)據(jù)鏈路的流量控制、差錯控制。

首先,數(shù)據(jù)鏈路層為網(wǎng)絡層提供“簡單”的通信鏈路,通信實體所在的系統(tǒng)必須經(jīng)過物理介質直接相連——當然,這物理介質可以是有線的銅纜或者光纜,也可以是無線的微波。

大家要理解,這條鏈路不具備任何路徑選擇和轉發(fā)功能,你可以把它僅僅理解為“一條封閉的路”,除了兩端,沒有額外出入口。

數(shù)據(jù)鏈路層將物理層提供的比特流組成“幀”,也就是說,把發(fā)送方發(fā)出來的若干“位”的數(shù)據(jù)組成一組,加上“開始”“結束”標志和與檢錯有關的代碼等,形成有固定格式的數(shù)據(jù)幀——這有點像把貨物放入標準集裝箱中,正因為集裝箱的體積、尺寸都是標準的,最后所有的集裝箱看起來非常整齊,搬運和船載過程也會變得有序和規(guī)范。

本層要提供一定的差錯檢驗和糾正機制。信號會因機械、電氣等原因,出現(xiàn)錯誤,如將“0”“1”顛倒,丟失一個“0”或“1”,或者因為外界干擾而多出一位數(shù)字。接收者根據(jù)檢錯代碼就可以判斷收到的數(shù)據(jù)幀是否有錯誤,并在可能的情況下糾正錯誤。不能糾正的錯誤可以選擇重傳。

這里面很有學問。發(fā)送的信息,接收方是不清楚的。但是如何讓接收方知道發(fā)送過來的信息有錯誤呢?對付這種問題,數(shù)據(jù)鏈路層有應對策略。

假如我們運送的不是數(shù)據(jù)信息而是貨物,運送工具不是幀而是車。這個問題怎么處理?

發(fā)貨方出貨前,將附帶一張“裝箱單”,單子上標明了這車貨物的相關參數(shù),比如重量、體積、品質,接收方只需要稱重量、測體積以及檢驗品質,并和裝箱單上的數(shù)據(jù)做對比,即可判斷運送過程中是否出現(xiàn)錯誤或者失誤。

數(shù)據(jù)幀傳送也有類似裝箱單一樣的信息,存儲在“糾錯字節(jié)”中。當數(shù)據(jù)幀到達目的地,它會對自身進行計算,計算結果和糾錯字節(jié)中的內容進行對比。如果一致,進行下一步操作。如果不一致呢?這個類似“裝箱單”的糾錯字節(jié)就能夠很快將錯誤檢測出來并進行相應處理(比如進行重傳)。

以太網(wǎng)就屬于這一層。所以你會經(jīng)常聽到“以太網(wǎng)幀”這一術語。

(3)網(wǎng)絡層

我們繼續(xù)分析日常說話的方式。說話應該有目標、內容和語速,向誰說,通過誰轉述,說什么,以多快的速度說。網(wǎng)絡層所干的工作,就是進行路由選擇、擁塞控制和網(wǎng)絡互聯(lián)。

網(wǎng)絡層對自己的上級——傳輸層,可以提供兩種服務,一種叫作“面向連接”的網(wǎng)絡服務,一種叫作“無連接”的網(wǎng)絡服務——這有點像有軌交通和無軌交通。

有軌交通的特點是,車輛沿著特定軌道行駛,自出發(fā)點到目的地,路線、速度基本確定。面向連接的服務也有類似特點。

無軌交通的特點是,車輛走一站看一站,線路、速度均不確定。無連接的服務與此驚人一致。

圖1.5 面向連接與無連接服務

這兩者的區(qū)別,直接導致相關技術體制的巨大差異。面向連接的服務關注于如何建立鏈路,而無連接的服務則專注于在每一站建立一套詳盡的路由表。

傳統(tǒng)IP技術就是無連接服務,而改造為MPLS(多協(xié)議標簽交換)網(wǎng)絡后,就屬于面向連接的服務了。

網(wǎng)絡層擔負著的四大任務如下。

路由選擇。任何數(shù)據(jù)包都不可能在網(wǎng)絡上像無頭的蒼蠅亂跑亂撞,而網(wǎng)絡層的關鍵任務是發(fā)現(xiàn)路由、選擇路徑,有時,也負責地址轉換。它就像一個警察,在網(wǎng)絡節(jié)點這樣的“十字路口”管理來來往往的數(shù)據(jù)包,數(shù)據(jù)包的路徑選擇就是我們經(jīng)常提到的“路由選擇”。各種路由協(xié)議、MPLS的流量工程都與路由選擇有關。

擁塞控制。后文會專門介紹擁塞發(fā)生的原理。網(wǎng)絡層可以采用擁塞控制機制,盡量避免擁塞的發(fā)生,如果真的發(fā)生擁塞,也要通過多種途徑緩解擁塞狀況(比如丟棄一些數(shù)據(jù),或者進行緩存)。

局域網(wǎng)間互聯(lián)。數(shù)據(jù)包在局域網(wǎng)間穿梭,會面臨諸如包大小、網(wǎng)絡速度,甚至協(xié)議的差異,這些都是網(wǎng)絡層要解決的,就是通過一定的調整,讓兩個網(wǎng)絡之間的數(shù)據(jù)包成功的傳遞。

統(tǒng)計和控制。如統(tǒng)計哪些用戶需要的網(wǎng)絡流量比較多,訪問哪些站點比較頻繁,或者禁止或控制用戶訪問某些站點;記賬功能一般也在網(wǎng)絡層解決。

網(wǎng)絡層最知名的協(xié)議就是IP。

(4)傳輸層

要保證別人聽到你說的話,不能“想當然”。

傳輸層的任務是向用戶提供可靠的、透明的端到端的數(shù)據(jù)傳輸,以及差錯控制和流量控制機制。由于它的存在,網(wǎng)絡硬件技術的任何變化對高層都是不可見的,也就是說會話層、表示層、應用層的設計不必考慮低層細節(jié),因此傳輸層起到“承上啟下”的作用。

所謂“端到端”是相對鏈接而言的。

各位讀者要記住一個概念,OSI參考模型的四層到七層屬于端到端的方式,而一到三層屬于鏈接的方式。在傳輸層,通信雙方的兩機器之間,有一對應用程序或進程直接對話,它們并不關心低層的實現(xiàn)細節(jié)。低層的鏈接方式就不一樣,它要負責處理通信鏈路中的任何相鄰機器之間的通信。假如兩臺計算機A和B要通信,那么A和B之間可以進行直接的傳輸層的通信,而在A和B之間如果有若干網(wǎng)絡節(jié)點,如路由器X、Y、Z,那么A與X、X與Y、Y與Z、Z與B之間都要進行低三層的通信。

傳輸層通過邏輯接口向高層提供服務。服務的類型是在連接建立時確定的,最重要的服務是端到端的、可靠的、面向連接的字節(jié)流服務——這里已經(jīng)不是“位流”(也稱“比特流”)了。

一般情況下,傳輸層為每一條傳輸連接生成一條第三層的網(wǎng)絡鏈接,但也有例外:需要高吞吐率的傳輸連接可以同時占用多條網(wǎng)絡鏈接。

傳輸層有一項很有趣的工作——流量控制,通過技術手段,使字節(jié)流均勻、穩(wěn)定。當然,這不是必需的。

大名鼎鼎的TCP和UDP就屬于傳輸層。

(5)會話層

說話要有開始、過程和終止。在不同的機器之間提供會話進程的通信,如建立、管理和拆除會話進程。你可能要考慮這個話是在大庭廣眾之下說還是專門對某個人說,或者是說一句等對方答復后再說下一句。

會話層還提供了許多增值服務,如交互式對話管理,允許一路交互、兩路交換和兩路同時會話;管理用戶登錄遠程分時系統(tǒng);在兩機器之間傳輸文件,進行同步控制等。

(6)表示層

有些話要以悄悄話的形式,避免第三者聽到;有些話,要簡單明了,不要拖泥帶水。表示層就處理通信進程之間交換數(shù)據(jù)的表示方法,包括語法轉換、數(shù)據(jù)格式的轉換、加密與解密、壓縮與解壓縮等。

(7)應用層

有了上面所列的網(wǎng)絡層次,你已經(jīng)把要說的話通過聲帶的震動,一字一句、清晰明了地地告訴了你的某個好朋友,并且保證他聽到了,沒有讓第三者聽到。你明確地讓對方知道,你的談話何時開始以及何時結束。

應用層就負責管理應用程序之間的通信。

應用層是OSI參考模型的最高層,低層所有協(xié)議的最終目的都是為應用層提供可靠的傳送手段,低層協(xié)議并沒有直接滿足用戶的任何實際需求。我們日常使用的收發(fā)電子郵件、傳送文件、瀏覽網(wǎng)頁、交互即時信息、播放網(wǎng)絡視頻等都屬于應用層的范疇,這是用戶體驗最直觀的服務。

OSI是哲學,而不僅僅是技術!

通信“層”的概念,讓各種協(xié)議、規(guī)范、標準變得有所不同——它們更靈活但可控,更開放但不混亂,更清晰但不拘束。上面的論述會讓一些讀者覺得乏味,但是如果你能夠緊密結合通信網(wǎng)絡的一些實際應用,并類比生活中的例子,你會發(fā)現(xiàn)其實枯燥中蘊含著無窮樂趣,你也會發(fā)現(xiàn),其實分層是一種哲學而非技術。

2. TCP/IP(傳輸控制協(xié)議/網(wǎng)際協(xié)議)

在《倚天屠龍記》中,張無忌為什么做不成皇帝,而朱元璋卻可以?那是張無忌心太軟,他不愛江山愛美人的性格不適合當皇帝。“優(yōu)勝劣汰,適者生存”是一條永恒不變的法則,OSI由于體系比較復雜,不太方便計算機軟件實現(xiàn),逐漸退出人們關注的視野,TCP/IP得到了廣泛的應用。

TCP/IP是Internet的核心技術,是由IETF定義的。所有的系統(tǒng)、終端、線路、用戶、開發(fā)者,都必須遵守TCP/IP協(xié)議族所規(guī)定的法則,否則,將不被IP世界所接受。

圖1.6 OSI與TCP/IP參考模型對照圖

對比ISO/OSI的七層結構,看完上面的圖,讀者會奇怪了:怎么沒有表示層和會話層呢?他們到哪里去了?

在TCP/IP分層結構中,的確沒有表示層和會話層,也就是說OSI規(guī)定的這兩層,在TCP/IP中并不是必需的。

還有一種五層的說法,將網(wǎng)絡接口層分為物理層和數(shù)據(jù)鏈路層兩層,這樣有利于數(shù)據(jù)通信的分析。TCP/IP體系結構中最核心的部分是上面的三層:應用層、傳輸層和互聯(lián)網(wǎng)層(也稱網(wǎng)絡層),互聯(lián)網(wǎng)層以下的層次沒有制定相關標準,蘿卜咸菜各有所愛,至于最下面的是一層還是兩層,這都不太重要。我們建議提到分層模型時按四層來分,在進行數(shù)據(jù)通信時按五層來分析。

說到《快樂大本營》,你會立刻想到何炅,謝娜,其實快樂大本營是一個節(jié)目組,不僅包括主持人,還有導演、攝像、錄音等其他工作人員。TCP/IP也是一個組,是一個協(xié)議組,不僅包括TCP、IP,還包括HTTP、TELNET、FTP、RIP、OSPF、BGP、UDP、ARP、pop3等,只不過TCP/IP這個名字來源于協(xié)議族中最主要的兩個協(xié)議——TCP(傳輸控制協(xié)議)和IP(網(wǎng)際協(xié)議)。各個層次分別對應著不同的協(xié)議,如圖1.7所示。

圖1.7 TCP/IP分層協(xié)議

下面,分別介紹各層的主要功能。

(1)網(wǎng)絡接口層也稱為數(shù)據(jù)鏈路層,TCP/IP并沒有嚴格定義該層,它只是要求能夠提供給其上層——網(wǎng)絡層一個訪問接口,以便在其上傳遞IP分組。由于這一層次未被定義,所以其具體的實現(xiàn)方法將隨著網(wǎng)絡類型的不同而不同。以太網(wǎng)是IP通信中數(shù)據(jù)鏈路層最常見的形式,除此之外還有PPP、HDLC等。10Gbit/s以下的以太網(wǎng)一般應用于局域網(wǎng),而PPP、HDLC則應用于廣域網(wǎng)范圍內居多。

(2)網(wǎng)絡層(Internet Layer)俗稱IP層,它處理機器之間的通信。IP是一個不可靠的、無連接協(xié)議,它接受來自傳輸層的請求,傳輸某個具有目的地址信息的分組。該層把分組封裝到IP數(shù)據(jù)報中,填入數(shù)據(jù)報的首部(也稱為報頭),使用路由算法來選擇是直接把數(shù)據(jù)報發(fā)送到目標機還是把數(shù)據(jù)報發(fā)送給路由器,然后把數(shù)據(jù)報交給下面的網(wǎng)絡接口層中的對應網(wǎng)絡接口模塊。IP負責給互聯(lián)網(wǎng)的每一臺計算機或者終端分配一個地址,并將信息以IP包的形式傳送到正確的目的地。這是TCP/IP的核心。IP協(xié)議族中最關鍵的是路由協(xié)議。除此之外還有ICMP,被用來傳送IP的控制信息。我們熟知的Ping和Traceroute命令就出自ICMP。

(3)傳輸層:傳輸控制協(xié)議(Transmission Control Protocol,TCP)和用戶數(shù)據(jù)報協(xié)議(User Datagram Protocol,UDP)是該層的重要協(xié)議。TCP是一個面向連接的、可靠的協(xié)議。它將一臺主機發(fā)出的字節(jié)流無差錯地發(fā)往互聯(lián)網(wǎng)上的其他主機。在發(fā)送端,它負責把上層傳送下來的字節(jié)流分成報文段并傳遞給下層。在接收端,它負責把收到的報文進行重組后遞交給上層。TCP還要處理端到端的流量控制。UDP是一個不可靠的、無連接協(xié)議,主要適用于不需要對報文進行排序和流量控制的場合。大家注意一下,在數(shù)通試題中,會經(jīng)常涉及TCP、IP、UDP可靠不可靠,連接無連接的內容。

圖1.8 TCP/IP層的協(xié)議族

3.TCP報文格式

TCP報文包括首部(報頭)和數(shù)據(jù)部分,其中首部的具體字段如下。

圖1.9 TCP報文

(1)源端口和目的端口字段——各占16bit。端口是傳輸層與應用層的服務接口。

(2)序號字段——SEQ序號,占32bit。TCP連接中傳送的數(shù)據(jù)流中的每一個字節(jié)都編上一個序號。序號字段的值則指的是本報文段所發(fā)送的數(shù)據(jù)的第一個字節(jié)的序號。

(3)確認序號:ACK序號,占32 bit,是期望收到對方的下一個報文段的數(shù)據(jù)的第一個字節(jié)的序號。只有ACK標志位為1時,確認序號字段才有效,ACK=SEQ+1。

(4)標志位:共6個,即URG、ACK、PSH、RST、SYN、FIN等,具體含義如下。

緊急比特 URG——當 URG=1 時,表明緊急指針(urgent pointer)字段有效。它告訴系統(tǒng)此報文段中有緊急數(shù)據(jù),應盡快傳送(相當于高優(yōu)先級的數(shù)據(jù))。

確認比特ACK——只有當ACK=1時確認號字段才有效。當 ACK=0時,確認號無效。

推送比特PSH(PuSH)——接收TCP收到推送比特置1的報文段,就盡快地交付給接收應用進程,而不再等到整個緩存都填滿了后再向上交付。

復位比特 RST(ReSeT)——當RST=1時,表明TCP連接中出現(xiàn)嚴重差錯(如由于主機崩潰或其他原因),必須釋放連接,然后再重新建立運輸連接。

同步比特SYN——同步比特SYN置為1,就表示這是一個連接請求或連接接受報文。

終止比特 FIN(FINal)——用來釋放一個連接。當FIN=1時,表明此報文段的發(fā)送端的數(shù)據(jù)已發(fā)送完畢,并要求釋放運輸連接。

需要注意的是:不要將確認序號ACK與標志位中的ACK搞混了;確認方ACK=發(fā)起方SEQ+1,兩端配對。

(5)數(shù)據(jù)偏移——占4bit,它指出TCP報文段的數(shù)據(jù)起始處距離TCP報文段的起始處有多遠。

(6)窗口字段——占16bit。窗口字段用來控制對方發(fā)送的數(shù)據(jù)量,單位為字節(jié)。TCP連接的一端根據(jù)設置的緩存空間大小確定自己的接收窗口大小,然后通知對方以確定對方的發(fā)送窗口的上限。

(7)檢驗和——占16bit。檢驗和字段檢驗的范圍包括首部和數(shù)據(jù)這兩部分。在計算檢驗和時,要在TCP報文段的前面加上12字節(jié)的偽首部。

(8)緊急指針字段——占16bit。緊急指針指出在本報文段中的緊急數(shù)據(jù)的最后一個字節(jié)的序號。

(9)選項字段——長度可變。TCP只規(guī)定了一種選項,即最大報文段長度MSS(Maximum Segment Size)。MSS告訴對方TCP:“我的緩存所能接收的報文段的數(shù)據(jù)字段的最大長度是 MSS 個字節(jié)。”

(10)保留字段——占6bit,保留為今后使用,但目前應置為0。

4.TCP的三次握手和四次揮手

TCP的連接和建立都是采用客戶服務器方式。主動發(fā)起連接建立的應用進程叫作客戶(Client)。被動等待連接建立的應用進程叫作服務器(Server)。

建立TCP需要三次握手才能建立,而斷開連接則需要四次揮手。整個過程如圖1.10所示。

圖1.10 TCP建立連接、傳輸數(shù)據(jù)、釋放連接

(1)三次握手

在TCP/IP中,采用三次握手建立一個連接,連接過程就像打電話的過程,如圖1.11所示。

圖1.11 三次握手

第一次握手:Client(主機A)向Server(主機B)發(fā)送一個連接請求,在這個包中,標志位SYN=1,發(fā)送序號SEQ=x,上圖中x=200,Client進入SYN_SEND狀態(tài),等待Server確認。

第二次握手:Server收到數(shù)據(jù)包后由標志位SYN=1知道Client請求建立連接,Server將標志位SYN和ACK都置為1,確認序號ACK=x+1=201,隨機產生一個發(fā)送序號SEQ=y,上圖中y=500,并將該數(shù)據(jù)包發(fā)送給Client以確認連接請求,Server進入SYN_RCVD狀態(tài)。

第三次握手:Client收到確認后,檢查確認序號ACK是否為x+1=201,標志位ACK是否為1,如果正確,則將標志位ACK置為1,確認序號ACK=y+1=501,并將該數(shù)據(jù)包發(fā)送給Server,Server檢查確認序號ACK是否為y+1=501,標志位ACK是否為1,如果正確則連接建立成功,Client和Server進入ESTABLISHED狀態(tài)。

完成三次握手,客戶端與服務器開始傳送數(shù)據(jù)。

(2)四次揮手

四次揮手(Four-Way Wavehand)即終止TCP連接,就是指斷開一個TCP連接時,需要客戶端和服務端總共發(fā)送4個包以確認連接的斷開,如圖1.12所示。

圖1.12 四次揮手

第一次揮手:當客戶A要斷開TCP連接時,發(fā)送一個包,其中標志位fin=1,ACK=1,發(fā)送序號SEQ=x,確認序號ACK=y,上圖中x=200,y=500。Client進入FIN_WAIT_1狀態(tài)。

第二次揮手:客戶B知道A要斷開后,發(fā)送一個確認包,其中標志位ACK=1發(fā)送序號,SEQ=y確認序號ACK=x+1=201,Server進入CLOSE_WAIT狀態(tài)。

第三次揮手:客戶B也斷開TCP連接,此時發(fā)送一個包,其中,標志位fin=1,發(fā)送序號SEQ=y+1=501,Server進入LAST_ACK狀態(tài)。

第四次揮手:客戶A收到B的斷開請求后,Client進入TIME_WAIT狀態(tài),接著發(fā)送一個確認包,標志位ACK=1,發(fā)送序號SEQ=x+1=201,確認序號ACK=y+2=502;Server進入CLOSED狀態(tài)。

由于TCP連接是全雙工的,因此,每個方向都必須要單獨進行關閉,這一原則是當一方完成數(shù)據(jù)發(fā)送任務后,發(fā)送一個FIN來終止這一方向的連接,收到一個FIN只是意味著這一方向上沒有數(shù)據(jù)流動了,即不會再收到數(shù)據(jù)了,但是在這個TCP連接上仍然能夠發(fā)送數(shù)據(jù),直到這一方向也發(fā)送了FIN。

5.TCP/IP協(xié)議體系常見術語

(1)包

包(Packet)是網(wǎng)絡上傳輸?shù)臄?shù)據(jù)片段,也稱分組。包是一種統(tǒng)稱,在不同的協(xié)議不同的層次,包有不同的名字,如TCP/IP中,數(shù)據(jù)鏈路層的包叫幀(Frame),IP層的包稱為IP數(shù)據(jù)報,TCP層的包常稱為TCP報文等。大多數(shù)包都由包頭和信息組成:包頭常常包括諸如源和目的地址、包的長度和類型指示符等信息;信息部分可以是原始數(shù)據(jù),也可以包含另一個包。

(2)封裝

不同設備的對等層之間依靠封裝和解封裝來實現(xiàn)相互間的通信。封裝就像洗完澡光著身子穿衣服,解封裝就像洗澡前脫衣服,脫了一層又一層直到脫光。

TCP/IP也是一種計算機數(shù)據(jù)打包和尋址的標準方法。在數(shù)據(jù)傳送中,可以形象地理解為有兩個信封,TCP和IP就像是信封,要傳遞的信息被劃分成若干段,每一段塞入一個TCP信封,并在該信封面上記錄有分段號的信息,再將TCP信封塞入IP大信封,發(fā)送上網(wǎng)。在接受端,一個TCP軟件包收集信封,抽出數(shù)據(jù),按發(fā)送前的順序還原,并加以校驗,若發(fā)現(xiàn)差錯,TCP將會要求重發(fā)。因此,TCP/IP在互聯(lián)網(wǎng)中幾乎可以無差錯地傳送數(shù)據(jù)。

在通信過程中,TCP/IP每一層都讓數(shù)據(jù)得以通過網(wǎng)絡進行傳輸,這些層之間使用協(xié)議數(shù)據(jù)單元(Protocol Data Unit,PDU)彼此交換信息,確保網(wǎng)絡設備之間能夠通信。不同層的PDU中包含有不同的信息,因此PDU在不同層被賦予了不同的名稱。如圖1.13所示,傳輸層在上層數(shù)據(jù)中加入TCP報頭后得到的PDU被稱為數(shù)據(jù)段(Segment);數(shù)據(jù)段被傳遞給網(wǎng)絡層,網(wǎng)絡層添加IP報頭得到的PDU被稱為數(shù)據(jù)包(Packet);數(shù)據(jù)包被傳遞到數(shù)據(jù)鏈路層,封裝數(shù)據(jù)鏈路層報頭得到的PDU被稱為數(shù)據(jù)幀(Frame);最后,幀被轉換為比特,通過網(wǎng)絡介質傳輸。這種協(xié)議棧向下傳遞數(shù)據(jù),并添加報頭和報尾的過程稱為封裝。數(shù)據(jù)被封裝并通過網(wǎng)絡傳輸后,接收設備將刪除添加的信息,并根據(jù)報頭中的信息決定如何將數(shù)據(jù)沿協(xié)議棧上傳給合適的應用程序,這個過程稱為解封裝。

圖1.13 主機通信過程

主站蜘蛛池模板: 平和县| 比如县| 西藏| 东明县| 巴青县| 清水县| 伊吾县| 澎湖县| 三河市| 宝清县| 鸡东县| 互助| 新宾| 通海县| 扶风县| 施甸县| 柳州市| 靖安县| 永昌县| 玉屏| 南川市| 麻江县| 荆州市| 亳州市| 石家庄市| 贡嘎县| 湖南省| 张家港市| 陵水| 卓资县| 会宁县| 即墨市| 湘潭市| 卓尼县| 通化市| 枣强县| 繁昌县| 盐山县| 霍山县| 南部县| 甘谷县|