網絡分層
網絡中數據的傳輸,不是簡簡單單的發送,需要一系列的封裝/拆分操作,才能進行傳輸,所以使用分層的思想進行一步步操作。
1、說說OSI 七層、TCP/IP 四層的關系和區別?
- 應用層:相當於程序,軟件開發就屬於應用層。協議:HTTP,FTP,SMTP,POP3。 數據格式:報文
- 表示層:用於處理兩個通信系統中交換信息的"表示方式" (數據格式變換,數據的加密解密,數據的壓縮和解壓)
- 會話層:兩個通信系統建立連接(建立同步),然后有序的傳輸數據。 比如看電影,就先建立了一個連接,然后慢慢傳遞數據
- 傳輸層:負責主機中兩個進程的通信,即通過端口號進行連接。 數據格式:報文段
- 網絡層:將數據傳輸到目標地址,主要進行ip尋址 (邏輯尋址)和路由的選擇。 數據格式:"數據報/分組" (數據報分為好多組)
- 數據鏈路層:為了讓物理層進行無差錯的傳輸,主要進行mac尋址 (物理尋址),差錯控制 數據格式:"幀"
- 物理層:將數據轉換為信號,進行傳輸。 數據格式:"比特"
補充:
- 數據鏈路層的差錯控制:
- 位錯:就比如0變成1,1變成0 解決辦法:檢錯編碼(奇偶檢驗碼,海明碼等)
- 幀錯:幀的丟失,重復,失序等 解決辦法:停等協議;滑動窗口協議(下面講)
- 物理層的信號轉換:
- 物理層的傳輸介質:
- 有線傳輸(導向型傳輸):雙絞線,同軸電纜,光纖
- 無線傳輸(非導向型傳輸):無線電波,微波,紅外線,激光
敲黑板:TCP/IP 四層是 OSI 七層的簡化版,已經成為實事國際標准。接下來就是各層中的重要協議
TCP/IP
1.說說TCP,UDP的區別
2,TCP如何保證可靠傳輸
- 序列號:TCP是面向字節流的,將每一個字節進行編號
- 校驗和:通過一定算法,比較發送方和接收方的校驗和是否一樣。
- 確認應答:每次發送方接收到數據,都會返回一個ACK報文。
- 超時重傳:發送方有一個定時器,到時間沒有收到確認的ack,就會重新發送。
- 連接管理:三次握手,四次揮手。
- 流量控制:控制一個發送方發送消息給接受方的流量。采用滑動窗口,調整滑動窗口的大小。
- 擁塞控制:是一個全局的概念,控制多個發送方發送消息給接收方的擁塞。
3.三次握手,四次揮手
先來看一下tcp報文段的格式
三次握手:
四次揮手:
后續補充:
- 狀態的變化
- 為什么要等待2MSL?
3.1、為什么 TCP 鏈接需要三次握手,兩次不可以么,為什么?
- 兩次握手,只能保證單向連接是暢通的。客戶端發送,服務端回應,客戶端知道可以聯系上服務端,但是服務端不知道能不能聯系上客戶端。只有三次握手,服務端也收到客戶端的回應,才算雙向連通。
- 如果第一回第一次握手半天沒回復,發了第二回第一次握手,並且連接成功后,數據傳完了。這時候剛才第一回第一次握手回復了第一回的二次握手。如果是二次握手,那么就又聯系上了,但是如果三次握手,客戶端對於第一回的第二次握手就置之不理,就聯系不上了。就是正常現象。
3.2、為什么要傳回 SYN?
- 接收端傳回發送端所發送的 SYN 是為了告訴發送端,我接收到的信息確實就是你所發送的信號了。
3.3、為什么要四次揮手
- 任何一方都可以在數據傳送結束后發出連接釋放的通知,待對方確認后進入半關閉狀態。這時只是關閉了自己的通話,只有當對方也表示結束通話時,才真正的進入全關閉狀態
-
舉個例子:A 和 B 打電話,通話即將結束后,A 說“我沒啥要說的了”,B回答“我知道了”,但是 B 可能還會有要說的話,A 不能要求 B 跟着自己的節奏結束通話,於是 B 可能又巴拉巴拉說了一通,最后 B 說“我說完了”,A 回答“知道了”,這樣通話才算結束。
4、停等協議和滑動窗口協議
我們知道,為了保證可靠性以及流量控制,我們采用了停等協議和滑動窗口協議。
- 停等協議(AQR):停止等待協議,發送完一個報文段"等待回信",超時重發。缺點:信道利用率太低。
- 后退N幀協議(GBN):利用滑動窗口,發送方每次可以連着發窗口內所有的字節,因為窗口內有一定的編號,接收方采用"累積確認"的方式返回一個ack,滑動窗口就可以向后移動一位。 並且下一個確認的字節必須為指定的報文段,必須按照順序確認。 缺點:批量重發
- 選擇重傳協議(SR):利用滑動窗口。每一個報文段都需要確認;只重傳錯誤的報文段;接收方一般和發送方的窗口一樣大。在窗口內的所有報文段,誰先來誰就能先確認,但是只有 窗口內前面的所有報文段都確認,才能向后移動。
5、你知道 TCP 如何處理擁塞嗎?
需要經歷四個階段
- 慢啟動
- 擁塞避免
- 快重傳
- 快恢復
注意:擁塞窗口就相當於發送窗口。
6、說說 TCP 協議如何提高傳輸效率?
- 滑動窗口
- 快重傳:發送方只要一連收到三個重復確認就應當立即重傳對方尚未收到的報文段,而不必繼續等待為其設置的重傳計時器到期。
-
延遲應答(累積應答):每次都應答太浪費性能,我們就可以設置傳送了n個報文段后,就應答一次。
- 捎帶應答:很多情況下,客戶端服務器在應用層也是一發一收的。這時候常常采用捎帶應答的方式來提高效率,而ACK響應常常伴隨着數據報文共同傳輸。如:三次握手。
7、IP的分類
Ip的特點:由4段組成,每一段是0-255。分為網絡號和主機號
- A類:(1.0.0.0-126.0.0.0)一般用於大型網絡。
- B類:(128.0.0.0-191.255.0.0)一般用於中等規模網絡。
- C類:(192.0.0.0-223.255.255.0)一般用於小型網絡。
- D類:是多播地址,地址的網絡號取值於224~239之間,一般用於多路廣播用戶。
- E類:是保留地址。地址的網絡號取值於240~255之間。
補充:
子網掩碼:因為有的ip地址是二級,有的是三級。所以沒法確認哪部分是網絡號和主機號,就需要按照子網掩碼來計算。主要為了划分子網后,先找到子網,再找到主機。
HTTP
http協議本質是使用TCP協議,http本身是無連接的
1、講一下 http1.1 和 http2 有什么區別?
HTTP1.1
- 持久連接
- 請求管道化
- 增加緩存處理(新的字段如cache-control)
- 增加 Host 字段、支持斷點傳輸等
HTTP2.0
- 二進制分幀
- 多路復用(或連接共享)
- 頭部壓縮
- 服務器推送
2、說說 HTTP 和HTTPS 的區別?
- 端口 :HTTP:端口80。HTTPS:端口443。
- 安全性和資源消耗: HTTP協議運行在TCP之上,所有傳輸的內容都是明文,客戶端和服務器端都無法驗證對方的身份。HTTPS是運行在SSL/TLS之上的HTTP協議,SSL/TLS 運行在TCP之上。所有傳輸的內容都經過加密,加密采用對稱加密,但對稱加密的密鑰用服務器方的證書進行了非對稱加密。所以說,HTTP 安全性沒有 HTTPS高,但是 HTTPS 比HTTP耗費更多服務器資源。
3、你知道對稱加密和非對稱加密的區別和原理嗎?
- 對稱密鑰加密:加密和解密使用同一個密鑰的方式,這種方式存在的最大問題就是密鑰發送問題,即
如何安全地將密鑰發給對方
; - 非對稱加密:使用一對非對稱密鑰,即
公鑰
和私鑰
,公鑰可以隨意發布,但私鑰只有自己知道。發送密文的一方使用對方的公鑰進行加密處理,對方接收到加密信息后,使用自己的私鑰進行解密。由於非對稱加密的方式不需要發送用來解密的私鑰,所以可以保證安全性
;但是和對稱加密比起來,它比較慢
,所以我們還是要用對稱加密來傳送消息,但對稱加密所使用的密鑰我們可以通過非對稱加密的方式發送出去。
4、HTTP報文格式以及常見的狀態碼
5、HTTP長連接,短連接
- 在HTTP/1.0中默認使用短連接。也就是說,客戶端和服務器每進行一次HTTP操作,就建立一次連接,任務結束就中斷連接。
- 而從HTTP/1.1起,默認使用長連接,用以保持連接特性。使用長連接的HTTP協議,會在響應頭加入這行代碼:
Connection:keep-alive
- 在使用長連接的情況下,當一個網頁打開完成后,客戶端和服務器之間用於傳輸HTTP數據的TCP連接不會關閉,客戶端再次訪問這個服務器時,會繼續使用這一條已經建立的連接。Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的服務器軟件(如Apache)中設定這個時間。實現長連接需要客戶端和服務端都支持長連接。
- HTTP協議的長連接和短連接,實質上是TCP協議的長連接和短連接。
6、Get與POST的區別
(1)GET 一般用來從服務器上獲取資源,POST 一般用來創建資源;
(2)GET 是冪等的,即讀取同一個資源,總是得到相同的數據,而 POST 不是冪等的。GET 不會改變服務器上的資源,而 POST 會對服務器資源進行改變;
(3)從請求參數形式上看,GET 請求的數據會附在URL之后
;而 POST 請求會把提交的數據則放置在是HTTP請求報文的請求體
中。
(4)POST 的安全性要比 GET 的安全性高,因為 GET 請求提交的數據將明文出現在 URL 上,而 POST 請求參數則被包裝到請求體中,相對更安全。
(5)GET 請求的長度受限於瀏覽器或服務器對URL長度的限制,允許發送的數據量比較小,而POST請求則是沒有大小限制的。
其他協議
1、ARP協議
- 完成ip地址到mac地址的映射:因為數據鏈路層需要mac地址傳遞幀
- 檢查ARP高速緩存,有對應表則寫入MAC幀。沒有則用目的MAC地址為FF-FF-FF-FF-FF-FF的幀封裝並廣播ARP分組,同一局域網中的所有主機都能收到該請求,目的主機就會向源主機單播一個ARP響應分組,源主機收到之后就將該映射寫入ARP緩存中。
- 如果局域網中也沒有需要的mac地址,就會把請求發送到網關,后面就由網關進行查找。
本局域網找到

通過外網訪問:就需要經過一系列網關進行轉發。數據只需要發給網關就不用管了,網關自己找到對應主機。
這個過程中,開始ip和結束ip不變(邏輯地址不變),mac地址改變(物理地址改變)。
2、DNS的尋址過程你知道嗎?
- 兩個高速緩存區,一個是host里,一個在本地域名服務器里。高速緩存區沒有才進行一步一步查詢
- host緩存區->本地域名服務器->根域名服務器
- 兩種查詢方式:遞歸查詢,迭代查詢
3、在瀏覽器中輸入一個www.baidu.com后執行的全部過程?
- DNS解析
- TCP連接
- 發送HTTP請求
- 服務器處理請求並返回HTTP報文
- 瀏覽器解析渲染頁面
- 連接結束