1. 程式人生 > >面經整理-計算機網路

面經整理-計算機網路

畫出來7層網路結構,解釋資料鏈路層主要負責作甚
應用層 HTTP、DNS、FTP、TFTP 檔案傳輸、電子郵件、檔案服務
表示層 無協議 資料格式化、資料加密、程式碼轉換
會話層 無協議 建立或解除與別的接點的聯絡
傳輸層 TCP、UDP 提供端對端的介面
網路層 IP、ICMP 為資料包選擇路由
資料鏈路層 PPP、ARP、RARP 傳輸有地址的幀以及錯誤檢測功能
物理層 ISO02110、IEEE802 以二進位制資料形式在物理媒介上傳輸資料
TCP/IP 5層模型:應用、傳輸、網路、資料鏈路、物理 TCP/IP 4層模型:應用、傳輸、網路、網路介面 http報文
  • 請求報文:請求行、首部行、請求實體
  • 響應報文:響應行、首部行、響應實體
  • 請求行:方法、URL、HTTP版本
  • 響應行:HTTP版本、狀態碼、短語
  • 首部行:多個請求頭欄位
  • 首部行:多個響應頭欄位
  • 請求實體:一般不用
  • 響應實體:通常要用
http header 指的就是首部欄位
  • 請求頭:Accept、Accept-Encoding、Accept-Language
  • 響應頭:
  • 通用頭:Cache-Control、Pragma、Connection、Date、Transfer-Encoding、Update、Via
  • 實體頭:Allow、Location、Content-Base、Content-Encoding
  • 擴充套件頭:Cookie、Set-Cookie、Refresh、Content-Disposition
http狀態碼
  • 200:OK,請求成功
  • 301:Moved Permanently,永久重定向
  • 302:Found,臨時重定向
  • 304:Not Modified,未修改
  • 307:Temporary Redirect,臨時重定向,與302類似,使用GET請求重定向
  • 401:Unauthorized,請求要求使用者的身份認證
  • 403:Forbidden,伺服器理解請求客戶端的請求,但是拒絕執行此請求
  • 404:Not Found,伺服器無法根據客戶端的請求找到網頁
  • 499:client has closed connection,伺服器處理的時間過長,客戶端主動關閉連線
  • 500:Internal Server Error,伺服器內部錯誤,無法完成請求
http臨時重定向和永久重定向的區別 301永久性重定向和302臨時性重定向。實施301後,新網址完全繼承舊網址,舊網址的排名等完全清零;實施302後,對舊網址沒有影響,但新網址不會有排名。 http請求方法
  • post:更新資源
  • get:獲取資源
  • put:
  • delete:
post和get的區別
  1. GET用於資訊獲取,而且應該是安全的和冪等的。
  2. POST表示可能修改變伺服器上的資源的請求
  3. GET請求的資料會附在URL之後
  4. POST的安全性要比GET的安全性高,GET的引數可以被瀏覽器快取
http1.0、http1.1、http2.0 http2.0:主要基於SPDY協議(是Google開發的基於TCP的應用層協議,用以最小化網路延遲,提升網路速度,優化使用者的網路使用體驗) http1.1與http1.0的區別
  • http1.1多了持續連線(基於TCP長連線),解決每次請求都需要兩倍RTT的開銷,設定頭欄位connection:keep-alive和keep-alive=20(秒)
http2.0與http1.1的區別
  • http2.0採用二進位制格式替代文字格式
  • http2.0是完全多路複用的,而非有序並阻塞的——只需要一個連線即可實現並行
  • http2.0使用報頭壓縮,降低了開銷
  • http2.0讓伺服器可以將響應主動推送到客戶端快取中
https為什麼是安全的,具體實現 在應用層和傳輸層之間加上了安全層,通過SSL/TLS協議(握手協議)實現 SSL/TLS協議簡目的
  • 所有資訊都是加密傳播,第三方無法竊聽。
  • 具有校驗機制,一旦被篡改,通訊雙方會立刻發現。
  • 配備身份證書,防止身份被冒充。
SSL/TLS協議簡要過程
  1. 客戶端生成對稱金鑰;
  2. 伺服器生成非對稱加密演算法的公鑰和私鑰;
  3. 伺服器將公鑰交給CA機構,申請數字證書;
  4. 伺服器將數字證書傳送給客戶端,證明公鑰不是偽造的;
  5. 客戶端和伺服器通過對稱金鑰加解密後續傳輸的資料。
解決的問題
  • 數字證書驗證公鑰是否可信,只要證書可信,公鑰就可信。
  • 對稱加密速度快用於加密資料;公鑰加密速度慢,但是安全,用於管理和分配對稱金鑰。
介紹TCP的三步握手,其中ACK主要是做什麼用的。 對請求方請求的確認 TCP長連線和短連線 長連線
  • 連線→資料傳輸→保持連線(心跳)→資料傳輸→保持連線(心跳)→……→關閉連線(一個TCP連線通道多個讀寫通訊);
短連線
  • 連線資料傳輸關閉連線;
TCP和UDP的區別
  1. TCP面向連線(如打電話要先撥號建立連線);UDP是無連線的,即傳送資料之前不需要建立連線
  2. TCP提供可靠的服務。也就是說,通過TCP連線傳送的資料,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付
  3. TCP面向位元組流,實際上是TCP把資料看成一連串無結構的位元組流;UDP是面向報文的
  4. UDP沒有擁塞控制,因此網路出現擁塞不會使源主機的傳送速率降低(對實時應用很有用,如IP電話,實時視訊會議等),並且UDP速度更快
  5. 每一條TCP連線只能是點到點的;UDP支援一對一,一對多,多對一和多對多的互動通訊
  6. TCP首部開銷20位元組;UDP的首部開銷小,只有8個位元組
  7. TCP的邏輯通訊通道是全雙工的可靠通道,UDP則是不可靠通道
cookie和session cookie分類
  • 會話cookie。生活週期為瀏覽器的會話期。
  • 持久cookie。通過設定過期時間就會將cookie儲存到硬碟上。
cookie與session的區別
  • cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上;
  • cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙,考慮到安全應當使用session;
  • session會在一定時間內儲存在伺服器上。當訪問增多,會比較佔用你伺服器的效能。考慮到減輕伺服器效能方面,應當使用COOKIE;
  • 單個cookie在客戶端的限制是3K,就是說一個站點在客戶端存放的COOKIE不能超過3K;
瀏覽器端使用session
  • cookie儲存sessionID
  • URL重寫
  • 隱藏欄位儲存sessionID
瀏覽器關閉之後session是否失效? 瀏覽器關閉與session失效沒有任何關係,瀏覽器關閉只會導致無法訪問舊的session,可以通過建立儲存在使用者硬碟上的持久cookie替代會話cookie 從開啟瀏覽器訪問,到關閉瀏覽器,最後再次開啟瀏覽器的過程
  1. 第一次開啟瀏覽器訪問,服務端新建一個session,並攜帶sessionID給瀏覽器返回響應;
  2. 瀏覽器程序中新建一個會話cookie儲存sessionID,以後每次訪問都使用該sessionID進行驗證;
  3. 關閉瀏覽器後,用於儲存sessionID的會話cookie隨之銷燬,此時,服務端的session並沒有受到任何影響;
  4. 再次開啟瀏覽器訪問,伺服器會新建一個session,舊的session會等到超過有效時間自動銷燬;
使session失效的方法
  1. 超過有效時間。有效時間是指超過該時間長度沒有訪問伺服器。
  2. 呼叫Session.invalidate()
  3. 伺服器關閉
客戶關閉標籤頁以後,重新訪問網站時怎麼保證還是登入狀態(cookie作用) 將使用者sessionID儲存到持久cookie中,重新訪問時,伺服器從cookie中獲取sessionID資訊。 談談網頁登入模組裡記住我這個功能? 通過cookie儲存加密後的使用者名稱和密碼。 TCP四次揮手,為什麼是四次,一定要是四次嗎?後兩次可否去掉?
  • 不一定是四次,
  • 如果去掉第2次揮手。試想有一種情況,當Client傳送了FIN報文給Server,而Server這時候還想傳遞一些資訊給客戶端,如果沒有第二次握手,Server這時候直接傳送剩下的資料,那客戶端怎麼知道Server是否收到了自己傳送的關閉請求呢?如果Client知道Server接收到了自己傳送的關閉報文,那Client可以大膽的接收Server傳送的剩餘資料,因為它知道Server不會消耗太多的時間在剩餘資料上。如果Client不知道Server有沒有真正收到的關閉報文,那它自己難免會忐忑,自己在接收Server傳遞的剩餘資料的同時,要不要再次傳送新的關閉報文呢?亦或者一直等待Server端的ACK,那萬一Server端沒有收到FIN,也不會發送ACK,那是強制關閉還是一直等待呢?
四次揮手
  • 第一次揮手。client主動發起關閉連線請求
  • 第二次揮手。server告訴client收到連線關閉請求
  • 第三次揮手。server主動發起關閉連線請求
  • 第四次揮手。client告訴server收到連線關閉請求
第四次揮手,傳送ACK包後等待2MSL
  • MSL:報文最大生成時間,超過這個時間任何報文都會丟棄。
  • 等待2MSL時間目的:client傳送ACK包,server等待MSL時間,如果沒有收到ACK包,那麼server重新發送FIN給client;如果client等待2MSL時間都沒有收到server的FIN包,說明server已經關閉,那麼client也隨即關閉。
TCP三次握手,兩次握手會怎麼樣?
  • 第三次握手可以去掉,但是會出現問題
  • “已失效的連線請求報文段”的產生在這樣一種情況下:client發出的第一個連線請求報文段並沒有丟失,而是在某個網路結點長時間的滯留了,以致延誤到連線釋放以後的某個時間才到達server。本來這是一個早已失效的報文段。但server收到此失效的連線請求報文段後,就誤認為是client再次發出的一個新的連線請求。於是就向client發出確認報文段,同意建立連線。假設不採用“三次握手”,那麼只要server發出確認,新的連線就建立了。由於現在client並沒有發出建立連線的請求,因此不會理睬server的確認,也不會向server傳送資料。但server卻以為新的運輸連線已經建立,並一直等待client發來資料。這樣,server的很多資源就白白浪費掉了。採用“三次握手”的辦法可以防止上述現象發生。例如剛才那種情況,client不會向server的確認發出確認。server由於收不到確認,就知道client並沒有要求建立連線。”。主要目的防止server端一直等待,浪費資源。
訪問www.meitu.com網站,從瀏覽器發出訪問到返回頁面的整個過程
  1. 瀏覽器查詢域名對應的IP地址。按序查詢DNS快取,1)瀏覽器快取,2)系統快取,3)路由器快取,4)DNS伺服器快取,5)根域名伺服器遞迴查詢
  2. 與伺服器建立TCP連線。
  3. 瀏覽器給伺服器傳送一條HTTP請求。
  4. 伺服器處理請求。
  5. 伺服器返回一個HTML響應。
  6. 瀏覽器開始渲染HTML
說說ARP協議,NAT協議,DHCP協議,區域網是怎麼通訊的?
  • ARP:地址解析協議,根據IP獲取MAC地址,用於區域網,處於資料鏈路層。
  • NAT:網路地址轉換協議,內網IP對映到外網IP,緩解可用IP地址枯竭的問題。
  • DHCP:動態主機配置協議,給內網自動分配IP地址。
IP地址和MAC地址區別
  1. IP可變,MAC不可變
  2. 長度不同。IP為32位,MAC為48位
  3. 分配依據不同。IP分配基於網路拓撲,MAC分配基於製造商
  4. 定址協議層不同。IP位於網路層,MAC位於資料鏈路層
DNS的過程 DNS:域名系統
  • 根域。“.”
  • 一級域(頂級域)。com.,net.等
向www.baidu.com發起DNS
  1. 本機向local dns請求www.baidu.com
  2. local dns向根域請求www.baidu.com,根域返回com.域(一級域)的伺服器IP
  3. 向com.域請求www.baidu.com,com.域返回baidu.com域的伺服器IP
  4. 向baidu.com請求www.baidu.com,返回cname www.a.shifen.com和a.shifen.com域的伺服器IP
  5. 向root域請求www.a.shifen.com
  6. 向com.域請求www.a.shife.com
  7. 向shifen.com請求
  8. 向a.shifen.com域請求
  9. 拿到www.a.shifen.com的IP
  10. local dns返回本機www.baidu.com cname www.a.shifen.com 以及 www.a.shifen.com的IP
翻牆怎麼實現,內部機制 針對不同的上網限制手段,使用不同的翻牆方法
  • DNS汙染和劫持。1)使用其他的DNS伺服器,2)修改host檔案,直接IP訪問。
  • 封鎖IP。1)使用國外未被封鎖的IP搭建VPS,然後連上該VPS,2)HTTP代理(VPN),客戶端請求代理伺服器,代理伺服器請求目標伺服器。3)socks代理(Shadowsocks),socks是會話層協議,通過socks代理伺服器訪問。
vps:虛擬專用伺服器 vpn:虛擬專用網路 ssh:secure shell ssl:安全套接層