僅供參考
五層模型(自上而下,底層->頂層)
-
實體層(物理層)
實體層的作用就是把電腦連接起來,可用光纜、電纜、雙絞線、無線電波等方式
就是傳送0和1的信號
-
鏈接層
也稱鏈路層,作用是解讀0和1
以太網協議
早期,每家公司都有自己的電信號分組方式,但是后來,一種叫做“以太網(Ethernet)”的協議逐漸占據了主導地位。
“以太網”協議規定:一組電信號構成一個數據包,稱之為“幀”(Frame)。一幀也就是個數據包分為兩個部分:首部(Head)和數據(Data)。
首部:包含該幀的一些說明(如:發送者信息、接受者信息、其他信息……),長度固定為18字節
數據:該幀的具體內容,長度最短46字節,最長1500字節。因此,一幀最短為64字節,最長1518字節
-
MAC地址
上文中,以太網數據包的“首部”,包含發送者和接受者的信息,那么發送者和接受者是如何標識的呢?
以太網協議規定:連入網絡的設備,都必須有“網卡”接口,數據包必須從一塊網卡傳送到另一塊網卡,網卡的地址,就是數據包的發送地址和接受地址。這就是MAC地址。
每張網卡出廠時,都有一個全世界獨一無二的MAC地址(長度:48個二進制位,通常用12個十六進制表示),有了獨一無二的MAC地址,就能定位網卡和數據包的路徑了。
-
廣播
即使有了MAC地址,但是系統也不能准確的把幀(以太網數據包)直接發送到接收方,所以以太網協議用了一種“廣播”方式:當要發送數據包時,向本網絡內的所有計算機發送數據包,再由計算機自己判斷自己是否是接收方(獲取以太網數據包“首部”,找到接收方的MAC地址,與本身比較),是就收,不是就丟掉。
-
-
網絡層
-
網絡層的由來
上文中的“以太網”協議,采用了“廣播”方式發送數據包是可行的。但是這樣做的缺點很明顯:網絡內的所有計算機,人手一包,不僅效率低,而且局限在發送者所在的子網絡。不同子網絡的計算機是不能“廣播”的。(互聯網中的網絡稱為“子網絡”,無數個“子網絡”共同組成一個巨型網絡)
那么我們如何發送數據包到身處不同子網絡的計算機?
“路由”可以實現(向不同子網絡發送數據包),本文不涉及。
“網絡層”誕生了,作用是引入一套新的地址,使我們能夠區分計算機是否屬於同一“子網絡”,這套地址被稱為“網絡地址”,簡稱“網址”。
網絡層誕生后,每台計算機就有了兩種地址:MAC地址(綁定在網卡),另一種是“網址”(由管理員分配)。兩者之間沒有任何聯系。
網絡地址負責確定計算機所在的子網路,MAC地址則將數據包“廣播”發送到該子網絡的目標網卡,因此,邏輯上,發送數據時先確定網絡地址,再處理MAC地址
-
IP協議
上文提到的“網絡地址”(簡稱網址)是誰規定的呢?答案是“IP協議”,被它定義的地址則被稱為“IP地址”。目前,被廣泛采用的是IP協議第四版(IPV4),此版本規定,網絡地址由32個二進制組成。(例:10101100.00010000.11111110.00000001,但習慣的,我們會把它轉成十進制:172.16.254.1)
互聯網上的每一台計算機,都會分配到一個IP地址。該地址分成兩部分:前一部分代表網絡,后一部分代表主機。(例:172.16.254.1 ,假設代表網絡的是前24位,那么網絡就是前三個數:172.16.254,而代表主機就是最后一個數:1)。對於處於一個子網絡的計算機,IP地址的網絡部分必然是相同的,即IP地址的前三個數。(如:172.16.254.1 和 172.16.254.2 是屬於同一個子網絡內的計算機)
但是網絡部分的長度不是固定的,我們不知道它的網絡部分到底是前24位,前16位,還是前28位。那么如何從IP地址判斷出兩台計算機是否屬於同一個子網絡?
這時候就要用到另一個參數“子網掩碼”了,“子網掩碼”就是表示所在的子網絡特征的一個參數,在形式上等同於IP地址,網絡部分全部為1,主機部分全部為0。(例:如果知道了子網的網絡部分是前24位,那么主機就是后8位,而子網掩碼就是:11111111.11111111.11111111.00000000,十進制:255.255.255.0),知道了兩個計算機的子網掩碼就知道了網絡部分的長度,就可以對比兩個IP地址是否處於同一子網絡中。
小總結:假設我們要發送數據包,此時我們有自己的和接收方的“IP地址、子網掩碼、MAC地址”,IP地址和子網掩碼確定自己和對方是否在同一子網絡,如果在同一子網絡,就通過ARP協議(后面有講解),獲取到同一個子網絡的主機MAC地址。然后廣播發送數據包;如果不在同一子網絡,只能去兩個子網絡連接處的“網關”,讓網關處理
-
IP數據包
根據IP協議發送的數據包就稱為IP數據包,具體地說,“IP數據包”也和“以太網數據包”一樣分為兩部分,首部和數據。“IP數據包“直接放到”以太網數據包“的”數據“部分(體現了互聯網分層結構的好處:上層的變動完全不涉及下層的結構)
-
ARP協議
當兩台計算機處於同一子網絡中時,我們可以用ARP協議,取得對方的MAC地址,ARP協議也是發出一個數據包(包含在以太網數據包之中)。
ARP數據包:包含它要查詢的主機的IP地址,在對方的MAC地址一欄則填“FF:FF:FF:FF:FF:FF”,表示這是“廣播地址”,他所在子網絡的每一台主機,都會受到這一數據欄,從中取出接收方IP地址,與自身IP地址進行比較,如果兩者相同,則發送方和接收方都告知對方自己的MAC地址。
簡而言之,ARP協議就是用來得到一個子網絡內的主機的MAC地址
-
-
傳輸層
-
傳輸層的由來
有了IP地址和MAC地址后,我們可在互聯網上的任意兩台計算機建立通信。但是有時我們許多程序都要用到網絡。如何判斷數據包是哪個程序的數據包?所以我們還需要一個參數來判斷一個數據包是屬於哪個程序的。
這個參數叫做“端口”,它其實是每一個使用網卡的程序的編號。每個數據包都發送到主機的特定端口,所以不同的程序能提取到自己需要的數據
端口(Port):065535之間的整數,正好16個二進制位,01023的端口被系統占用,用戶只能選擇大於1023的端口。程序只要使用到網卡上網,該程序會隨機選用一個端口,然后與服務器的響應端口聯系
傳輸層的功能就是建立端口與端口之間的通信,只要確定主機和端口,我們就能實現程序之間的交流
-
UDP協議
前面說到端口,現在需要把端口加入到“以太網數據包”的“數據”中。這要新的協議,格式就是在數據前面加上端口號。
UDP數據包也是由首部,數據兩部分組成。
首部:定義了發出端口和接收端口
數據:具體內容
UDP數據包很簡單,標頭部分共8個字節,總程度不超過65535字節,正好放進一個IP數據包(所以以太網數據包變成了這樣:以太網數據包>IP數據包>UDP數據包)
-
TCP協議
UDP協議有個問題:可靠性差,一旦數據發出,無法知道對方是否收到,沒法確認。
為了解決此問題,TCP誕生了,這個協議非常復雜,但幾乎可以認為,TCP就是有確認機制的UDP協議。每個數據包都要求確認,這樣也知道要不要重復發這個數據包。TCP協議能確保數據不會遺失。
TCP協議的缺點:復雜、實現困難、資源消耗多
TCP數據包和UDP數據包一樣,都內嵌在IP數據包的“數據部分”。TCP數據包沒有長度限制,理論上可以無限長,但為了保證網絡效率,通常TCP數據包的長度不會超過IP數據包的長度,以確定單個TCP數據包不必再被分割。
(所以以太網數據包變成了這樣:以太網數據包>IP數據包>UDP數據包,TCP數據包)
-
-
應用層