面經整理-計算機網路
阿新 • • 發佈:2019-01-24
畫出來7層網路結構,解釋資料鏈路層主要負責作甚
TCP/IP 5層模型:應用、傳輸、網路、資料鏈路、物理
TCP/IP 4層模型:應用、傳輸、網路、網路介面
http報文
- 請求報文:請求行、首部行、請求實體
- 響應報文:響應行、首部行、響應實體
- 請求行:方法、URL、HTTP版本
- 響應行:HTTP版本、狀態碼、短語
- 首部行:多個請求頭欄位
- 首部行:多個響應頭欄位
- 請求實體:一般不用
- 響應實體:通常要用
- 請求頭: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
- 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,伺服器內部錯誤,無法完成請求
- post:更新資源
- get:獲取資源
- put:
- delete:
- GET用於資訊獲取,而且應該是安全的和冪等的。
- POST表示可能修改變伺服器上的資源的請求
- GET請求的資料會附在URL之後
- POST的安全性要比GET的安全性高,GET的引數可以被瀏覽器快取
- http1.1多了持續連線(基於TCP長連線),解決每次請求都需要兩倍RTT的開銷,設定頭欄位connection:keep-alive和keep-alive=20(秒)
- http2.0採用二進位制格式替代文字格式
- http2.0是完全多路複用的,而非有序並阻塞的——只需要一個連線即可實現並行
- http2.0使用報頭壓縮,降低了開銷
- http2.0讓伺服器可以將響應主動推送到客戶端快取中
- 所有資訊都是加密傳播,第三方無法竊聽。
- 具有校驗機制,一旦被篡改,通訊雙方會立刻發現。
- 配備身份證書,防止身份被冒充。
- 客戶端生成對稱金鑰;
- 伺服器生成非對稱加密演算法的公鑰和私鑰;
- 伺服器將公鑰交給CA機構,申請數字證書;
- 伺服器將數字證書傳送給客戶端,證明公鑰不是偽造的;
- 客戶端和伺服器通過對稱金鑰加解密後續傳輸的資料。
- 數字證書驗證公鑰是否可信,只要證書可信,公鑰就可信。
- 對稱加密速度快用於加密資料;公鑰加密速度慢,但是安全,用於管理和分配對稱金鑰。
- 連線→資料傳輸→保持連線(心跳)→資料傳輸→保持連線(心跳)→……→關閉連線(一個TCP連線通道多個讀寫通訊);
- 連線→資料傳輸→關閉連線;
- TCP面向連線(如打電話要先撥號建立連線);UDP是無連線的,即傳送資料之前不需要建立連線
- TCP提供可靠的服務。也就是說,通過TCP連線傳送的資料,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付
- TCP面向位元組流,實際上是TCP把資料看成一連串無結構的位元組流;UDP是面向報文的
- UDP沒有擁塞控制,因此網路出現擁塞不會使源主機的傳送速率降低(對實時應用很有用,如IP電話,實時視訊會議等),並且UDP速度更快
- 每一條TCP連線只能是點到點的;UDP支援一對一,一對多,多對一和多對多的互動通訊
- TCP首部開銷20位元組;UDP的首部開銷小,只有8個位元組
- TCP的邏輯通訊通道是全雙工的可靠通道,UDP則是不可靠通道
- 會話cookie。生活週期為瀏覽器的會話期。
- 持久cookie。通過設定過期時間就會將cookie儲存到硬碟上。
- cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上;
- cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙,考慮到安全應當使用session;
- session會在一定時間內儲存在伺服器上。當訪問增多,會比較佔用你伺服器的效能。考慮到減輕伺服器效能方面,應當使用COOKIE;
- 單個cookie在客戶端的限制是3K,就是說一個站點在客戶端存放的COOKIE不能超過3K;
- cookie儲存sessionID
- URL重寫
- 隱藏欄位儲存sessionID
- 第一次開啟瀏覽器訪問,服務端新建一個session,並攜帶sessionID給瀏覽器返回響應;
- 瀏覽器程序中新建一個會話cookie儲存sessionID,以後每次訪問都使用該sessionID進行驗證;
- 關閉瀏覽器後,用於儲存sessionID的會話cookie隨之銷燬,此時,服務端的session並沒有受到任何影響;
- 再次開啟瀏覽器訪問,伺服器會新建一個session,舊的session會等到超過有效時間自動銷燬;
- 超過有效時間。有效時間是指超過該時間長度沒有訪問伺服器。
- 呼叫Session.invalidate()
- 伺服器關閉
- 不一定是四次,
- 如果去掉第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收到連線關閉請求
- MSL:報文最大生成時間,超過這個時間任何報文都會丟棄。
- 等待2MSL時間目的:client傳送ACK包,server等待MSL時間,如果沒有收到ACK包,那麼server重新發送FIN給client;如果client等待2MSL時間都沒有收到server的FIN包,說明server已經關閉,那麼client也隨即關閉。
- 第三次握手可以去掉,但是會出現問題
- “已失效的連線請求報文段”的產生在這樣一種情況下:client發出的第一個連線請求報文段並沒有丟失,而是在某個網路結點長時間的滯留了,以致延誤到連線釋放以後的某個時間才到達server。本來這是一個早已失效的報文段。但server收到此失效的連線請求報文段後,就誤認為是client再次發出的一個新的連線請求。於是就向client發出確認報文段,同意建立連線。假設不採用“三次握手”,那麼只要server發出確認,新的連線就建立了。由於現在client並沒有發出建立連線的請求,因此不會理睬server的確認,也不會向server傳送資料。但server卻以為新的運輸連線已經建立,並一直等待client發來資料。這樣,server的很多資源就白白浪費掉了。採用“三次握手”的辦法可以防止上述現象發生。例如剛才那種情況,client不會向server的確認發出確認。server由於收不到確認,就知道client並沒有要求建立連線。”。主要目的防止server端一直等待,浪費資源。
- 瀏覽器查詢域名對應的IP地址。按序查詢DNS快取,1)瀏覽器快取,2)系統快取,3)路由器快取,4)DNS伺服器快取,5)根域名伺服器遞迴查詢
- 與伺服器建立TCP連線。
- 瀏覽器給伺服器傳送一條HTTP請求。
- 伺服器處理請求。
- 伺服器返回一個HTML響應。
- 瀏覽器開始渲染HTML
- ARP:地址解析協議,根據IP獲取MAC地址,用於區域網,處於資料鏈路層。
- NAT:網路地址轉換協議,內網IP對映到外網IP,緩解可用IP地址枯竭的問題。
- DHCP:動態主機配置協議,給內網自動分配IP地址。
- IP可變,MAC不可變
- 長度不同。IP為32位,MAC為48位
- 分配依據不同。IP分配基於網路拓撲,MAC分配基於製造商
- 定址協議層不同。IP位於網路層,MAC位於資料鏈路層
- 根域。“.”
- 一級域(頂級域)。com.,net.等
- 本機向local dns請求www.baidu.com
- local dns向根域請求www.baidu.com,根域返回com.域(一級域)的伺服器IP
- 向com.域請求www.baidu.com,com.域返回baidu.com域的伺服器IP
- 向baidu.com請求www.baidu.com,返回cname www.a.shifen.com和a.shifen.com域的伺服器IP
- 向root域請求www.a.shifen.com
- 向com.域請求www.a.shife.com
- 向shifen.com請求
- 向a.shifen.com域請求
- 拿到www.a.shifen.com的IP
- 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代理伺服器訪問。