Day120 計算機網絡

計算機網絡

重點了解網絡分層模型(OSI、TCP/IP和五層模型)和常用的協議(HTTP/HTTPS 和 TCP/IP)

分層模型

  • 概述:OSI模型七層,概念清楚,理論也比較完整,但其既複雜又不實用;TCP/IP模型四層,應用非常廣泛,計算機網絡的課程一般會把兩者折中爲五層架構,這樣既簡潔又能將概念闡述清楚。
    在這裏插入圖片描述
  • 數據傳輸流程:應用進程數據線傳送到應用層,加上應用層首部,成爲應用層PDU在傳送到運輸層,加上運輸層首部,成爲運輸層報文在傳送到網絡層,加上網絡層首部,成爲IP數據報在傳送到數據鏈路層,加上鍊路層首部和尾部沒成爲數據鏈路層幀,然後傳送到物理層,最後把比特流傳送到物理媒體。
  • 應用層:包括IP地址的解析(DNS),文件傳輸(FTP)等
    • 表示層:數據的表示、安全、壓縮。
    • 會話層:建立、管理、終止會話。
  • 傳輸層:實現端到端的通信(UDP,TCP)
  • 網絡層:進行路由選擇,即爲數據報轉發選擇路徑(IP)
  • 數據鏈路層:信號點到點的傳輸,傳輸有地址的幀
  • 物理層:以二進制數據形式在物理媒體上傳輸數據

詳細:https://blog.csdn.net/qq_31707969/article/details/106163691

HTTP協議

概述

  • 概念:Hyper Text Transfer Protocol 超文本傳輸協議,定義了客戶端和服務器端通信時,發送數據的格式
  • 優點:簡單、靈活、無連接,無狀態。
    • 簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯繫的類型不同。由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。
    • 靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
    • 無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間。
    • HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味着如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。
  • 缺點:明文傳輸不安全
    • 通信內容明文傳輸,容易被第三方竊聽
    • 容易被第三方劫持、篡改從而無法保證內容的完整性與正確性
    • 不驗證通信方的身份,因此有可能遭遇僞裝,無法保證信息的來源
  • 請求方式:HTTP協議有7中請求方式,常用的有2種,GET,POST
  • 常見狀態碼
    • 1xx:服務器就收客戶端消息,但沒有接受完成,等待一段時間後,發送1xx多狀態碼
    • 2xx:成功。代表:200
    • 3xx:重定向。代表:302(重定向),304(訪問緩存)
    • 4xx:客戶端錯誤。404(請求路徑沒有對應的資源),405:請求方式沒有對應的doXxx方法
    • 5xx:服務器端錯誤。代表:500(服務器內部出現異常)

數據格式

  • 請求消息數據格式
    • 請求行:請求方式 請求url 請求協議/版本,比如GET /login.html HTTP/1.1
    • 請求頭:客戶端瀏覽器告訴服務器一些信息 請求頭名稱: 請求頭值
    • 請求空行 空行,就是用於分割POST請求的請求頭,和請求體的
    • 請求體(正文):封裝POST請求消息的請求參數的
  • 響應消息數據格式
    • 響應行:組成:協議/版本 響應狀態碼 狀態碼描述
      • 響應狀態碼:服務器告訴客戶端瀏覽器本次請求和響應的一個狀態。
      • 1xx:服務器就收客戶端消息,但沒有接受完成,等待一段時間後,發送1xx多狀態
      • 2xx:成功。代表:200
      • 3xx:重定向。代表:302(重定向),304(訪問緩存)
      • 4xx:客戶端錯誤。404(請求路徑沒有對應的資源),405:請求方式沒有對應的doXxx方法
      • 5xx:服務器端錯誤。代表:500(服務器內部出現異常)

請求方式

HTTP協議有7中請求方式,常用的有2種

GET:

請求參數在請求行中,在url後。

請求的url長度有限制的

不太安全

POST:

請求參數在請求體中

請求的url長度沒有限制的

相對安全

HTTPS協議

加密方式

  • 概述:基於HTTP協議,通過SSL或TLS提供加密處理數據、驗證對方身份以及數據完整性保護
    • 優點:通信內容進行加密,防止信息在傳輸過程中泄露
      保證數據完整性、準確
      對數據來源進行驗證,確保來源無法僞造
  • 基本概念:
    • 加密和解密用同一個祕鑰的加密方式叫做對稱加密。數據是加密傳輸的,客戶端擁有祕鑰可以得到解密的數據。
      • 缺點:如果祕鑰唯一,那麼破解一個客戶端,或者僞裝成客戶端就可以獲取祕鑰了。如果祕鑰不唯一,需要給每個客戶端發送一個祕鑰,這個過程也容易被攔截。
    • 非對稱加密:公鑰加密的內容,只有私鑰可以解開,私鑰加密的內容,所有的公鑰都可以解開。
      • 缺點:私鑰只有服務端擁有,但是公鑰依然可能被獲取和篡改,導致服務器端發送的內容很被破解,或者客戶端拿到的公鑰是假的。
    • 混合加密: 其實就是對稱加密 與非對稱加密 一起用,HTTPS的傳輸過程就是這種方式。
      • A:利用非對稱加密方式的公鑰將“對稱加密要用到的密鑰key” 進行加密,傳給B
      • B:利用非對稱加密方式的私鑰解密 得到 “對稱加密要用到的密鑰key”
      • B:得到 “對稱加密要用到的密鑰key”後利用這個key 對真正要傳輸的明文src進行對稱加密,傳給A
      • A:用對稱加密方式的密鑰key對明文進行解密,得到明文src
      • 缺點:最終傳輸過程都是利用對稱加密方式進行加密,這樣做的目的是防止第三方篡改竊聽明文內容。但是還有一個問題:無法確定第1步裏面的A是合法者還是僞造者,需要一個權威的驗證機構。
    • CA:證書頒發機構(Certificate Authority,簡稱CA),CA數量並不多,客戶端(瀏覽器)內置了所有受信任CA的證書。CA的主要作用就是對公鑰(和其他信息)進行數字簽名後生成證書,服務器的公鑰和網站信息通過CA的私鑰簽名確保公鑰、網站等信息不會被中間人更改。

工作流程

  • 數據傳輸過程
  • 瀏覽器請求訪問網站
  • 網站服務器將經過CA簽字認真的證書發送給瀏覽器,裏面有服務器發送的公鑰
  • 瀏覽器有CA的公鑰,開始驗證接受到的簽字證書,確認另一端身份的真實性
  • 驗證成功,創建一個隨機祕鑰發送過去,並且用服務器發送的公鑰進行加密
  • 服務器端用自身的私鑰對信息進行解密,得到祕鑰
  • 這時候只有瀏覽器和服務器知道隨機祕鑰是什麼,然後開始進行對稱加密傳遞信息
    在這裏插入圖片描述
  • 服務器認證過程
  • 服務器端想要用https協議加密網站需要先找CA檢修簽字認證
  • CA會通過線上線下的方式對服務器端身份進行驗證
  • 驗證成功後用CA自己的私鑰進行簽字,任何有CA公鑰的的瀏覽器都可以驗證服務器的身份了
    在這裏插入圖片描述

SSL和TSL

  • SSL:爲了解決 HTTP 協議的缺點,設計了SSL協議,SSL 是“Secure Sockets Layer”的縮寫,中文叫做“安全套接層”。
  • TLS:ssl的升級版,是“Transport Layer Security”的縮寫,中文叫做“傳輸層安全協議”。所謂的 HTTPS 其實是“HTTP over SSL”或“HTTP over TLS”,它是 HTTP 與 SSL/TSL 的結合使用而已。
  • TLS是SSL的標準化後的產物,TLS1.0和SSL3.0幾乎沒有區別,TLS的主要目標是使SSL更安全,採取了不同的加密算法
    在這裏插入圖片描述
    https://blog.csdn.net/xiaoming100001/article/details/81109617

TCP/IP協議

爲了保證傳輸的安全性,要經過三次握手和四次揮手

三次握手

建立連接協議(三次握手):

  • 第一次握手:客戶端發送 syn包(syn=x) 的數據包到服務器,並進入SYN_SEND狀態,等待服務器確認;
  • 第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=x+1),同時自己也發送一個SYN包(syn=y),即SYN+ACK包,此時服務器進入SYN_RECV 狀態;
  • 第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=y+1),此包發送完畢,客戶端和服務器進入 ESTABLISHED 狀態,完成三次握手。
  • 握手過程中傳送的包裏不包含數據,三次握手完畢後,客戶端與服務器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連接之前,TCP連接都將被一直保持下去。

如果沒有第三次握手會出現什麼問題:防止失效的連接請求報文段被服務端接收,從而產生錯誤。

四次揮手

由於TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這原則是當一方完成它的數據發送任務後就能發送一個FIN來終止這個方向的連接。收到一個 FIN只意味着這一方向上沒有數據流動,一個TCP連接在收到一個FIN後仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。

  • 第一次揮手:主動關閉方發送一個FIN,用來關閉主動方到被動關閉方的數據傳送,也就是主動關閉方告訴被動關閉方:我已經不會再給你發數據了(當然,在fin包之前發送出去的數據,如果沒有收到對應的ack確認報文,主動關閉方依然會重發這些數據),但是,此時主動關閉方還可以接受數據。
  • 第二次揮手:被動關閉方收到FIN包後,發送一個ACK給對方,確認序號爲收到序號+1(與SYN相同,一個FIN佔用一個序號, SYN 和 FIN 都有seq序號)。
  • 第三次揮手:被動關閉方發送一個FIN,用來關閉被動關閉方到主動關閉方的數據傳送,也就是告訴主動關閉方,我的數據也發送完了,不會再給你發數據了。
    第四次揮手:主動關閉方收到FIN後,發送一個ACK給被動關閉方,確認序號爲收到序號+1,至此,完成四次揮手。

在這裏插入圖片描述
https://www.jianshu.com/p/29868fb82890

Cookies與Seesion

  • 會話技術:一次會話中包含多次請求和響應,瀏覽器第一次給服務器資源發送請求,會話建立,直到有一方斷開爲止,會話技術的功能是在一次會話的範圍內的多次請求間,共享數據。
  • Cookie:客戶端會話技術,將數據保存到客戶端瀏覽器, 瀏覽器對於單個cookie 的大小有限制(4kb) 以及 對同一個域名下的總cookie數量也有限制(20個)
    • Cookie一般用於存出少量的不太敏感的數據
    • 在不登錄的情況下,完成服務器對客戶端的身份識別
  • Seesion:服務器端會話技術,在一次會話的多次請求間共享數據,將數據保存在服務器端的對象中。
    • session可以存儲任意類型,任意大小的數據
  • 區別
    • Session 存儲數據在服務器端,Cookie在客戶端
    • Session 沒有數據大小限制,Cookie有
    • Session 數據安全,Cookie相對於不安全
  • session的生命週期是多久:
    • Session存儲在服務器的內存中(爲了高速存取)。
    • Session何時生效:Sessinon在用戶訪問第一次訪問服務器時創建,需要注意只有訪問JSP、Servlet等程序時纔會創建Session,只訪問HTML、IMAGE等靜態資源並不會創建Session
    • 服務器會把長時間沒有活動的Session從服務器內存中清除,此時Session便失效。Tomcat中Session的默認失效時間爲30分鐘。或者調用Session的invalidate方法。

重定向與轉發

  • 重定向:瀏覽器在拿到服務器返回的狀態碼(301,302)後會自動跳轉到一個新的URL地址,這個地址可以從響應的Location首部中獲取(用戶看到的效果就是他輸入的地址A瞬間變成了另一個地址B,而且歷史的回退按鈕也亮了)
    • 301 redirect: 301 代表永久性轉移(Permanently Moved)。
    • 302 redirect: 302 代表暫時性轉移(Temporarily Moved )。
    • 區別:301表示舊地址A的資源已經被永久地移除了(這個資源不可訪問了),搜索引擎在抓取新內容的同時也將舊的網址交換爲重定向之後的網址;302表示舊地址A的資源還在(仍然可以訪問),這個重定向只是臨時地從舊地址A跳轉到地址B,搜索引擎會抓取新的內容而保存舊的網址。
  • 轉發:是通過服務器的特殊設置,將訪問您當前域名的用戶引導到您指定的另一個網絡地址。域名指向可能這個站點原有的域名或網址是比較複雜難記的。例如,URL轉發可以讓用戶在訪問http://www.abc.com時,自動轉向訪問到一個您自己指定的網址“http://www.123.com” ,URL轉發功能往往是域名註冊服務商提供的域名註冊後的增值服務。
    • 直接轉發方式(Forward),客戶端和瀏覽器只發出一次請求,Servlet、HTML、JSP或其它信息資源,由第二個信息資源響應該請求,在請求對象request中,保存的對象對於每個信息資源是共享的。
    • 間接轉發方式(Redirect)實際是兩次HTTP請求,服務器端在響應第一次請求的時候,讓瀏覽器再向另外一個URL發出請求,從而達到轉發的目的。比如
  • 區別
    • 轉發是服務器行爲,重定向是客戶端行爲。
    • 跳轉限制:重定向可以跳轉到任意URL,轉發只能跳轉本站點資源;
    • 地址欄不同:重定向地址欄會發生變化,轉發地址欄不會發生變化;
    • 請求次數:重定向是瀏覽器向服務器發送一個請求並收到響應後再次向一個新地址發出請求,轉發是服務器收到請求後爲了完成響應跳轉到一個新的地址;重定向至少請求兩次,轉發可以請求一次(直接轉發);

https://blog.csdn.net/grandPang/article/details/47448395

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章