前端知識總結2

網絡

  1. UDP
  • UDP是一個面相報文(報文可理解爲一段段的數據)的協議。意思就是UDP只是報文的搬運工,不會對報文進行任何拆分和拼接操作

  • 具體來說在發送端,應用層將數據傳遞給傳輸層UPD協議,UDP只會給數據增加一個UDP頭標識下是UDP協議,然後就傳遞給網絡層

  • 在接收端,網絡層將數據傳遞給傳輸層,UDP只去除IP報文頭就傳遞給應用層,不會任何拼接操作

    不可靠性

    • UDP是無連接的,也就是說通信不需要建立和斷開連接
    • UDP也是不可靠的。協議收到什麼數據就傳遞什麼數據,並且也不會備份數據,對方能不能收到是不關心的
    • UDP沒有擁塞控制,一直會以恆定的速度發送數據。即使網絡條件不好,也不會對發送速率進行調整。這樣實現的弊端就是在網絡條件不好的情況下可能會導致丟包,但是有點也很明顯,在某些實時性要求高的場景(比如直播,電話會議)就使用UDP而不是TCP

    高效

    • 因爲UDP沒有TCP那麼複雜,需要保證數據不丟失且有序到達。所以UDP的頭部開銷小,只有8字節,相比TCP的至少二十字節要少得多,在傳輸數據報文時是很高效的
    • 頭部包含了以下幾個數據
      • 2個十六位的端口號,分別爲源端口(可選字段)和目標端口整個數據報文的長度
      • 整個數據報文的檢驗和(IPv4可選字段),該字段用於發現頭部信息和數據中的錯誤

    傳輸方式

    • UDP不止支持一對一的傳輸方式,同樣支持一對多,多對多,多對一的方式,也就是說UDP提供了單播,多播,廣播的功能
  1. TCP
  • 頭部
    • TCP頭部比UDP頭部複雜的多,對於TCP頭部來說,以下幾個字段是很重要的

      • Sequence number,這個序號保證了TCP傳輸的報文都是有序的,對端可以通過序號順序的拼接報文
      • Acknowledgement Number,這個序號表示數據接收端期望接收的下一個字節的編號是多少,同時也表示上一個序號的數據已經收到
      • Window Size,窗口大小,表示還能接受多少字節的數據,用於流量控制
    • 標識符

      • URG=1:該字段爲一表示本數據報的數據部分包含緊急信息,是一個高優先級數據報文,此時緊急指針有效。緊急數據一定位於當前數據包數據部分的最前面,緊急指針標明瞭緊急數據的尾部。
      • ACK=1:該字段爲一表示確認號字段有效,此外,TCP還規定在連接建立後傳送的所有報文段都必須把ACK置爲一PSH=1:該字段爲一表示接收端應該立即將數據push給應用層,而不是等到緩衝區滿後在提交。
      • RST=1:該字段爲一表示當前TCP連接出現嚴重問題,可能需要重新建立TCP連接,也可以用於拒絕非法的報文段和拒絕連接請求。
      • SYN=1:當SYN=1,ACK=0時,表示當前報文段是一個連接請求報文。當SYN=1,ACK=1時,表示當前報文段是一個同意建立連接的應答報文。
      • FIN=1:該字段爲一表示此報文段是一個釋放連接的請求報文
    • 狀態機

      • HTTP是無連接的,所以作爲下層的TCP協議也是無連接的,雖然看似TCP將2端連接起來,但是其實只是兩端共同維護了一個狀態
    • 建立連接三次握手

      • 在TCP協議中,主動發起請求的一端爲客戶端,被動連接的一端稱爲服務端,不管是客戶端還是服務端,TCP連接建立完後都能發送和接收數據,所以TCP也是一個雙全工的協議。

      • 起初,兩端都爲CLOSED狀態。在通信開始前,雙方都會創建TCP。服務器創建完TCP後便進入LISTEN狀態,此時開始等待客戶端發送數據

      • 第一次握手

        • 客戶端向服務端發送連接請求報文段,該報文段中包含自身的數據通訊初始序號。請求發送後,客戶端便進入SYN-SEND狀態,x表示客戶端的數據通信初始序號。
      • 第二次握手

        • 服務端收到連接請求後,如果同意連接,則會發送一個應答,該應答中也會包含自身的數據通訊初始序號,發送完成後便進入SYN-RECEIVED狀態
      • 第三次握手

        • 當客戶端收到連接同意的應答後,還要向服務端發送一個確認報文。客戶端發完這個報文段後便進入ESTABLISHED狀態,服務端收到這個應答後也進入ESTAVLISHED狀態,此時連接建立成功
        • 第三次握手可以包含數據,通過TCP快速打開(TFO)技術。其實只要涉及到握手協議,都可以使用類似TFO的方式,客戶端和服務端儲存相同cookie,下次握手時發出cookie達到減少RTT的目的
    • 四次揮手

      • 第一次握手
        • 若客戶端認爲數據發送完成,則它需要向服務端B發送連接釋放請求。
      • 第二次握手
        • B收到連接釋放請求後,會告訴應用層要釋放TCP連接,然後會發送ACK包,並進入CLOSE_WAIT狀態,表示A到B得到連接已經釋放,不接收A發的數據了,但是因爲TCP連接是雙向的,所以B仍舊可以發送數據給A
      • 第三次握手
        • B如果此時還沒發完的數據會繼續發送,完畢後會向A發送連接釋放請求,然後B便進入LAST-ACk狀態(通過延時確認的技術(通常有時間限制,否則對方會誤認爲需要重傳)可以將第二次和第三次握手合併,延遲ACK包的發送)
      • 第四次握手
        • A收到釋放請求後,向B發送確認應答,此時A進入TIME-WAIT狀態。該狀態會持續2MSL(最大段生存期,指報文段在網絡中生存的時間,超時會被拋棄)時間,若該時間內沒有B的重發請求的話,就進入CLOSED狀態。當B收到確認應答後,也便進入CLOSED狀態
        • 爲了保證B能收到A的確認應答,若A發完確認應答後直接進入CLOSED狀態,如果確認應答因爲網絡問題一直沒有到達,那麼會造成B不能正常關閉
  1. HTTP
  • http協議是個無狀態協議,不會保存狀態
  • get和post的區別
    • get請求能緩存,post不能緩存
    • post相對get安全一點點,因爲get請求都包含在url裏,且會被瀏覽器保留歷史記錄,post不會,但是在抓包的情況下都是一樣的
    • post可以通過request body來傳輸比get更多的數據,get沒有這個技術
    • url有長度限制,會影響get請求,但是這個長度限制是瀏覽器規定的,不是RFC規定的額
    • post支持更多的編碼類型且不對數據類型限制
  • 常見狀態碼
    • 2xx成功
      • 200 ok,表示從客戶端發來的請求在服務器端被正確處理
      • 204 No content ,表示請求成功,但是響應報文不含實體的主體部分
      • 205 Reset Content,表示請求成功,但響應報文不含實體的主體部分,但是與204響應不同在於要求請求方重置內容
      • 206 Partial Content,進行範圍請求
    • 3xx重定向
      • 301 moved permanently,永久重定向,表示資源已被分配到新的url
      • 302 found,臨時重定向,表示資源臨時被分配了新的url
      • 303 see other,表示資源存在另一個url,應使用get方法定向獲取資源
      • 304 not modified,表示服務器允許訪問資源,但因發生請求爲滿足條件的情況
      • 307 temporary redirect,臨時重定向,和302含義類似,但是期望客戶端保持請求方法不變的情況下向新的地址發出請求
    • 4xx客戶端錯誤
      • 400 bad request,請求報文存在語法錯誤
      • 401 unauthorized,表示發送的請求需要有通過http認證的認證信息
      • 403 forbidden,表示請求資源的訪問被服務器拒絕
      • 404 not found,表示在服務器上沒有找到請求的資源
    • 5xx服務器錯誤
      • 500 internal server error,表示服務器在執行請求時發生了錯誤
      • 501 Not Implemented,表示服務器不支持當前請求所需要的的某個功能
      • 503 service unavailable,表明服務器暫時處於超負載或正在停機維護,無法處理請求
    • http首部
  1. DNS
  • dns的作用就是通過域名查詢到具體的ip
  • 因爲ip存在數字和英文的組合(ipv6),很不利於人類記憶,所以就出現了域名。你可以把域名看成是某個Ip的別名,DNS就是去查詢這個別名的真正名稱是什麼
    • 在tcp握手前就進行了DNS查詢,這個查詢是操作系統自己做的。當你在瀏覽器中想訪問www.google.com時,會進行一下操作
  • 操作系統會首先在本地緩存中查詢
  • 沒有的話回去系統配置的DNS服務中查詢
  • 如果這個時候還沒有的話,會直接去DNS根服務器查詢,這一步查詢會找出負責com這個一級域名的服務器
  • 然後去該服務器查詢google這個二級域名
  • 接下來三級域名的查詢其實使我們自己配置的,你可以給www這個域名配置一個IP,然後還可以給別的三級域名配置一個IP
    • DNS迭代查詢,還有種是遞歸查詢,區別就是前者是由客戶端去坐請求,後者適合由系統配置的DNS服務器做請求,得到結果後將數據返回給客戶端
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章