計(jì)算機(jī)網(wǎng)絡(luò)

  1. 網(wǎng)絡(luò)分類:


    68747470733a2f2f67697465652e636f6d2f437943323031382f43532d4e6f7465732f7261772f6d61737465722f646f63732f706963732f63626635306562382d323262342d343532382d613265372d6431383731343364353766372e706e67.png
  1. HTTP狀態(tài)碼
狀態(tài)碼 類別 含義
1XX Informational(信息性狀態(tài)碼) 接收的請求正在處理
2XX Success(成功狀態(tài)碼) 請求正常處理完畢
3XX Redirection(重定向狀態(tài)碼) 需要進(jìn)行附加操作以完成請求
4XX Client Error(客戶端錯(cuò)誤狀態(tài)碼) 服務(wù)器無法處理請求
5XX Server Error(服務(wù)器錯(cuò)誤狀態(tài)碼) 服務(wù)器處理請求出錯(cuò)
  1. Cookie VS. Session
    Cookie 是服務(wù)器發(fā)送到用戶瀏覽器并保存在本地的一小塊數(shù)據(jù),它會(huì)在瀏覽器之后向同一服務(wù)器再次發(fā)起請求時(shí)被攜帶上,用于告知服務(wù)端兩個(gè)請求是否來自同一瀏覽器。由于之后每次請求都會(huì)需要攜帶 Cookie 數(shù)據(jù),因此會(huì)帶來額外的性能開銷(尤其是在移動(dòng)環(huán)境下)。
    Session 將信息存儲(chǔ)在服務(wù)器端,可以存儲(chǔ)在服務(wù)器上的文件、數(shù)據(jù)庫或者內(nèi)存中。也可以將 Session 存儲(chǔ)在 Redis 這種內(nèi)存型數(shù)據(jù)庫中,效率會(huì)更高。


    u=635969339,977853545&fm=173&app=49&f=JPEG.jpeg

    Cookie 只能存儲(chǔ) ASCII 碼字符串,而 Session 則可以存取任何類型的數(shù)據(jù),因此在考慮數(shù)據(jù)復(fù)雜性時(shí)首選 Session;
    Cookie 存儲(chǔ)在瀏覽器中,容易被惡意查看。如果非要將一些隱私數(shù)據(jù)存在 Cookie 中,可以將 Cookie 值進(jìn)行加密,然后在服務(wù)器進(jìn)行解密;
    對于大型網(wǎng)站,如果用戶所有的信息都存儲(chǔ)在 Session 中,那么開銷是非常大的,因此不建議將所有的用戶信息都存儲(chǔ)到 Session 中。

  2. 緩存
    1)優(yōu)點(diǎn):緩解服務(wù)器壓力,降低客戶端獲取資源的延遲。
    2)實(shí)現(xiàn)方法:讓代理服務(wù)器進(jìn)行緩存,讓客戶端瀏覽器進(jìn)行緩存。
    3)Cache-Control

  3. 虛擬主機(jī):
    1)使用虛擬主機(jī)技術(shù),可以使得一臺(tái)服務(wù)器擁有多個(gè)域名,并且在邏輯上可以看成多個(gè)服務(wù)器。
    2)代理:代理服務(wù)器接受客戶端的請求,并且轉(zhuǎn)發(fā)給其他服務(wù)器。
    目的:緩存;負(fù)載均衡;網(wǎng)絡(luò)訪問控制;訪問日志記錄。
    3)網(wǎng)關(guān):
    4)隧道:使用SSL等加密手段,在客戶端和服務(wù)器之間建立一條安全的通信線路。

  4. HTTPS:
    1)HTTP先和SSL(Secure Sockets Layer)通信,再由SSL和TCP通信。(即使用了隧道進(jìn)行通信)
    2)通過使用SSL,HTTPS具有了加密(防竊聽),認(rèn)證(防偽裝),和完整性保護(hù)(防篡改)。

  5. TCP三次握手:
    每一次TCP傳輸都包括三個(gè)階段:建立連接(三次握手)、數(shù)據(jù)傳送和連接釋放(四次握手)。

    0325-01.jpg

    0325-02.jpg

    SYN:代表請求創(chuàng)建連接,所以在三次握手中前兩次要SYN=1,表示這兩次用于建立連接,至于第三次什么用,在疑問三里解答。
    FIN:表示請求關(guān)閉連接,在四次分手時(shí),我們發(fā)現(xiàn)FIN發(fā)了兩遍。這是因?yàn)門CP的連接是雙向的,所以一次FIN只能關(guān)閉一個(gè)方向。
    ACK:代表確認(rèn)接受,從上面可以發(fā)現(xiàn),不管是三次握手還是四次分手,在回應(yīng)的時(shí)候都會(huì)加上ACK=1,表示消息接收到了,并且在建立連接以后的發(fā)送數(shù)據(jù)時(shí),都需加上ACK=1,來表示數(shù)據(jù)接收成功。
    seq:序列號,什么意思呢?當(dāng)發(fā)送一個(gè)數(shù)據(jù)時(shí),數(shù)據(jù)是被拆成多個(gè)數(shù)據(jù)包來發(fā)送,序列號就是對每個(gè)數(shù)據(jù)包進(jìn)行編號,這樣接受方才能對數(shù)據(jù)包進(jìn)行再次拼接。
    初始序列號是隨機(jī)生成的,這樣不一樣的數(shù)據(jù)拆包解包就不會(huì)連接錯(cuò)了。(例如:兩個(gè)數(shù)據(jù)都被拆成1,2,3和一個(gè)數(shù)據(jù)是1,2,3一個(gè)是101,102,103,很明顯后者不會(huì)連接錯(cuò)誤)
    ack:這個(gè)代表下一個(gè)數(shù)據(jù)包的編號,這也就是為什么第二請求時(shí),ack是seq+1。

三次握手:在創(chuàng)建連接時(shí),
1.客戶端首先要SYN=1,表示要?jiǎng)?chuàng)建連接,
2.服務(wù)端接收到后,要告訴客戶端:我接受到了!所以加個(gè)ACK=1,就變成了ACK=1,SYN=1
3.理論上這時(shí)就創(chuàng)建連接成功了,但是要防止一個(gè)意外(見疑問三),所以客戶端要再發(fā)一個(gè)消息給服務(wù)端確認(rèn)一下,這時(shí)只需要ACK=1就行了。

四次分手:
1.首先客戶端請求關(guān)閉客戶端到服務(wù)端方向的連接,這時(shí)客戶端就要發(fā)送一個(gè)FIN=1,表示要關(guān)閉一個(gè)方向的連接(見上面四次分手的圖)
2.服務(wù)端接收到后是需要確認(rèn)一下的,所以返回了一個(gè)ACK=1
3.這時(shí)只關(guān)閉了一個(gè)方向,另一個(gè)方向也需要關(guān)閉,所以服務(wù)端也向客戶端發(fā)了一個(gè)FIN=1 ACK=1
4.客戶端接收到后發(fā)送ACK=1,表示接受成功。

為什么需要三次握手,兩次握手不行嗎?
如果發(fā)送兩次就可以建立連接話,那么只要客戶端發(fā)送一個(gè)連接請求,服務(wù)端接收到并發(fā)送了確認(rèn),就會(huì)建立一個(gè)連接。
可能出現(xiàn)的問題:如果一個(gè)連接請求在網(wǎng)絡(luò)中跑的慢,超時(shí)了,這時(shí)客戶端會(huì)從發(fā)請求,但是這個(gè)跑的慢的請求最后還是跑到了,然后服務(wù)端就接收了兩個(gè)連接請求,然后全部回應(yīng)就會(huì)創(chuàng)建兩個(gè)連接,浪費(fèi)資源!
如果加了第三次客戶端確認(rèn),客戶端在接受到一個(gè)服務(wù)端連接確認(rèn)請求后,后面再接收到的連接確認(rèn)請求就可以拋棄不管了。

為什么需要四次分手
TCP是雙向的,所以需要在兩個(gè)方向分別關(guān)閉,每個(gè)方向的關(guān)閉又需要請求和確認(rèn),所以一共就4次。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容