文章目錄
- 網絡協定基礎01
-
- 網絡協定分層
-
- 應用層
- 傳輸層
- 網絡層
- 資料鍊路層
- 實體層
- IP
-
- IP基本認識
-
- IP的作用
- IP與MAC的關系
- IP位址的基礎知識
-
- IP位址的定義
- IP位址分類
- 公有IP與私有IP位址
- IP位址與路由控制
- IP協定相關技術
-
- DNS域名解析
- ARP與RARP協定
- DHCP動态擷取IP位址
- NAT網絡位址轉換
- ICMP網際網路控制封包協定
網絡協定基礎01
網絡協定分層
對于同一台裝置上的程序間通信,有很多種方式,比如有管道、消息隊列、共享記憶體、信号等方式,而對于不同裝置上的程序間通信,就需要網絡通信,而裝置是多樣性的,是以要相容多種多樣的裝置,就協商出了一套通用的網絡協定。
我們把網絡協定按照它們各自的作用和職責由上往下分成五層。
- 應用層
- 傳輸層
- 網絡層
- 資料鍊路層
- 實體層
應用層
最上層也就是我們能直接接觸到的就是應用層,平時電腦或手機使用的應用軟體都是在應用層實作。當兩個不同裝置的應用需要通信的時候,應用就把應用資料傳給下一層,也就是傳輸層。
是以,應用層隻需要專注于為使用者提供應用功能,不用去關心資料是如何傳輸的。就類似于,我們寄快遞的時候,隻需要把包裹交給快遞員,由他負責運輸快遞,我們不需要關心快遞是如何被運輸的。而且應用層是工作在作業系統中的使用者态,傳輸層及以下則工作在核心态。
傳輸層
應用層的資料包會傳給傳輸層,傳輸層則反過來為應用層提供網絡支援。
在傳輸層會有兩個傳輸協定,分别是 TCP 和 UDP。
- TCP 的全稱叫傳輸層控制協定( Transmission Control Protocol ),大部分應用使用的正是 TCP 傳輸層協定,比如 HTTP 應用層協定。TCP 相比 UDP 多了很多特性,比如流量控制、逾時重傳、擁塞控制等,這些都是為了保證資料包能可靠地傳輸給對方。
- UDP 就相對很簡單,簡單到隻負責發送資料包,不保證資料包是否能抵達對方,但它實時性相對更好,傳輸效率也高。當然,UDP 也可以實作可靠傳輸,把 TCP 的特性在應用層上實作就可以,不過要實作一個商用的可靠 UDP 傳輸協定,也不是一件簡單的事情。
應用需要傳輸的資料可能會非常大,如果直接傳輸就不好控制,是以當傳輸層的資料包大小超過 MSS(TCP 最大封包段長度) ,就要将資料包分塊,這樣即使中途有一個分塊丢失或損壞了,隻需要重新發送這一個分塊,而不用重新發送整個資料包。在TCP 協定中,我們把每個分塊稱為一個 TCP 段。
當裝置作為接收方時,傳輸層則要負責把資料包傳給應用,但是一台裝置上可能會有很多應用在接收或者傳輸資料,是以需要用一個編号将應用區分開來,這個編号就是端口。
比如 80 端口通常是 Web 伺服器用的, 22 端口通常是 SSH 遠端登入伺服器用的。而對于浏覽器(用戶端)中的每個标簽欄都是一個獨立的程序,作業系統會為這些程序配置設定臨時的端口号。由于傳輸層的封包中會攜帶端口号,是以接收方可以識别出該封包是發送給哪個應
用。
網絡層
實際應用場景中的網絡環節是錯綜複雜的,中間有各種各樣的線路和分叉路口,如果一個裝置的資料要傳輸給另一個裝置,就需要在各種各樣的路徑和節點進行選擇。傳輸層的設計理念是簡單、高效、專注,隻需要服務好應用即可,讓其作為應用間資料傳輸的媒介,幫助實作應用到應用的通信,而實際的傳輸功能就交給下一層,也就是網絡層。
網絡層最常使用的是 IP 協定,IP 協定會将傳輸層的封包作為資料部分,再加上 IP 標頭組裝成 IP 封包,如果 IP 封包大小超過 MTU(以太網中一般為 1500 位元組)就會再次進行分片,得到一個即将發送到網絡的 IP 封包。
網絡層負責将資料從一個裝置傳輸到另一個裝置,世界上那麼多裝置,又該如何找到對方呢?是以,網絡層需要有區分裝置的編号。
我們一般用 IP 位址給裝置進行編号,對于 IPv4 協定, IP 位址共 32 位,分成了四段,每段是 8 位。隻有一個單純的 IP 位址雖然做到了區分裝置,但是尋址起來就特别麻煩,全世界那麼多台裝置,難道一個一個去比對?這顯然不太現實。
是以,需要将 IP 位址分成兩種意義:
- 一個是網絡号,負責辨別該 IP 位址是屬于哪個子網的;
- 一個是主機号,負責辨別同一子網下的不同主機;
在區分中需要配合子網路遮罩才能算出 IP 位址 的網絡号和主機号。在尋址的過程中,先比對到相同的網絡号,才會去找對應的主機。
除了尋址能力, IP 協定還有另一個重要的能力就是路由。實際場景中,兩台裝置并不是用一條網線連接配接起來的,而是通過很多網關、路由器、交換機等衆多網絡裝置連接配接起來的,那麼就會形成很多條網絡的路徑,是以當資料包到達一個網絡節點,就需要通過算法決定下一步走哪條路徑。
是以,IP 協定的尋址作用是告訴我們去往下一個目的地該朝哪個方向走,路由則是根據「下一個目的地」選擇路徑。尋址更像在導航,路由更像在操作方向盤。
資料鍊路層
資料傳輸的實際場景中不僅可以在同一個網絡中裝置間進行傳輸,也可以跨網絡進行傳輸。一旦資料需要跨網絡傳輸,就需要有一個裝置同時在兩個網絡當中,這個裝置一般是路由器,而路由器可以通過路由表計算出下一個要去的 IP 位址。
資料鍊路層可以辨別網絡中的裝置,讓資料在一個鍊路中傳輸,它主要為網絡層提供鍊路級别傳輸的服務。
每一台裝置的網卡都會有一個 MAC 位址,它就是用來唯一辨別裝置的。路由器計算出了下個目的地的IP 位址,再通過 ARP 協定找到該目的地的 MAC 位址,這樣就知道這個 IP 位址是哪個裝置的了。
實體層
當資料準備要從裝置發送到網絡時,需要把資料包轉換成電信号,讓其可以在實體媒體中傳輸,這一層就是實體層,它主要是為資料鍊路層提供二進制傳輸的服務。
IP
IP基本認識
IP的作用
IP在TCP/IP參考模型中處于第三層,也就是網絡層。網絡層的主要作用是:實作主機與主機之間的通信,也叫點對點通信。
IP與MAC的關系
IP 的作用是主機之間通信的,而 MAC 的作用則是實作「直連」的兩個裝置之間通信,而 IP 則負責在「沒有直連」的兩個網絡之間進行通信傳輸。是以需要「資料鍊路層」和「網絡層」這個分層才能實作向最終目标位址的通信。并且在網絡中資料包傳輸中,源IP位址和目标IP位址在傳輸過程中是不會變化的,隻有源 MAC 位址和目标 MAC 一直在變化。
IP位址的基礎知識
IP位址的定義
在 TCP/IP 網絡通信時,為了保證能正常通信,每個裝置都需要配置正确的 IP 位址,否則無法實作正常的通信。
IP 位址(IPv4 位址)由 32 位正整數來表示,IP 位址在計算機是以二進制的方式處理的。人們為了友善記憶采用了點分十進制的标記方式,也就是将 32 位 IP 位址以每 8位為組,共分為 4 組,每組以「 . 」隔開,再将每組轉換成十進制。
IPv4二進制 | 11000000 | 10101000 | 00000001 | 00000001 |
---|---|---|---|---|
IPv4十進制 | 192 | 168 | 1 | 1 |
點分十進制 | 192. | 168. | 1. | 1 |
是以IP位址的最大值也就是
a 32 = 4294967296 a^{32}=4294967296 a32=4294967296
也就說,最大允許 43 億台計算機連接配接到網絡。實際上,IP 位址并不是根據主機台數來配置的,而是以網卡配置。像伺服器、路由器等裝置都是有 2 個以上的網卡,而每塊網卡可以配置設定一個以上的IP位址,也就是說它們會有 2 個以上的 IP 位址。
IP位址分類
IP 位址分類成了 5 種類型,分别是 A 類、B 類、C 類、D 類、E 類。
-
什麼是 A、B、C 類位址?
對于 A、B、C 類主要分為兩個部分,分别是網絡号和主機号。
-
A、B、C 分類位址最大主機個數是如何計算的呢?
最大主機個數要看主機号的位數,如 C 類位址的主機号占 8 位,那麼 C 類位址的最大主機個數就為:
2 8 − 2 = 254 2^8-2=254 28−2=254
在 IP 位址中,有兩個 IP 是特殊的,分别是主機号全為 1 和 全為 0 位址。
- 主機号全為 1 指定某個網絡下的所有主機,用于廣播
- 主機号全為 0 指定某個網絡
-
什麼是 D、E 類位址?
D類和E類位址是沒有主機号的,是以不可用于主機 IP,D 類常被用于多點傳播,E類是預留的分類,暫時未被使用。
-
IP 分類的優點
不管是路由器還是主機解析到一個 IP 位址時候,我們判斷其 IP 位址的首位是否為0,為 0 則為 A 類位址;如果IP位址的首位為1,則判斷第二位是否為0,為0則為B類位址;如果IP位址的第二位為1,則判斷第三位是否為0,為0則為C類位址;如果IP位址的第三位為1,則判斷第四位是否為0,為0則為D類位址;這樣就能很快的找出網絡位址和主機位址。
是以,這種分類位址的優點就是簡單明了、選路(基于網絡位址)簡單。
公有IP與私有IP位址
在 A、B、C 分類位址上,實際上有分公有 IP 位址和 私有 IP 位址。
平時我們辦公室、家裡、學校用的 IP 位址,一般都是
私有 IP 位址
。因為這些位址允許組織内部的 IT 人員自己管理、自己配置設定,而且可以重複。
而
公有 IP 位址
則是有組織統一配置設定的,并且公有 IP 位址基本上要在整個網際網路範圍内保持唯一。
IP位址與路由控制
IP位址的網絡位址這一部分是用于進行路由控制。
路由控制表中記錄着網絡位址與下一步應該發送至路由器的位址,在主機和路由器上都會有各自的路由器控制表。
在發送 IP 包時,首先要确定 IP 包首部中的目标位址,再從路由控制表中找到與該位址具有相同網絡位址的記錄,根據該記錄将 IP 包轉發給相應的下一個路由器。如果路由控制表中存在多條相同網絡位址的記錄,就選擇相同位數最多的網絡位址,也就是最長比對。
-
環回位址不會流向網絡
環回位址是在同一台計算機上的程式之間進行網絡通信時所使用的一個預設位址。
計算機使用一個特殊的 IP 位址 127.0.0.1 作為環回位址,與該位址具有相同意義的是一個叫做 localhost 的主機名。
使用這個 IP 或主機名時,資料包不會流向網絡。
IP協定相關技術
與IP 協定相關的重要且常見的技術有:
- DNS 域名解析
- ARP 與 RARP 協定
- DHCP 動态擷取 IP 位址
- NAT 網絡位址轉換
- ICMP 網際網路控制封包協定
DNS域名解析
我們在上網的時候,通常使用的方式域名,而不是 IP 位址,因為域名友善人們記憶。實作這一技術的就是 DNS 域名解析,DNS 可以将域名網址自動轉換為具體的 IP位址。
-
域名的層級關系
DNS 中的域名都是用句點來分隔的,比如
www.baidu.com
,這裡的句點代表了不同層次之間的界限。
在域名中,越靠右的位置表示其層級越高。
根域是在最頂層,它的下一層就是 com 頂級域,再下面是 server.com。
是以域名的層級關系類似一個樹狀結構:
- 根 DNS 伺服器
- 頂級域 DNS 伺服器
- 權威 DNS 伺服器
根域的 DNS 伺服器資訊儲存在網際網路中所有的 DNS 伺服器中。這樣一來,任何DNS 伺服器就都可以找到并通路根域 DNS 伺服器了。
是以,用戶端隻要能夠找到任意一台 DNS 伺服器,就可以通過它找到根域 DNS 伺服器,然後再一路順藤摸瓜找到位于下層的某台目标 DNS 伺服器。
-
域名解析的工作流程
浏覽器會首先檢視自己的緩存裡有無,如果沒有就向作業系統的緩存查詢,還沒有就會檢查本機域名解析檔案
,如果還是沒有,就會 DNS 伺服器進行查詢,查詢的過程如下:hosts
- 用戶端首先會發出一個DNS請求,詢
的IP,并發給本地DNS伺服器(也就是用戶端的TCP/IP設定中填寫的DNS伺服器位址)。www.server.com
- 本地域名伺服器收到用戶端的請求後,如果緩存裡的表格能找到
,則它直接傳回IP位址。如果沒有,本地DNS會向更高層級的的根域名伺服器查詢。根域名伺服器是最高層次的,它不直接用于域名解析,但能指明一條道路。www.server.com
- 根DNS收到來自本地DNS的請求後,發現後置是.com,會傳回
域名歸屬的.com頂級域名伺服器位址。www.server.com
- 本地DNS收到頂級域名伺服器的位址後,發起請求查詢
的IP位址。www.server.com
- 頂級域名伺服器接收到請求後會發送負責
區域的權威 DNS 伺服器的位址。www.server.com
- 本地DNS于是向權威DNS伺服器發起請求查詢
對應的IP位址。www.server.com
- 權威DNS伺服器查詢後将對應的IP位址
傳回給本地DNS。X.X.X.X
- 本地DNS再将 IP 位址傳回用戶端,用戶端和目标建立連接配接。
- 用戶端首先會發出一個DNS請求,詢
ARP與RARP協定
在傳輸一個IP資料報的時候,确定了源IP位址和目标IP位址後,就會通過主機「路由表」确定IP資料包下一跳。然而,網絡層的下一層是資料鍊路層,是以我們還要知道「下一跳」的MAC位址。
由于主機的路由表中可以找到下一條的 IP 位址,是以可以通過ARP協定,求得下一跳的MAC位址。
-
那麼ARP又是如何知道對方MAC位址的呢?
簡單地說,ARP是借助ARP請求與ARP響應兩種類型的包确定MAC位址的。
- 主機會通過廣播發送ARP請求,這個包中包含了想要知道的MAC位址的主機IP位址。
- 當同個鍊路中的所有裝置收到ARP請求時,會去拆開ARP請求包裡的内容,如果ARP請求包中的目标IP位址與自己的IP位址一緻,那麼這個裝置就将自己的MAC位址塞入ARP響應包傳回給主機。
作業系統通常會把第一次通過ARP擷取的MAC位址緩存起來,以便下次直接從緩存中找到對應IP位址的MAC位址。
不過,MAC 位址的緩存是有一定期限的,超過這個期限,緩存的内容将被清除。
-
RARP 協定
ARP協定是已知IP位址求MAC位址,而RARP協定正好相反。它是已知 MAC 位址求 IP 位址。
通常這需要架設一台RARP伺服器,在這個伺服器上注冊裝置的MAC位址及其IP位址。然後再将這個裝置接入到網絡,接着:
- 該裝置會發送一條「我的 MAC 位址是XXXX,請告訴我,我的IP位址是什麼」的請求資訊。
- RARP伺服器接到這個消息後傳回「MAC位址為XXXX的裝置,IP位址為XXXX」的資訊給這個裝置。
DHCP動态擷取IP位址
DHCP在生活中我們是很常見的了,PC通常都是通過DHCP動态擷取IP位址,大大省去了配IP資訊繁瑣的過程。
DHCP工作流程:
-
用戶端首先發起DHCP發現封包的IP資料報,由于用戶端沒有IP位址,也不知道DHCP伺服器的位址,是以使用的是UDP廣播通
信,其使用的廣播目的位址是 255.255.255.255(端口 67) 并且使用 0.0.0.0(端口 68) 作為源 IP 位址。DHCP 用戶端将該 IP 資料報傳遞給鍊路層,鍊路層然後将幀廣播到所有的網絡中裝置。
- DHCP伺服器收到DHCP發現封包時,用DHCP提供封包向用戶端做出響應。該封包仍然使用IP廣播位址 255.255.255.255,該封包資訊攜帶伺服器提供可租約的IP位址、子網路遮罩、預設網關、DNS伺服器以及IP位址租用期。
- 用戶端收到一個或多個伺服器的DHCP提供封包後,從中選擇一個伺服器,并向選中的伺服器發送DHCP請求封包進行響應,回顯配置的參數。
- 最後,服務端用DHCP ACK封包對DHCP請求封包進行響應,應答所要求的參數。
一旦用戶端收到DHCP ACK後,互動便完成了,并且用戶端能夠在租用期内使用DHCP伺服器配置設定的IP位址。
如果租約的DHCP IP位址快期後,用戶端會向伺服器發送DHCP請求封包:
- 伺服器如果同意繼續租用,則用DHCP ACK封包進行應答,用戶端就會延長租期。
- 伺服器如果不同意繼續租用,則用DHCP NACK封包,用戶端就要停止使用租約的IP位址。
可以發現,DHCP互動中,全程都是使用UDP廣播通信。
為了解決當DHCP伺服器和用戶端不在同一個區域網路内時路由器無法轉發廣播包的問題,就出現了DHCP中繼代理。有了DHCP中繼代理以後,對不同網段的IP位址配置設定也可以由一個DHCP伺服器統一進行管理。
- DHCP用戶端會向DHCP中繼代理發送DHCP請求包,而DHCP中繼代理在收到這個廣播包以後,再以單點傳播的形式發給DHCP伺服器。
- 伺服器端收到該包以後再向DHCP中繼代理傳回應答,并由DHCP中繼代理将此包轉發給DHCP用戶端 。
是以,DHCP伺服器即使不在同一個鍊路上也可以實作統一配置設定和管理IP位址。
NAT網絡位址轉換
IPv4 的位址是非常緊缺的,在上文中我們也提到可以通過無分類位址來減緩IPv4位址耗盡的速度,但是IPv4 位址仍有被耗盡的危險。于是科學家提出了一個種網絡位址轉換NAT的方法,再次緩解了IPv4位址耗盡的問題。
簡單的來說NAT就是在同個公司、家庭、教室内的主機對外部通信時,把私有IP位址轉換成公有IP位址。
由于絕大多數的網絡應用都是使用傳輸層協定TCP或UDP來傳輸資料的。是以,可以把IP位址 + 端口号一起進行轉換。這樣就可以隻用一個共有IP位址,這種轉換技術就叫網絡位址與端口轉換NAPT。
ICMP網際網路控制封包協定
ICMP功能都有什麼?
- 确認IP包是否成功送達目标位址
- 報告發送過程中IP包被廢棄的原因和改善網絡設定等。
在IP通信中如果某個IP包因為某種原因未能達到目标位址,那麼這個具體的原因将由ICMP負責通知。
ICMP又大緻可以分為兩大類:
- 一類是用于診斷的查詢消息,也就是「查詢封包類型」
- 另一類是通知出錯原因的錯誤消息,也就是「差錯封包類型」