計算機網絡複習(二)

接上一篇計算機網絡複習(一)

HTTP的報文結構

在這裏插入圖片描述

HTTP的請求協議有哪些

在這裏插入圖片描述

HTTP的狀態碼

在這裏插入圖片描述

Session和Cookie的區別

  • 儲存位置:Cookie是客戶端會話技術,數據保存在客戶端,Session是服務器端會話技術,數據保存在服務器端;
  • 存儲容量:Cookie一般小於4KB,Session無限制;
  • 跨域支持:Cookie支持跨域,Session不支持;

Cookie的知識點

概念

客戶端會話技術,將數據保存在客戶端。

使用步驟

  1. 創建Cookie對象,綁定數據:new Cookie(Cookie cookie) ;
  2. 發送Cookie對象:response.addCookie(Cookie cookie) ;
  3. 獲取Cookie,拿到數據:Cookie[] request.getCookies() ;

實現原理

基於響應頭的set-cookie和請求頭cookie實現。

關於Cookie的一些細節

  • 一次可不可以發送多少個Cookie?
    • 可以,可以創建多個Cookie對象,使用response調用多次addCookie方法發送多個Cookie;
  • Cookie在瀏覽器中保存多長時間?
    • 默認情況下,當瀏覽器關閉,Cookie數據被銷燬

Cookie的持久化存儲

cookie.setMaxAge(int seconds)
正數:將Cookie數據寫到硬盤的文件中,持久化存儲;
負數:默認情況;
0:刪除Cookie;

Cookie能不能存中文

在tomcat 8之前不能存儲,tomcat 8之後可以。

Cookie的共享問題

同一個Tomcat服務器多個項目之間Cookie的共享問題

假設在一個tomcat服務器,部署了多個項目,那麼在這些項目中Cookie能不能共享?
默認情況下不能共享。
setPath(String path):設置Cookie的取值範圍,默認情況下,設置當前虛擬目錄,如果要共享,可以將path設置爲“/” 。

不同的tomcat服務器間Cookie的共享問題

setDomain(String path):如果設置一級域名相同,那麼多個服務器之間Cookie可以共享
Cookie的特點和作用

Cookie特點:

  1. Cookie儲存數據在客戶端瀏覽器;
  2. 瀏覽器對於單個Cookie的大小有限制(4KB)以及對於同一域名下的總Cookie數量也有限制(20個);

Cookie的作用:

1.Cookie一般用於存儲少量的不太敏感的數據;
2.在不登陸的情況下,完成服務器對客戶端的身份識別;

如何設計API的安全性

  • Token授權機制
  • 時間戳超時機制
  • 簽名機制
  • 拒絕重複調用

HTTP攻擊有哪些

  • 跨站腳本攻擊(XSS)
  • Dos攻擊
  • SQL注入攻擊
  • OS命令注入攻擊
  • HTTP頭部攻擊
  • 目錄攻擊
  • 開放重定向攻擊

HTTP和WebSocket的聯繫和區別,什麼情況下用WebSocket

HTTP1.x是半雙工通信,客戶端請求服務器響應,是無狀態的,如果要實現實時通訊需要長輪詢或者長連接的方式,這兩種方式帶來資源浪費。WebSocket是HTML5以後基於TCP協議應用層的一種全雙工實時通訊協議。客戶端和服務端可以進行信息的相互傳遞。它是借Http請求產生握手,在Http的頭部會包含WebSocket協議的請求,所以握手之後,協議進行一個升級,轉成TCP協議進行交流。WebSocket可以應用於聊天和即時信息。

WebSocket通信流程

  1. 建立socket通信,包括客戶端和服務器端創建套接字(socket方法),服務器端綁定端口(bind方法),建立監聽(listen方法),客戶端創建連接(connect方法);
  2. TCP三次握手建立連接;
  3. 客戶端服務器端收發數據(send方法、recv方法),讀寫數據(read方法、write方法);
  4. TCP四次揮手關閉連接;
  5. 關閉socket(close方法);

Socket編程主要大的步驟

  1. 創建套接字(socket方法);
  2. 客戶端建立連接(connect方法),服務器端綁定端口(bind),建立監聽(listen方法);
  3. 寫入數據(write方法),發送數據(send方法),接收數據(recv方法)讀取數據(read方法);
  4. 關閉連接(close方法);

DHCP原理

DHCP是動態主機配置協議,服務器端控制了一個範圍內的IP地址,當客戶端訪問服務端的時候,客戶端就可以自動獲得服務端控制的該範圍內的某一個IP地址並使用。
在這裏插入圖片描述
在這裏插入圖片描述

  1. DHCP服務器被動打開UDP端口67,等待客戶端發來的報文。
  2. DHCP客戶從UDP端口68發送DHCP發現報文。
  3. 凡收到DHCP發現報文的DHCP服務器都發出DHCP提供報文,因此DHCP客戶
    可能收到多個DHCP提供報文。
  4. DHCP客戶從幾個DHCP服務器中選擇其中的一個,並向所選擇的DHCP服務器
    發送DHCP請求報文。
  5. 被選擇的DHCP服務器發送確認報文DHCPACK。從這時起,DHCP客戶就可以使
    用這個IP地址了。這種狀態叫做已綁定狀態
    DHCP客戶現在要根據服務器提供的租用期T設置兩個計時器T]和T2,它們的超.
    時時間分別是0.5T和0.875T。當超時時間到了就要請求更新租用期。,
  6. 租用期過了一半(T1時間到),DHCP發送請求報文DHCPREQUEST要求更新租
    用期。
  7. DHCP服務器若同意,則發回確認報文DHCPACK。DHCP客戶得到了新的租用
    期,重新設置計時器。
  8. DHCP服務器若不同意,則發回否認報文DHCPNACK。這時DHCP客戶必須立即
    停止使用原來的IP地址,而必須重新申請IP地址(回到步驟2)。
  9. 若DHCP服務器不響應步驟6的請求報文DHCPREQUEST,則在租用期過了
    87.5%時(T2 時間到),DHCP客戶必須重新發送請求報文DHCPREQUEST (重複
    步驟6),然後又繼續後面的步驟。
  10. DHCP客戶可以隨時提前終止服務器所提供的租用期,這時只需向DHCP服務器發
    送釋放報文DHCPRELEASE即可。

DNS域名系統

DNS 被設計爲一個聯機分佈式數據庫系統,並採用客戶服務器方式。DNS 使大多數名字都在本地進行解析,僅少量解析需要在互聯網上通信,因此 DNS 的效率很高。由於 DNS 是分佈式系統,即使單個計算機出現了故障也不會妨礙到整個 DNS 系統的正常運行。

DNS解析過程

主機—>本地域名服務器—>根域名服務器

  • 主機向本地域名服務器的查詢一般都採用遞歸查詢,遞歸查詢指如果主機所詢問的本地域名服務器不知道被查詢域名的 IP 地址,那麼本地域名服務器就以 DNS 客戶的身份向其他根域名服務器繼續發出查詢請求報文。遞歸查詢額結果是要查詢的 IP 地址,或者是報錯,表示無法查詢到所需的 IP 地址。
  • 本地域名服務器向根域名服務器查詢通常採用迭代查詢,迭代查詢指當根域名服務器收到本地域名服務器發出的迭代查詢請求報文時,要麼給出所要查詢的 IP 地址,要麼告訴它該向哪一個域名服務器進行查詢。本地域名服務器也可以採用遞歸查詢,這取決於最初的查詢請求報文設置的查詢方式。
    在這裏插入圖片描述
    在這裏插入圖片描述

FTP的兩種模式

主動和被動都是相對於服務端而言的;

  • 主動模式:服務端主動建立數據連接;服務端的端口號是20;客戶端的端口號隨機,但是必須大於1024,因爲0-1023都是熟知端口號;
  • 被動模式:客戶端主動建立數據連接;客戶端的端口號由客戶端自己指定,服務端的端口號隨機;

三、傳輸層

TCP三次握手(建立連接)

在這裏插入圖片描述
TCP是全雙工通信,任何一方都可以發起建立連接的請求,假設A是客戶端,B是服務器。

  • 初始狀態:初始時A和B均處於CLOSED狀態,B會創建傳輸進程控制塊TCB,然後處於LISTEND狀態,監聽端口是否收到了TCP請求以便及時響應。
  • 第一次握手:當A要發生數據時,就向B發送一個連接請求報文,TCP規定連接請求報文的SYN=1,ACK=0,SYN表示synchronization(同步信號位,也可理解爲建立連接),ACK表示acknowledgement(確認標誌位),SYN不可以攜帶數據,但要消耗一個序號,此時A發送的序號seq假設爲x。發送完之後,A就進入了SYN-SENT同步已發送狀態。
  • *第二次握手:當B收到了A的連接請求報文後,如果B同意建立連接,會發送給A一個確認連接請求報文,其中SYN=1,ACK=1,ack=x+1,seq=y,ack的值爲A發送的序號加1,ACK可以攜帶數據,如果不攜帶的話,則不消耗序號。發送完之後,B進入SYN-RCVD 同步已接收狀態。
  • 第三次握手:當A收到了B的確認連接請求報文後,還要對該確認再進行一次確認,報文的ACK=1,ack=y+1,seq=x+1,發送之後A處於established狀態,當B接收到該報文後也進入established狀態。

爲什麼要三次握手?

  1. 第二次握手時A知道了自己的發送和接收是沒有問題的,如果沒有第三次握手,那麼服務端B是不知道自己的發送有沒有問題,所以要有第三次握手。
  2. 三次握手爲了防止了已失效的連接請求問題,假設這樣一種正常情況,A發送的第一個連接請求報文丟失了,之後超時重傳,建立了連接,通信之後釋放了連接。但假設A第一個發送的連接請求報文並沒有丟失,而是在網絡中某結點停滯了,之後又到達了B。如果是兩次握手,此時B會以爲是A請求建立連接,同意之後並不會收到任何數據,因爲A已經關閉了,此時B的資源就會被白白浪費。

TCP四次揮手(斷開連接)

在這裏插入圖片描述

  • 第一次揮手:當A已經沒有要發送的數據了,決定釋放連接,就會發送一個終止連接報文,其中FIN=1,seq=u,u的值爲之前A發送的最後一個序號+1。此時A進入FIN-WAIT-1狀態。
  • 第二次揮手:B收到該報文後,發送給A一個確認報文,ACK=1,ack=u+1,seq=v,v的值爲B之前發送的最後一個序號+1。此時A進入了FIN-WAIT-2狀態,但B進入了CLOSE-WAIT狀態,但連接並未完全釋放,B會通知高層的應用層結束A到B這一方向的連接,此時TCP處於半關閉狀態。
  • 第三次揮手:當B發送完數據後,準備釋放連接時就向A發送連接終止報文,FIN=1,同時還要重發ACK=1,ack=u+1,seq=w(在半關閉狀態B可能又發送了一些數據)。此時B進入LAST-ACK狀態。
  • 第四次揮手:A收到連接終止報文後還要再進行一次確認,確認報文中ACK=1,ack=w+1,seq=u+1。發送完之後進入TIME-WAIT狀態,等待2MSL之後進入CLOSED狀態,B收到該確認後也進入CLOSED狀態。

爲什麼要有TIME_WAIT?

  1. 爲了保證在四次揮手中A端的最後一次發送的ACK確認報文能夠達到B端。因爲這個ACK確認報文有可能會丟失,那麼A如果不在TIME_WAIT狀態等待2MSL,A發送完確認以後,A就進入CLOSED狀態,即A關閉了;如果這個確認丟失了,那麼B就無法收到確認,B也就無法進入CLOSED狀態。所以需要有TIME_WAIT。
  2. 2MSL時間之後,本連接中的所有報文就都會從網絡中消失,防止出現三次握手中的已失效的連接請求問題,影響下一次的TCP連接。

ack的值與seq的關係

  • 建立連接:ack=seq+1;
  • 傳輸數據:ack=seq+傳輸的數據的字節數+1;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章