文章目錄
- 1. TCP和UDP的區別
- 2. 對http接口解釋
- 3. Cookie和Session的區別
- 4. http和https的區別
- 5. 智能指針
- 6.斷點續傳
1. TCP和UDP的區別
- tcp的特點: 面向連接,可靠性高,全雙工,面向字節流
- udp特點:無連接,不可靠(但是對實時性要求高),頭部開銷少,
主要區別:連接性與可靠性 : tcp是面向連接的協議,提供可靠的數據傳輸服務; 而udp是無連接的,不可靠
頭部開銷與傳輸效率 : tcp的頭部開銷大,包含更多控制信息,傳輸效率低 ; udp的頭部開銷少,傳輸效率高
應用場景 : tcp適用于可靠性的場景,文件傳輸,電子郵件等; udp適用于實時傳輸,視頻流,Voip(VoIP(互聯網電話協議)是一種電話技術,允許您使用互聯網而不是傳統電話線撥打和接聽電話。)等
視頻音頻適用于UDP協議
- 實時性,對數據丟失不敏感,避免TCP的擁塞控制對實時性的影響。
- 視頻音頻對于實時性的要求很高,UDP的報頭只有8個字節,比TCP少了12個字節,這使得UDP在傳輸數據時的開銷小,效率高,還不用建立連接。 如果因為建立連接,重傳等操作導致延遲過大,會影響用戶體驗
- 視頻中的一幀畫面的畫面丟失,音頻的短暫雜音,影響體驗很小,TCP擁有擁塞控制機制,當網絡擁塞的時候,會降低發送報文的頻率,這樣會影響實時性。讓TCP去參與網絡疏導
2. 對http接口解釋
HTTP工作原理
- HTTP協議定義Web客戶端如何從Web服務器請求Web頁面,以及服務器如何把Web頁面傳送給客戶端。HTTP協議采用了請求/響應模型。
- 客戶端向服務器發送一個請求報文,請求報文包含請求的方法、URL、協議版本、請求頭部和請求數據。服務器以一個狀態行作為響應,響應的內容包括協議的版本、成功或者錯誤代碼、服務器信息、響應頭部和響應數據。
以下是 HTTP 請求/響應的步驟:
-
客戶端連接到Web服務器
一個HTTP客戶端,通常是瀏覽器,與Web服務器的HTTP端口(默認為80)建立一個TCP套接字連接。
例如,http://www.baidu.com。 -
發送HTTP請求
通過TCP套接字,客戶端向Web服務器發送一個文本的請求報文,一個請求報文由請求行、請求頭部、空行和請求數據4部分組成。 -
服務器接受請求并返回HTTP響應
Web服務器解析請求,定位請求資源。服務器將資源復本寫到TCP套接字,由客戶端讀取。一個響應由狀態行、響應頭部、空行和響應數據4部分組成。 -
釋放連接TCP連接
若connection 模式為close,則服務器主動關閉TCP連接,客戶端被動關閉連接,釋放TCP連接;若connection 模式為keepalive,則該連接會保持一段時間,在該時間內可以繼續接收請求; -
客戶端瀏覽器解析HTML內容
客戶端瀏覽器首先解析狀態行,查看表明請求是否成功的狀態代碼。然后解析每一個響應頭,響應頭告知以下為若干字節的HTML文檔和文檔的字符集。客戶端瀏覽器讀取響應數據HTML,根據HTML的語法對其進行格式化,并在瀏覽器窗口中顯示。
例如:在瀏覽器地址欄鍵入URL,按下回車之后會經歷以下流程:
- 域名解析得到目標服務器的ip地址,ip地址底層基于tcp,要先三次握手建立連接,在套接字就是connect,獲取成功后在應用層由瀏覽器構建request,http請求構建http請求行,請求報頭,空行,必要時有正文,
- 然后把http請求通過系統調用接口發送給對方,對方收到了http請求后,會對http請求進行 比如面向字節流以及粘包問題,把報文解出來,然后做序列化得到http相關字段以及請求url,然后讀取url所對應的資源,都有就構建響應報頭,狀態行,正文,然后把整個信息構建成一個response, response通過系統調用發送給客戶端,
- 客戶端在對response解決粘包問題把報文和報文之間分開,通過反序列化提取正文,正文可以是網頁或者圖片,由網頁或圖片被瀏覽器解釋渲染
更細一點就是 : 在雙方操作系統中,發數據并不是把數據發送給對方,也不是發送到網絡,而是拷貝到操作系統底層的tcp發送緩沖區,所以tcp傳輸控制的時候就可以根據流量控制,擁塞控制,捎帶應答,快重傳,各種可靠性策略,效率策略把數據發送給對方,再往下談,滑動窗口,每一次對應的數據段也不直接發送給對方,而是交給了ip報文,在這里也添加了自己的ip報頭,這里也有分片和組裝的問題…
HTTP請求方法
HTTP狀態碼
3. Cookie和Session的區別
- cookie常存儲在瀏覽器或者本地,session只能在服務器
- cookie只能存儲string對象,session可以存儲任意的jave對象
- session更安全,但是session過多的話,會造成服務器壓力問題
- 單個Cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個Cookie,Session是沒有大小限制和服務器的內存大小有關。
- 更詳細看這篇文章徹底了解Cookie和Session的區別(面試)
4. http和https的區別
- http的post和get都是沒有加密的,都可以被抓包軟件抓到
- https就是在應用層和傳輸層進行加密(SSL&TLS,SSL/TLS是用于在計算機網絡上進行安全通信的協議。)
1、HTTPS 協議需要到 CA (Certificate Authority,證書頒發機構)申請證書,一般免費證書較少,因而需要一定費用。(以前的網易官網是http,而網易郵箱是 https 。)
2、HTTP 是超文本傳輸協議,信息是明文傳輸,HTTPS 則是具有安全性的 SSL 加密傳輸協議。
3、HTTP 和 HTTPS 使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
4、HTTP 的連接很簡單,是無狀態的。HTTPS 協議是由 SSL+HTTP 協議構建的可進行加密傳輸、身份認證的網絡協議,比 HTTP 協議安全。(無狀態的意思是其數據包的發送、傳輸和接收都是相互獨立的。無連接的意思是指通信雙方都不長久的維持對方的任何信息。)
TLS握手過程 : 1. 客戶端和服務器商定通信所使用的TLS版本(雙發互發信息,密碼組合,證書) 2. 確定雙方要使用的密碼組合 3.客戶端通過服務器的公鑰和證書驗證服務器身份 4. 生成會話密鑰用于結束后的對稱加密(雙方互發加密的finished信號)
5. 智能指針
原理:
- 在對象構造時獲取資源,在對象析構的時候釋放資源,利用對象的生命周期來控制程序資源,即RALL特性
- *和 ->進行重載,使得該對象具有像指針一樣的行為
- 智能指針的拷貝問題 , 為什么要解決 : SmartPtr sp1(new int); SmartPtr sp2(sp1); //拷貝構造 對內置類型淺拷貝,構造sp2后會讓兩者管理同一片空間,析構會導致空間被釋放兩次(賦值構造也是如此)
-
auto_ptr : 最早的智能指針,他只會允許統一時間只有一個智能指針指向同一個對象,當發生賦值或者拷貝的話,所有權就會轉移,就相當于該指針不在管理對象了。
所有權轉移的實現是在析構和賦值構造中釋放自己管理的對象,然后將管理權賦值給接管自己的對象 -
unique_ptr(防拷貝 = delete) : 和auto_ptr一樣,但是他不允許賦值和拷貝操作。會將拷貝構造函數和賦值重載函數禁用。
-
shared_ptr : 是共享所有權的一個指針,他允許多個智能指針指向同一個對象,他內部使用引用計數來記錄個數,當引用計數為0的時候,才會去釋放指向的對象資源。
增加一個內部成員變量int* _pcount;,表明引用計數個數 ,不能被定義為int類型是因為不能讓每個shared_ptr對象有一個自己的count的成員變量, 不能為靜態,不能讓所有對象擁有同一個count成員變量
注意 :
- 存在線程安全問題:多個線程可能會對同一個引用進行自增或自減操作,而自增或自減操作都不是原子操作,需要加鎖進行保護。
- 存在循環引用問題 : 有兩個結點 :node1->_next = node2; node2->_prev = node1; node1的釋放取決于node2中的prev成員,node2的釋放取決于node1的next成員。
解決方法 : 將ListNode中的成員變量std::shared_ptr _next; 變為 std::weak_ptr _next;
- weak_ptr : 大多數是用來配合shared_ptr進行使用的,解決了shared_ptr的循環引用的問題,他沒有對象的管理權,不參與引用計數的增減。
6.斷點續傳
什么是斷點續傳
斷點續傳技術(Resumable Downloads 或 Resume Downloads)是一種在網絡文件傳輸中常用的技術,它允許在文件傳輸過程中,如果因為某種原因(如網絡中斷、設備故障、用戶暫停等)導致傳輸中斷,之后可以從上次中斷的地方繼續傳輸文件,而不是從頭開始重新傳輸整個文件。這種技術可以顯著提高文件傳輸的效率和用戶體驗,特別是在傳輸大文件或在網絡條件不穩定的環境中。
斷點續傳技術的實現通常依賴于客戶端和服務器之間的協議支持,如HTTP/1.1中的Range和Content-Range頭部字段。客戶端會記錄已經成功傳輸的文件部分(通常是字節范圍),并在中斷后重新發送帶有Range頭部的請求,指定從上次中斷的點開始傳輸。服務器則根據這個請求返回文件剩余部分的數據,并在響應中包含Content-Range頭部以告知客戶端實際返回的數據范圍。
應用場景及原理
大文件下載; 視頻播放;在線更新;遠程備份;.文件上傳
綜上所述,斷點續傳技術廣泛應用于需要高效、可靠文件傳輸的各種場景,特別是在網絡條件不穩定或文件大小較大的情況下。通過斷點續傳技術,用戶可以更好地利用網絡資源,提高文件傳輸的效率和用戶體驗。
- 關于 Range頭部字段:
- 作用:Range頭部字段用于HTTP請求中,指定服務器應該返回文件的哪一部分。這使得客戶端能夠請求文件的特定片段,而不是整個文件。
- 格式:Range: bytes=start-end,其中start是請求的第一個字節的偏移量(從0開始),end是請求的最后一個字節的偏移量。如果end被省略,則表示請求從start開始到文件末尾的所有字節。
- 使用場景:當客戶端希望繼續之前中斷的下載時,它會發送一個帶有Range頭部的請求,指定從上次中斷的點開始請求數據。
- Content-Range頭部字段
- 作用:Content-Range頭部字段用于HTTP響應中,告知客戶端實際返回的字節范圍以及整個實體的總長度。
- 格式:Content-Range: bytes start-end/total,其中start是返回的第一個字節的偏移量,end是返回的最后一個字節的偏移量,total是整個實體的總長度(字節數)。
- 使用場景:服務器在響應帶有Range頭部的請求時,會使用Content-Range頭部來告知客戶端返回的數據范圍以及整個文件的大小。