2021-05-12 14:32:11
關於TCP/IP協定棧概述以及基本內容
入門知識
講講我這個小菜鳥是如何從對網路一竅不通到現在可以完整的說出一個報文是如何轉發的初級水平,先看一下TCP/IP的介紹:
Transmission Control Protocol/Internet Protocol的簡寫,中譯名為傳輸控制協定/因特網互聯協定,又名網路通訊協定,是Internet最基本的協定、Internet國際網際網路絡的基礎,由網路層的IP協定和傳輸層的TCP協定組成。TCP/IP 定義了電子裝置如何連入因特網,以及資料如何在它們之間傳輸的標準。協定採用了4層的層級結構,每一層都呼叫它的下一層所提供的協定來完成自己的需求。通俗而言:TCP負責發現傳輸的問題,一有問題就發出信號,要求重新傳輸,直到所有資料安全正確地傳輸到目的地。而IP是給因特網的每一台聯網裝置規定一個地址。
如此深奧的解釋,相信沒幾個人能看的懂。。。,其實你可以簡單理解為,網際網路傳輸是分層的,就像蓋房子一樣,一層累一層。
舉個簡單的例子,就拿我們平時最常見的上網,開啟瀏覽器,輸入www.baidu.com,瀏覽器上就會顯示百度的介面,可能一秒都不到的時間,事實上我們的報文已經走了個來回。這麼說還是有點抽象,但是要給大家講的一點就是,在網際網路的世界,一切的資料都是以報文的形式傳送的,而這份報文,大致是長這樣的:
你可能過會說,這是什麼玩意,但事實上報文就是這麼的不講道理,如果你面對的是這樣一個個十六進位制的字元,恐怕會瘋的,因為你根本無從下手,所以我們需要分層次清晰得劃分一下報文的結構,劃分的層次如下:
那為什麼要叫TCP/IP協定棧內,這些協定和棧有甚麼關係呢,大家應該都知道棧是一種先進後出的資料結構,那這和TCP/IP協定有什麼關係呢?我們就拿一個HTTP報文來說吧,HTTP報文屬於應用層協定的報文,我們輸入網址,首先會呼叫到DNS協定(域名協定,後面會講到),然後把我們輸入的網址轉換為IP地址,這個IP地址大致就相當於現實生活中每個人的身份證一樣,是每個網頁唯一的標識,關於IP地址,後續我會詳細介紹,IP協定屬於網路層的協定。
我們先將HTTP報文壓入一個棧中(就好像是在分裝報文),然後是IP,不對,我們貌似漏了一個傳輸層啊,別急別介,HTTP報文在傳輸層用的是TCP協定,好,我們把TCP壓入棧中,再講IP層也壓入棧中,至於鏈路層的話,就用最常見的乙太網就OK了,好了,現在我們的棧裡面從頭至尾依次是以太幀頭-IP協定-TCP協定-HTTP協定,然後我們先忽略最底層的物理層,假設這個封裝好的棧一樣的報文漂洋過海,來到了它的目的地(至於怎麼過來的,我們後續也會講到),當對端收到這個報文以後,也就是我們封裝好的這個棧一樣的東西以後該怎麼辦呢?
會不會也是先拿HTTP呢?因為這個報文是我們構造的一個棧,所以說它的順序肯定也是棧,因此拿取的順序就是以太幀頭-IP協定-TCP協定-HTTP協定,發現沒,最先被封裝入的HTTP報文是最後才被拿出來的,這中間的細節如果能全部掌握,那基本商就算是入門了,關於這部分東西,我會在後面詳細介紹,現在有這個概念就可以了。
回顧一下,寫的有點亂,總結起來就是網際網路是分層的,協定是如何層層遞進封裝和解分裝的,記得大學裡計算機網路是自頂向下,也就是先從應用層講起,我覺得這樣不太好,所以我會從底層講起,也就是自底向上的學習順序,一步步解開網路的神秘面紗!
IP地址
先簡單回顧一下,TCP/IP協定棧:
資料鏈路層->網路層->傳輸層->應用層
如果為每一層加上一個ID,就像每個人都有身份證那樣,那麼可以這樣標記:
資料鏈路層(MAC地址)
網路層(IPV4地址,以下簡稱IP地址)
傳輸層、應用層(埠)
這樣的標籤並不能完全概括這一層所有特徵,但是如果掌握這些標示,就相當於是一把鑰匙,可以讓你快速開啟這一層協定的“大門”。
和我們生活關係最密切的IP地址:
作為網路層的標識,IP地址這個概念可以說大家肯定都有耳聞,IP地址是一個32位元的二進位制數,32位元是個什麼概念呢?相當於是4個位元組,學過C語言的同學應該知道,一個int型資料就是32位元,那麼IP地址的個數應該就是int的最大值4294967296,看上去很多是不是,有43億呢,但是在網際網路爆炸式發展的今天,這點IP地址還真的不夠分,因此IPV6因運而生,這都是後話,以後有機會在介紹。
試想一下,某個IP地址是:11000000101010000000000100000001
是不是看著有點暈,沒辦法,我們看慣了10進位制的1,2,3,10,99之類的,看這些二進位制數真是覺得極不友好,讓你去背這樣一個IP地址,估計得好久,而且估計記住沒多久就會忘了,因此我們隊IP地址採取一種特殊的表示方式——點分十進位制表示法,上面的二進位制IP地址轉換後是:192.168.1.1,是不是很眼熟,這是大家在設定無線路由器時進入設定介面的IP地址。
說完IP地址的表示方式,我們再說一下IP地址的分類,IP地址通常分為5類:
A類地址 (1.0.0.0—127.255.255.255)
B類地址 (128.0.0.0—191.255.255.255)
C類地址 (192.0.0.0—223.255.255.255)
D類地址 (224.0.0.0 - 239.255.255.255)
E類地址 (240.0.0.0 - 255.255.255.254)
每一類地址後面就是其範圍,如果只是死記硬背,那樣不太好,只有知道這些地址都是如何分類的,才能更好地記住。
IP地址可以簡單看成是由網路號和主機號組成的,但具體多少位網路號,多少位主機號,不同類別的IP地址有不同的劃分情況:
A類地址:8位元網路號,24位元主機號
B類地址:16位元網路號,16位元主機號
C類地址:24位元網路號,8位元主機號
網路號是由ICANN統一分配的,而主機號則由該網路端的系統管理員進行分配的,有時候為了更好地劃分網路,還可以將主機號細化,分配成主機地址+子網地址的形式,也就是子網劃分。
當我們知道每一類地址的組成之後,相應的其範圍也就非常明確了,就以網路號分配來看,A類地址要佔到8位元,因此其IP地址的首位肯定是0,這樣它就吧00000000 - 01111111 (0 - 127)之間所有的網路號都佔滿,好了,A佔滿以後該B類地址了,B類地址雖然是16位元的,但是你不能去搶A類地址的網路號是不,因此它的網路號的範圍就是128-191,可以發現B類地址的前兩位固定都是10,依次類推,C類地址的前三位就是110,所以其範圍就是192-223.
IP地址的劃分大致就是這樣,作為網路層最重要的線索,我們會在之後的講解中一步步介紹IP地址以及它所指向的網路層!
路由器簡介
網路層轉發最為重要的裝置-路由器,講到路由器,大家可能並不陌生,每家每戶現在應該都有路由器,你可能以為我會介紹像這樣的路由器:
image
這種無線路由器,每家每戶現在應該都有,畢竟有了它,才能有無線網用是不~,但事實上我要介紹的不是這種路由器,而是下面這種大家可能沒見過,但對我們上網來說更為重要的路由器:
image
大家一定覺得很陌生,畢竟TP-LINK已經深入人心,而這些長得像冰箱或者箱子的東西也能和路由器掛上鉤?實際上如果沒有這些路由器,咱們也就沒辦法愉快地上網了,舉個簡單的例子,普通的無線路由器,能夠承載的流量峰值大概是300M,而圖片上這些大型路由器,每一個埠,最小的承載能力也能達到10G,而一台大型的路由器,像這樣的埠沒有數千,也有上百,所以說這樣的裝置顯然不是為某個家庭服務的,甚至一個小區也不在話下,它可以承載的業務,至少是一個城市,甚至整個省,甚至一個小型的國家,也只需要幾十台這樣的裝置,就可以滿足大家的上網需求,因此這樣的裝置一般都是為運營商提供的,比如說電信,移動,聯通之類。
之所以要介紹這樣的大型路由器,只是為了讓大家有這麼一個概念,大致了解一下,因為後面涉及到的路由器,都是這樣的路由器,大家只需要知道運營商用的是這樣的大型路由器就OK了。
好了,言歸正傳,我們先看一下路由器的主要功能是什麼:
路由器的主要功能是路由選擇和報文轉發,這種功能的實現需用到路由協定。
路由協定是路由器之間維護路由表的規則,用於發現路由,並生成相應的路由表,同時知道報文的轉發。路由???議決定路由表中存放那些路由資訊。
簡單點說,路由器的功能就是兩點:路由,轉發。其中路由就是說經過路由器的報文,決定它的去向,當然僅僅知道報文去哪兒是不行的,路由器還需要將報文傳送到相應的位置,這樣才算完成一次報文的轉發,通俗點說就是,路由器對收到的報文,會做兩件事,其中一件是根據路由表(後面會介紹到,是路由轉發最重要的表項),決定它的去處,緊接著第二件事就是將報文轉發過去。
後面我們會陸續介紹網路層究竟是如何轉發報文的,而這一節對路由器的介紹,算是一種鋪墊,寫得也比較簡單,大家只需要知道,路由器要做路由和轉發這兩件事就OK了。
IP協定解析
通過之前的網路層基礎知識,IP地址以及路由器的簡介,大家應該對於TCP/IP有一個大致的了解,在腦海裡應該對於網路的幾個基礎概念有個大概的了解,簡單點說整個協定棧就是在做一件事,規定網路報文(網路傳輸中的資料包)的傳送和接收,而整個協定棧內的協定,也是可以分為之前介紹過的鏈路層-》網路層-》傳輸層-》應用層,在這每一層中都有很多不同的協定,但是最常用的協定,每一層就是一到兩種,所以想學協定,先從每一層最常見,最常用的開始學起:
- 鏈路層——乙太網、VLAN
- 網路層——IP協定
- 傳輸層——TCP/UDP協定
- 應用層——HTTP協定
上面的幾種協定,如果都能熟練掌握,那基本上就是入門並且偏上的水平了,所以接下來我們就逐一介紹各個協定。
上面就是IP報文的模板,其中IP首部一般為20位元組,也就是圖中的第1行到第5行,第6行為可選欄位,後續的就是報文所攜帶的資料。我們重點介紹IP首部,可以看到,每一行是4個位元組,也就是32位元,而對於每一行我們又根據位數分為不同的欄位,先來看看每個欄位具體的含義:
第一段:
- 4位元版本號:取值為4時代表IPV4協定,取值為6時代表IPV6協定
- 4位元首部長度:單位是4位元組,一般取值為5
- 8位元ToS欄位:這個欄位比較特殊,它相當於是報文的優先順序或者是報文的服務型別,用來區分報文的業務型別,對於裝置做QoS有著重大的意義。
- 16位元總長度:代表這一個IP報文總的長度,後面我們會介紹一個MTU時會介紹該欄位。
第二段:
- 16位元標示符:用來唯一標記這一份IP報文
第三段:
- 8位元生存週期TTL欄位:報文的生存週期,報文每經過一次轉發,該欄位值減1,當減為0時,丟棄該報文。
- 8位元協定:代表著這份IP報文承載著何種上層傳輸協定或者網路協定,常見的取值與對應關係如下:
- ICMP協定
- IGMP協定
- TCP協定
- UDP協定
- IGRP協定
- 16位元首部校驗和:用於檢驗收到的報文是否有差錯。
第四段:
- 32位元源IP地址:傳送方IP地址
第五段:
- 32位元目的IP地址:接收方IP地址
介紹完IP報文的格式以後,我們再來說一下IP報文的特點,其主要特點有以下幾點:
- IP報文具有不可靠性,即不能傳送方傳送報文後,不保證接收方一定能收到該報文。
- IP報文的不保序性,既然IP報文是不靠靠的,那相應的,它也不保證傳送出的報文的順序性,也許發包順序是1、2、3,但是收包順序可能就是3、2、1
- IP報文的分片,若傳送報文資料過大,則涉及到報文分片。
綜上所述,我們對IP協定有一個大致的了解。
相關文章