給出的一些常見的計算機網絡筆試面試題,特整理以下,後期遇到新的再更新git
TCP首部格式github
UDP首部格式面試
首部字段只有 8 個字節,包括源端口、目的端口、長度、檢驗和。12 字節的僞首部是爲了計算檢驗和臨時添加的。瀏覽器
TCP/UDP特色/區別:服務器
用戶數據報協議 UDP(User Datagram Protocol)是無鏈接的,盡最大可能交付,沒有擁塞控制,面向報文(對於應用程序傳下來的報文不合並也不拆分,只是添加 UDP 首部),支持一對1、一對多、多對一和多對多的交互通訊。cookie
傳輸控制協議 TCP(Transmission Control Protocol)是面向鏈接的,提供可靠交付,有流量控制,擁塞控制,提供全雙工通訊,面向字節流(把應用層傳下來的報文當作字節流,把字節流組織成大小不等的數據塊),每一條 TCP 鏈接只能是點對點的(一對一)。網絡
HTTP協議session
HTTP(超文本傳輸協議)是一個基於請求與響應模式的、無狀態的、應用層的協議,常基於TCP的鏈接方式,HTTP1.1版本中給出一種持續鏈接的機制,絕大多數的Web開發,都是構建在HTTP協議之上的Web應用。app
HTTP狀態碼網站
HTTP 協議是無狀態的,主要是爲了讓 HTTP 協議儘量簡單,使得它可以處理大量事務。
SESSION機制、cookie機制
TCP三次握手、四次揮手
假設 A 爲客戶端,B 爲服務器端。
首先 B 處於 LISTEN(監聽)狀態,等待客戶的鏈接請求。
A 向 B 發送鏈接請求報文,SYN=1,ACK=0,選擇一個初始的序號 x。
B 收到鏈接請求報文,若是贊成創建鏈接,則向 A 發送鏈接確認報文,SYN=1,ACK=1,確認號爲 x+1,同時也選擇一個初始的序號 y。
A 收到 B 的鏈接確認報文後,還要向 B 發出確認,確認號爲 y+1,序號爲 x+1。
B 收到 A 的確認後,鏈接創建。
三次握手的緣由
第三次握手是爲了防止失效的鏈接請求到達服務器,讓服務器錯誤打開鏈接。
客戶端發送的鏈接請求若是在網絡中滯留,那麼就會隔很長一段時間才能收到服務器端發回的鏈接確認。客戶端等待一個超時重傳時間以後,就會從新請求鏈接。可是這個滯留的鏈接請求最後仍是會到達服務器,若是不進行三次握手,那麼服務器就會打開兩個鏈接。若是有第三次握手,客戶端會忽略服務器以後發送的對滯留鏈接請求的鏈接確認,不進行第三次握手,所以就不會再次打開鏈接。
如下描述不討論序號和確認號,由於序號和確認號的規則比較簡單。而且不討論 ACK,由於 ACK 在鏈接創建以後都爲 1。
A 發送鏈接釋放報文,FIN=1。
B 收到以後發出確認,此時 TCP 屬於半關閉狀態,B 能向 A 發送數據可是 A 不能向 B 發送數據。
當 B 再也不須要鏈接時,發送鏈接釋放報文,FIN=1。
A 收到後發出確認,進入 TIME-WAIT 狀態,等待 2 MSL(最大報文存活時間)後釋放鏈接。
B 收到 A 的確認後釋放鏈接。
四次揮手的緣由
客戶端發送了 FIN 鏈接釋放報文以後,服務器收到了這個報文,就進入了 CLOSE-WAIT 狀態。這個狀態是爲了讓服務器端發送還未傳送完畢的數據,傳送完畢以後,服務器會發送 FIN 鏈接釋放報文。
TIME_WAIT
客戶端接收到服務器端的 FIN 報文後進入此狀態,此時並非直接進入 CLOSED 狀態,還須要等待一個時間計時器設置的時間 2MSL。這麼作有兩個理由:
確保最後一個確認報文可以到達。若是 B 沒收到 A 發送來的確認報文,那麼就會從新發送鏈接釋放請求報文,A 等待一段時間就是爲了處理這種狀況的發生。
等待一段時間是爲了讓本鏈接持續時間內所產生的全部報文都從網絡中消失,使得下一個新的鏈接不會出現舊的鏈接請求報文。
爲何須要TIME_WAIT?
TIMEWAIT狀態也稱爲2MSL等待狀態。
1)爲實現TCP這種全雙工(full-duplex)鏈接的可靠釋放
這樣可以讓TCP再次發送最後的ACK以防這個ACK丟失(另外一端超時並重發最後的FIN)。這種2MSL等待的另外一個結果是這個TCP鏈接在2MSL等待期間,定義這個鏈接的插口(客戶的IP地址和端口號,服務器的IP地址和端口號)不能再被使用。這個鏈接只能在2MSL結束後才能再被使用。
2)爲使舊的數據包在網絡因過時而消失
每一個具體TCP實現必須選擇一個報文段最大生存時間MSL(Maximum Segment Lifetime)。它是任何報文段被丟棄前在網絡內的最長時間。
爲何創建鏈接是三次握手,而關閉鏈接倒是四次揮手呢?
這是由於服務端在LISTEN狀態下,收到創建鏈接請求的SYN報文後,把ACK和SYN放在一個報文裏發送給客戶端。而關閉鏈接時,當收到對方的FIN報文時,僅僅表示對方再也不發送數據了可是還能接收數據,咱們也未必所有數據都發送給對方了,因此咱們不能夠當即close,也能夠發送一些數據給對方後,再發送FIN報文給對方來表示贊成如今關閉鏈接,所以,咱們的ACK和FIN通常都會分開發送。
OSI七層模型:
物理層 The physical layer
數據鏈路層Data link layer
網絡層The network layer
傳輸層The transport layer
會話層The session layer
表現層The presentation layer
應用層The application layer