非科班生網絡通訊必會知識點概括

1、 網絡模型

網絡模型分兩種,一種是OSI模型,一種是TCP/IP模型,後者應用更加普遍。這裏也主要介紹TCP/IP模型。編程

(一)TCP/IP模型

首先分爲4層,從上到下依次是應用層、傳輸層、網絡層、數據鏈路層。 OSI模型中將網絡分爲:應用層、表示層、會話層、傳輸層、網絡層、數據鏈路層、物理層。 TCP/IP的應用層是OSI模型中應用層、表示層、會話層的集合,而物理層因爲不是咱們常常考慮的問題,因此TCP/IP模型沒有把物理層算上。緩存

一、數據鏈路層

數據鏈路層的核心是以太網協議。以太網協議規定一組電信號是一個數據包,叫一個振,每一個幀(frame)分爲標頭(head)和數據(data),標頭包含一些說明性東西,好比發送者,接收者,和數據類型之類的。例如一個電腦發個數據包出去,會廣播給局域網(子網)內全部電腦設備的網卡,而後每臺設備都從數據包獲取接收者的mac地址與本身網卡的mac地址比對,若是同樣就說明這是發給本身的數據包。服務器

二、網絡層

定義了一套IP協議,有IPV4和IPV6,以IPV4爲例,由32個二進制數字組成,用4個10進制數字表示。網絡

IP地址分爲三類:函數

  • A類:第一個字節爲網絡號,後三個字節爲主機號。該類IP地址的最前面爲「0」,因此地址的網絡號取值於1~126之間。通常用於大型網絡。
  • B類:前兩個字節爲網絡號,後兩個字節爲主機號。該類IP地址的最前面爲「10」,因此地址的網絡號取值於128~191之間。通常用於中等規模網絡。
  • C類:前三個字節爲網絡號,最後一個字節爲主機號。該類IP地址的最前面爲「110」,因此地址的網絡號取值於192~223之間。通常用於小型網絡。

這三類IP地址構成了三級網絡,將網絡劃分爲了三層,不一樣子網經過上層網關進行轉發。網站

ip之間的通訊加密

  • 同一個子網的通訊:

ip之間是如何通訊的勒,這裏有一個子網以及子網掩碼的概念。好比192.168.56.1和192.168.56.2判斷是不是一個子網,子網掩碼是255.255.255.0,子網掩碼用來與ip地址進行與運算,獲得的一個值是否徹底同樣來判斷是不是屬於一個子網。192.168.56.1與255.255.255.0進行位與與192.168.56.2與255.255.255.0進行位與是同樣的,都爲192.168.56.0,即他們是同一個子網。同一個子網之間的Ip能夠直接進行網絡通訊,由於子網內的全部設備會上傳本身的ip地址和mac地址映射,設備會緩存同一子網其餘設備的Ip地址以及mac地址映射,當拆開IP協議層數據包時能夠迅速以目標IP查詢ARP緩存,以這個mac地址構建數據鏈路層的數據包。3d

  • 不一樣子網的通訊

那麼不一樣子網又是如何聯通的勒?這裏就是網關發揮做用的時候了,網關有多張網卡。以本身家裏的路由器爲例,也是一個網關,路由器有一張網卡與部的網關相連,也有一張網卡與內部設備進行相連。固然路由器與網關相連使用的是一個公網ip,這裏有一個NAT轉換的概念,路由器上裝有NAT軟件,能夠將私有網絡(也就是咱們本身家連上這臺路由器全部的網絡設備)的私有ip轉換爲同一個公網ip,這樣作主要是爲了解決ip不足的問題,由於ipv4協議就那麼幾位,ip確定是不夠的。路由器在內網與公網之間中起着轉發者的做用,固然路由器上面也有網關,當咱們要訪問某個Ip也不在路由器全部網卡位與的子網中時還須要進行多個網關的轉發,這種轉發路徑由路由表決定。路由表的的生成方式能夠是動態(協議共享)或者靜態(手動配置)的,當匹配路由表都失敗時使用缺省路由,路由到相連的其餘網關。blog

3.傳輸層

傳輸層的協議有TCP協議或UDP協議,TCP協議是一套基於端口的點對點通訊協議,規定包括如何鏈接,如何發送,讀取消息。是有鏈接的,不容許丟數據。 UDP則不須要創建鏈接,傳完數據也不須要確認,容許丟數據。 針對此層協議的操做,可以使用SocketAPI進行編程,其函數create,listen,accept,connect,read和write等等抽象了TCP/IP協議的一些操做。dns

4.應用層

合併了OSI中的應用層會話層表示層,協議有好比常見的HTTP協議,郵件協議等等,定義的是經過TCP拿到數據以後怎麼處理的協議。

2、常見問題

(一)請求網址的整個過程

  • 請求dns服務器,解析獲得訪問域名的ip
  • 開始打包數據包通過應用層(按HTTP協議封裝成HTTP的數據包),傳輸層(按TCP協議封裝數據包-設置端口),網絡層(按IP協議封裝數據包),數據鏈路層(按以太網協議封裝數據包)將數據包發送給網關。由於在網絡層時經過子網掩碼判斷不在一個子網,因此會直接發送給網關。以太網包是有限制的,上述的數據包可能會被切爲多個包。
  • 網關收到數據包後,會進行路由表進行路由
  • 通過屢次路由後到達了目標IP所對應的服務器
  • 對應的服務器依次層層解包,獲取http請求報文,處理請求而後又層層封包返回響應

(二)TCP協議的三次握手、四次揮手

首先解釋下涉及到的TCP數據包關鍵頭信息。

標誌位含義

  • SYN:同步,1和0表示是不是創建聯機的數據包
  • ACK:確認,1和0表示確認號是否有效
  • FIN:終止,1和0表示是否要求釋放資源,復位鏈接,即釋放運輸鏈接

序號含義

  • seq 序號。TCP將一次鏈接中全部發送的字節都編上序號,seq表示本報文段的序號。
  • ack 確認號,期待收到對方下一個報文段的序號。

注:一般狀況下數據傳輸階段返回的ack爲上一個接收包的seq+len,但三次握手階段和四次揮手則直接爲seq+1。即三次握手四次揮手的序號計算方式忽略了報文長度。

注意:ACK、SYN和FIN這些大寫的單詞表示標誌位,其值要麼是1,要麼是0;ack、seq小寫的單詞表示序號。

一、三次握手、

  • 第一次握手 客戶端發SYN,具體是SYN=1,seq = x(隨機值),而後客戶端處於SYN_SENT狀態(同步已發送)
  • 第二次握手 服務器返回SYN+ACK,具體是SYN=1,ACK=1,seq=y(隨機值),ack=x+1,而後服務端狀態處於SYN_RECV狀態(同步已收到)
  • 第三次握手 客戶端發送ACK。具體是ACK=1,seq=x+1,ack=y+1,當包發送完畢後,客戶端和服務器進入ESTABLISHED(TCP鏈接成功)狀態

爲何是三次?爲了讓雙方都知道彼此已準備好。設想一個場景,客戶端好久以前的第一次握手到達服務器了,可是在這以前,後面重試的握手請求已經創建了鏈接發送了數據,那麼在這個時候客戶端是不認識服務器的響應的,因此當服務器返回響應的時候,客戶端不會認識這個響應,沒法創建鏈接。

二、四次揮手

  • 第一次揮手 客戶端發FIN(FIN=1,seq=u)
  • 第二次揮手 服務器ACK(ACK=1,ack=u+1,seq=v)
  • 第三次揮手 服務器FIN(FIN=1,ack=u+1,seq=w)
  • 第四次揮手 客戶端ACK(ACK=1,seq=u+1,ack=w+1)

爲何鏈接的時候是三次握手,關閉的時候倒是四次握手?由於當Server端收到Client端的SYN鏈接請求報文後,能夠直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。可是關閉鏈接時,當Server端收到FIN報文時,極可能並不會當即關閉SOCKET,因此只能先回復一個ACK報文,告訴Client端,"你發的FIN報文我收到了"。只有等到我Server端全部的報文都發送完了,我才能發送FIN報文,所以不能一塊兒發送。故須要四步握手。另外,第四次揮手後,客戶端會等待一段時間在釋放鏈接,確保不會再次收到服務器的第三次揮手(服務器若是沒收到客戶端的第四次揮手則會嘗試重發第三次揮手)。

(三)HTTP協議

一、1.0,1.1,2.0的區別

  • 1.0 一個請求創建關閉一次TCP鏈接,大量時間資源耗費在創建鏈接和關閉鏈接中
  • 1.1 創建一次TCP鏈接以後不會立刻關閉,過一段時間再關閉
  • 2.0 多路複用,並行發送請求,而1.1是串行發送請求

二、HTTPS原理

也就是HTTP+SSL協議,具體流程如圖:

問題:

  • 客戶端如何驗證網站返回的證書?

經過本地權威證書的公鑰解開發過來的證書,獲得證書的信息摘要,對比證書內容。

  • 爲何中間用了數字信封(即單鑰加密消息,公私鑰只用於加密單鑰)?

由於單鑰加解密比非對稱加密效率高。非對稱加密的核心效果只是用做簽名(保證接收者接收的信息來自受信任的私鑰密碼擁有者或發送的消息只能被擁有私鑰方解開)。

相關文章
相關標籤/搜索