小夥伴們在面試過程當中會遇到一些HTTP/網絡TCP/IP相關問題web
我大概收集整理了下面試
這些問題咱們均可以在如下文章中找到答案
TCP/IP按層次分爲,應用層
,傳輸層
,網絡層
,數據鏈路層
,segmentfault
總體流程 (1)應用層 獲取http請求報文,轉發給傳輸層 (2)傳輸層 把報文分割,打上標記及端口號,轉發給網絡層 (TCP) (3)網絡層 增長做爲通訊目的地的mac地址,轉發給鏈路層 (IP) (4)鏈路層 服務器端在鏈路層接收到數據,再逐層向上轉發到應用層(以太網) 發送端 在層與層之間傳輸數據時 會被打上該層所屬的首部信息,反之 接收端 在層與層之間傳輸數據時 每通過一層是會把對應的首部消除
TCP協議採用三次握手
,保證數據準確送達服務器
緣由網絡
在謝希仁著《計算機網絡》第四版中講「三次握手」的目的是「爲了防止已失效的鏈接請求報文段忽然又傳送到了服務端,於是產生錯誤」。
在另外一部經典的《計算機網絡》一書中講「三次握手」的目的是爲了解決「網絡中存在延遲的重複分組」的問題。ACK : TCP協議規定,只有ACK=1時有效,也規定鏈接創建後全部發送的報文的ACK必須爲1
SYN(SYNchronization) : 在鏈接創建時用來同步序號。當SYN=1而ACK=0時,代表這是一個鏈接請求報文。對方若贊成創建鏈接,則應在響應報文中使SYN=1和ACK=1. 所以, SYN置1就表示這是一個鏈接請求或鏈接接受報文。計算機網絡
(1)客戶端發送一個SYN標誌的數據包給對方,(SYN=1,seq=x,)code
(2)服務端收到後,回傳一個帶有SYN/ACK標誌的數據包以示傳達確認信息(SYN=1,ACK=1,seq=y,ack=x+1)客戶端收到包以後,狀態切換爲ESTABLISHEDip
(3)客戶端收到後,回傳一個帶ACK標誌的數據包表明握手結束 (ACK=1,seq=x+1,ack=y+1),服務端收到包以後,狀態切換爲ESTABLISHED資源
seq 同步序列號,第一次隨機生成seq的序列x, 以後在此基礎+y(y爲數據長度,無數據則y=1)ack 應答序列號 在seq基礎上+1get
這時 客戶端和服務器端就能夠開始傳送數據
關閉是一個全雙工的過程,發包的順序的不必定的。通常來講是客戶端主動發起的關閉,最後一次客戶端發出的數據seq = x, ack = y
(1)客戶端, 狀態爲FIN_WAIT_1 發出FIN包(FIN=1 ack=y seq=x+1)
(2)服務端收到後, 狀態切換爲CLOSE_WAIT 發出ACK包(ACK=1 ack=x+2) 客戶端收到包以後狀態切換爲FNI_WAIT_2
(3)服務端處理完任務後,狀態切換爲LAST_ACK, 發出FIN包(FIN=1 seq=y)
(4)客戶端收到後, 狀態切換爲TIME_WAIT 發出ACK包(ACK=1 ack=1)等待2MSL後關閉鏈接
DNS協議經過域名查找IP地址,或逆向從IP地址反查域名服務
URI和URL
- URI 統一資源標識符,標識某一互聯網資源 - URL 統一資源定位符,表示資源地址 - URL是URI的子集