溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

深入淺出TCP/IP協(xié)議棧

發(fā)布時間:2020-07-11 20:32:36 來源:網(wǎng)絡 閱讀:384 作者:xmgdc 欄目:網(wǎng)絡安全

TCP/IP協(xié)議棧是一系列網(wǎng)絡協(xié)議的總和,是構成網(wǎng)絡通信的核心骨架,它定義了電子設備如何連入因特網(wǎng),以及數(shù)據(jù)如何在它們之間進行傳輸。TCP/IP協(xié)議采用4層結構,分別是應用層、傳輸層、網(wǎng)絡層和鏈路層,每一層都呼叫它的下一層所提供的協(xié)議來完成自己的需求。由于我們大部分時間都工作在應用層,下層的事情不用我們操心;其次網(wǎng)絡協(xié)議體系本身就很復雜龐大,入門門檻高,因此很難搞清楚TCP/IP的工作原理,通俗一點講就是,一個主機的數(shù)據(jù)要經(jīng)過哪些過程才能發(fā)送到對方的主機上。 那我們就來探索一下這個過程:

深入淺出TCP/IP協(xié)議棧

 

0、物理介質(zhì)

物理介質(zhì)就是把電腦連接起來的物理手段,常見的有光纖、雙絞線,以及無線電波,它決定了電信號(0和1)的傳輸方式,物理介質(zhì)的不同決定了電信號的傳輸帶寬、速率、傳輸距離以及抗干擾性等等。

TCP/IP協(xié)議棧分為四層,每一層都由特定的協(xié)議與對方進行通信,而協(xié)議之間的通信最終都要轉(zhuǎn)化為0和1的電信號,通過物理介質(zhì)進行傳輸才能到達對方的電腦,因此物理介質(zhì)是網(wǎng)絡通信的基石。網(wǎng)絡通信就像送快遞一樣,用戶買的商品被一層層包裹就是各種協(xié)議,協(xié)議描述了商品的大小、收件人、聯(lián)系方式以及配送地址,而實際的配送交通工具就是物理介質(zhì)。其次對于一些偏遠的地方,快遞是不能直達的,需要中途轉(zhuǎn)發(fā),這時候快遞上的各種協(xié)議就起作用了,它記錄了要轉(zhuǎn)發(fā)的地址、攬件人信息等,這就是TCP/IP搞這么多協(xié)議的作用。下面我們通過一張圖先來大概了解一下TCP/IP協(xié)議的數(shù)據(jù)流:

深入淺出TCP/IP協(xié)議棧

當用戶通過http發(fā)起一個請求時,應用層、傳輸層、網(wǎng)絡層和鏈路層的相關協(xié)議依次對該請求進行包裝并攜帶對應的首部,最終在鏈路層生成以太網(wǎng)數(shù)據(jù)包,以太網(wǎng)數(shù)據(jù)包通過物理介質(zhì)傳輸給對方主機,對方接收到數(shù)據(jù)包以后,然后再一層一層采用對應的協(xié)議進行拆包,最后把應用層數(shù)據(jù)交給應用程序處理。

有了整體概念以后,下面就詳細講一下其每一層的分工以及對應的協(xié)議:

1、鏈路層

網(wǎng)絡通信就是把有特定意義的數(shù)據(jù)通過物理介質(zhì)傳送給對方,單純的發(fā)送0和1是沒有意義的,因此就需要對0和1進行分組,并且要標識好每一組電信號的信息特征,然后按照分組的順序依次發(fā)送。以太網(wǎng)規(guī)定一組電信號就是一個數(shù)據(jù)包,一個數(shù)據(jù)包被稱為一幀, 制定這個規(guī)則的協(xié)議就是以太網(wǎng)協(xié)議。一個完整的以太網(wǎng)數(shù)據(jù)包如下圖所示:

深入淺出TCP/IP協(xié)議棧

整個數(shù)據(jù)幀由首部數(shù)據(jù)尾部三部分組成,首部固定為14個字節(jié),包含了目標MAC地址、源MAC地址和類型;數(shù)據(jù)最短為46個字節(jié),最長為1500個字節(jié),如果需要傳輸?shù)臄?shù)據(jù)很長,就必須分割成多個幀進行發(fā)送;尾部固定為4個字節(jié),表示數(shù)據(jù)幀校驗序列,用于確定數(shù)據(jù)包在傳輸過程中是否損壞。因此,以太網(wǎng)協(xié)議通過對電信號進行分組并形成數(shù)據(jù)幀,然后通過物理介質(zhì)把數(shù)據(jù)幀發(fā)送給接收方。那么以太網(wǎng)如何來識接收方的身份呢?

以太網(wǎng)規(guī)協(xié)議定,接入網(wǎng)絡的設備都必須安裝網(wǎng)絡適配器,即網(wǎng)卡, 數(shù)據(jù)包必須是從一塊網(wǎng)卡傳送到另一塊網(wǎng)卡。而網(wǎng)卡地址就是數(shù)據(jù)包的發(fā)送地址和接收地址,也就是幀首部所包含的MAC地址,MAC地址是每塊網(wǎng)卡的身份標識,就如同我們×××上的×××號碼,具有全球唯一性。MAC地址采用十六進制標識,共6個字節(jié), 前三個字節(jié)是廠商編號,后三個字節(jié)是網(wǎng)卡流水號,例如 4C-0F-6E-12-D2-19

有了MAC地址以后,以太網(wǎng)采用廣播形式,把數(shù)據(jù)包發(fā)給該子網(wǎng)內(nèi)所有主機,子網(wǎng)內(nèi)每臺主機在接收到這個包以后,都會讀取首部里的目標MAC地址,然后和自己的MAC地址進行對比,如果相同就做下一步處理,如果不同,就丟棄這個包。

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

2、網(wǎng)絡層

對于上面的過程,有幾個細節(jié)問題值得我們思考:

  • 發(fā)送者如何知道接收者的MAC地址?

  • 發(fā)送者如何知道接收者和自己同屬一個子網(wǎng)?

  • 如果接收者和自己不在同一個子網(wǎng),數(shù)據(jù)包如何發(fā)給對方?

為了解決這些問題,網(wǎng)絡層引入了三個協(xié)議,分別是IP協(xié)議、ARP協(xié)議、路由協(xié)議。

2.1 、IP協(xié)議

通過前面的介紹我們知道,MAC地址只與廠商有關,與所處的網(wǎng)絡無關,所以無法通過MAC地址來判斷兩臺主機是否屬于同一個子網(wǎng)。

因此,網(wǎng)絡層引入了IP協(xié)議,制定了一套新地址,使得我們能夠區(qū)分兩臺主機是否同屬一個網(wǎng)絡,這套地址就是網(wǎng)絡地址,也就是所謂的IP地址。

IP地址目前有兩個版本,分別是IPv4IPv6,IPv4是一個32位的地址,常采用4個十進制數(shù)字表示。IP協(xié)議將這個32位的地址分為兩部分,前面部分代表網(wǎng)絡地址,后面部分表示該主機在局域網(wǎng)中的地址。由于各類地址的分法不盡相同,以C類地址192.168.24.1為例,其中前24位就是網(wǎng)絡地址,后8位就是主機地址。因此, 如果兩個IP地址在同一個子網(wǎng)內(nèi),則網(wǎng)絡地址一定相同。為了判斷IP地址中的網(wǎng)絡地址,IP協(xié)議還引入了子網(wǎng)掩碼, IP地址和子網(wǎng)掩碼通過按位與運算后就可以得到網(wǎng)絡地址。

由于發(fā)送者和接收者的IP地址是已知的(應用層的協(xié)議會傳入), 因此我們只要通過子網(wǎng)掩碼對兩個IP地址進行AND運算后就能夠判斷雙方是否在同一個子網(wǎng)了。

2.2、ARP協(xié)議

即地址解析協(xié)議,是根據(jù)IP地址獲取MAC地址的一個網(wǎng)絡層協(xié)議。其工作原理如下:

ARP首先會發(fā)起一個請求數(shù)據(jù)包,數(shù)據(jù)包的首部包含了目標主機的IP地址,然后這個數(shù)據(jù)包會在鏈路層進行再次包裝,生成以太網(wǎng)數(shù)據(jù)包,最終由以太網(wǎng)廣播給子網(wǎng)內(nèi)的所有主機,每一臺主機都會接收到這個數(shù)據(jù)包,并取出標頭里的IP地址,然后和自己的IP地址進行比較,如果相同就返回自己的MAC地址,如果不同就丟棄該數(shù)據(jù)包。ARP接收返回消息,以此確定目標機的MAC地址;與此同時,ARP還會將返回的MAC地址與對應的IP地址存入本機ARP緩存中并保留一定時間,下次請求時直接查詢ARP緩存以節(jié)約資源。cmd輸入 arp -a 就可以查詢本機緩存的ARP數(shù)據(jù)。

2.3、路由協(xié)議

通過ARP協(xié)議的工作原理可以發(fā)現(xiàn),ARP的MAC尋址還是局限在同一個子網(wǎng)中,因此網(wǎng)絡層引入了路由協(xié)議,首先通過IP協(xié)議來判斷兩臺主機是否在同一個子網(wǎng)中,如果在同一個子網(wǎng),就通過ARP協(xié)議查詢對應的MAC地址,然后以廣播的形式向該子網(wǎng)內(nèi)的主機發(fā)送數(shù)據(jù)包;如果不在同一個子網(wǎng),以太網(wǎng)會將該數(shù)據(jù)包轉(zhuǎn)發(fā)給本子網(wǎng)的網(wǎng)關進行路由。網(wǎng)關是互聯(lián)網(wǎng)上子網(wǎng)與子網(wǎng)之間的橋梁,所以網(wǎng)關會進行多次轉(zhuǎn)發(fā),最終將該數(shù)據(jù)包轉(zhuǎn)發(fā)到目標IP所在的子網(wǎng)中,然后再通過ARP獲取目標機MAC,最終也是通過廣播形式將數(shù)據(jù)包發(fā)送給接收方。

而完成這個路由協(xié)議的物理設備就是路由器,在錯綜復雜的網(wǎng)絡世界里,路由器扮演者交通樞紐的角色,它會根據(jù)信道情況,選擇并設定路由,以最佳路徑來轉(zhuǎn)發(fā)數(shù)據(jù)包。

2.4、IP數(shù)據(jù)包

在網(wǎng)絡層被包裝的數(shù)據(jù)包就叫IP數(shù)據(jù)包,IPv4數(shù)據(jù)包的結構如下圖所示:

深入淺出TCP/IP協(xié)議棧

IP數(shù)據(jù)包由首部和數(shù)據(jù)兩部分組成,首部長度為20個字節(jié),主要包含了目標IP地址和源IP地址,目標IP地址是網(wǎng)關路由的線索和依據(jù);數(shù)據(jù)部分的最大長度為65515字節(jié),理論上一個IP數(shù)據(jù)包的總長度可以達到65535個字節(jié),而以太網(wǎng)數(shù)據(jù)包的最大長度是1500個字符,如果超過這個大小,就需要對IP數(shù)據(jù)包進行分割,分成多幀發(fā)送。

所以,網(wǎng)絡層的主要工作是定義網(wǎng)絡地址,區(qū)分網(wǎng)段,子網(wǎng)內(nèi)MAC尋址,對于不同子網(wǎng)的數(shù)據(jù)包進行路由。

3、傳輸層

鏈路層定義了主機的身份,即MAC地址, 而網(wǎng)絡層定義了IP地址,明確了主機所在的網(wǎng)段,有了這兩個地址,數(shù)據(jù)包就從可以從一個主機發(fā)送到另一臺主機。但實際上數(shù)據(jù)包是從一個主機的某個應用程序發(fā)出,然后由對方主機的應用程序接收。而每臺電腦都有可能同時運行著很多個應用程序,所以當數(shù)據(jù)包被發(fā)送到主機上以后,是無法確定哪個應用程序要接收這個包。因此傳輸層引入了UDP協(xié)議來解決這個問題,為了給每個應用程序標識身份,UDP協(xié)議定義了端口,同一個主機上的每個應用程序都需要指定唯一的端口號,并且規(guī)定網(wǎng)絡中傳輸?shù)臄?shù)據(jù)包必須加上端口信息。 這樣,當數(shù)據(jù)包到達主機以后,就可以根據(jù)端口號找到對應的應用程序了。UDP定義的數(shù)據(jù)包就叫做UDP數(shù)據(jù)包,結構如下所示:

深入淺出TCP/IP協(xié)議棧

UDP數(shù)據(jù)包由首部和數(shù)據(jù)兩部分組成,首部長度為8個字節(jié),主要包括源端口和目標端口;數(shù)據(jù)最大為65527個字節(jié),整個數(shù)據(jù)包的長度最大可達到65535個字節(jié)。

UDP協(xié)議比較簡單,實現(xiàn)容易,但它沒有確認機制, 數(shù)據(jù)包一旦發(fā)出,無法知道對方是否收到,因此可靠性較差,為了解決這個問題,提高網(wǎng)絡可靠性,TCP協(xié)議就誕生了,TCP即傳輸控制協(xié)議,是一種面向連接的、可靠的、基于字節(jié)流的通信協(xié)議。簡單來說TCP就是有確認機制的UDP協(xié)議,每發(fā)出一個數(shù)據(jù)包都要求確認,如果有一個數(shù)據(jù)包丟失,就收不到確認,發(fā)送方就必須重發(fā)這個數(shù)據(jù)包。

為了保證傳輸?shù)目煽啃裕琓CP協(xié)議在UDP基礎之上建立了三次對話的確認機制,也就是說,在正式收發(fā)數(shù)據(jù)前,必須和對方建立可靠的連接。由于建立過程較為復雜,我們在這里做一個形象的描述:

  • 主機A:我想發(fā)數(shù)據(jù)給你,可以么?

  • 主機B:可以,你什么時候發(fā)?

  • 主機A:我馬上發(fā),你接著!

經(jīng)過三次對話之后,主機A才會向主機B發(fā)送正式數(shù)據(jù),而UDP是面向非連接的協(xié)議,它不與對方建立連接,而是直接就把數(shù)據(jù)包發(fā)過去了。所以TCP能夠保證數(shù)據(jù)包在傳輸過程中不被丟失,但美好的事物必然是要付出代價的,相比UDP,TCP實現(xiàn)過程復雜,消耗連接資源多,傳輸速度慢。

TCP數(shù)據(jù)包和UDP一樣,都是由首部和數(shù)據(jù)兩部分組成,唯一不同的是,TCP數(shù)據(jù)包沒有長度限制,理論上可以無限長,但是為了保證網(wǎng)絡的效率,通常TCP數(shù)據(jù)包的長度不會超過IP數(shù)據(jù)包的長度,以確保單個TCP數(shù)據(jù)包不必再分割。

總結一下,傳輸層的主要工作是定義端口,標識應用程序身份,TCP協(xié)議還可以通過保證數(shù)據(jù)傳輸?shù)目煽啃?/strong>。

4、應用層

 理論上講,有了以上三層協(xié)議的支持,數(shù)據(jù)已經(jīng)可以從一個主機上的應用程序傳輸?shù)搅硪慌_主機的應用程序了,但此時傳過來的數(shù)據(jù)是字節(jié)流,不能很好的被程序識別,操作性差,因此,應用層定義了各種各樣的協(xié)議來定義和規(guī)范數(shù)據(jù)格式,常見的有http,ftp,smtp等,http是一種比較常用的應用層協(xié)議,主要用于B/S架構之間的數(shù)據(jù)通信,其報文格式如下:

深入淺出TCP/IP協(xié)議棧

在請求Header中,分別定義了請求數(shù)據(jù)格式Accept 和 相應數(shù)據(jù)格式Content-Type,有了這個規(guī)范以后,當對方接收到請求以后就知道該用什么格式來解析,然后對請求進行處理,最后按照請求方要求的格式講數(shù)據(jù)返回,請求端接收到響應后,就按照規(guī)定的格式進行解讀。

所以應用層的主要工作就是定義數(shù)據(jù)格式并按照對應的格式解讀數(shù)據(jù)。

5、總結

最后,我們梳理一下每層模型的職責:

  • 鏈路層:對0和1進行分組,定義數(shù)據(jù)幀,確認主機的物理地址,傳輸數(shù)據(jù);

  • 網(wǎng)絡層:定義IP地址,確認主機所在的網(wǎng)絡位置,并通過IP進行MAC尋址,對外網(wǎng)數(shù)據(jù)包進行路由轉(zhuǎn)發(fā);

  • 傳輸層:定義端口,確認主機上應用程序的身份,并將數(shù)據(jù)包交給對應的應用程序;

  • 應用層:定義數(shù)據(jù)格式,并按照對應的格式解讀數(shù)據(jù)。

把以上職責用通俗易懂的話講就是:當你輸入一個網(wǎng)址并按下回車鍵的時候,首先,應用層協(xié)議對該請求包做了格式定義;緊接著傳輸層協(xié)議加上了雙方的端口號,確認了雙方通信的應用程序;然后網(wǎng)絡協(xié)議加上了雙方的IP地址,確認了雙方的網(wǎng)絡位置;最后鏈路層協(xié)議加上了雙方的MAC地址,確認了雙方的物理位置,同時將數(shù)據(jù)進行分組,形成數(shù)據(jù)幀,采用廣播方式,通過傳輸介質(zhì)發(fā)送給對方主機,而對于不同網(wǎng)段,該數(shù)據(jù)包首先會轉(zhuǎn)發(fā)給網(wǎng)關路由器,經(jīng)過多次轉(zhuǎn)發(fā)后,最終被發(fā)送到目標主機。目標機接收到數(shù)據(jù)包后,采用對應的協(xié)議,對幀數(shù)據(jù)進行組裝,然后再通過一層一層的協(xié)議進行解析,最終被應用層的協(xié)議解析并交給服務器處理。

以上內(nèi)容是對TCP/IP四層模型做了簡單的介紹,而實際上每一層模型都有很多協(xié)議,每個協(xié)議要做的事情也很多,但我們首先得有一個清晰的脈絡結構,掌握每一層模型最基本的作用,然后在去豐富細枝末節(jié)的東西,也許會更容易理解。

 


 


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI