偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

一文走進 HTTP 與 TCP 協(xié)議

網(wǎng)絡 網(wǎng)絡管理
UDP是面向報文的傳輸方式是應用層交給UDP多長的報文,UDP發(fā)送多長的報文,即一次發(fā)送一個報文。因此,應用程序必須選擇合適大小的報文。

 [[397802]]

本文轉載自微信公眾號「三分鐘學前端」,作者sisterAn。轉載本文請聯(lián)系三分鐘學前端公眾號。

引言

本文從 OSI 網(wǎng)絡分層(7 層) 開始探討 TCP 與 HTTP 的關系,包含以下幾個部分:

  • OSI 網(wǎng)絡分層(7 層)
  • TCP 協(xié)議(三次握手、四次揮手)
  • HTTP
  • TCP 與 HTTP 的區(qū)別與聯(lián)系

OSI 網(wǎng)絡分層(7 層)

Open Systems Interconncection 開放系統(tǒng)互聯(lián):

1 物理層 -> 2 數(shù)據(jù)鏈路層 -> 3 網(wǎng)絡層(ip)-> 4 傳輸層(tcp) -> 5 會話層 --> 6 表示層 --> 7 應用層(http)

 

  協(xié)議 描述
第七層 應用層 支持網(wǎng)絡應用,應用協(xié)議僅僅是網(wǎng)絡應用的一個組成部分,運行在不同主機上的進程則使用應用層協(xié)議進行通信。主要的協(xié)議有:http、ftp、dns、telnet、smtp、pop3等。
第六層 表示層 把數(shù)據(jù)轉換為合適、可理解的語法和語義
第五層 會話層 維護網(wǎng)絡中的連接狀態(tài),即保持會話和同步,有 SSL
第四層 傳輸層 負責為信源和信宿提供應用程序進程間的數(shù)據(jù)傳輸服務,這一層上主要定義了兩個傳輸協(xié)議,即傳輸控制協(xié)議TCP和用戶數(shù)據(jù)報協(xié)議UDP。
第三層 網(wǎng)絡層 負責將數(shù)據(jù)報獨立地從信源發(fā)送到信宿,主要解決路由選擇、擁塞控制和網(wǎng)絡互聯(lián)等問題。IP 在這一層
第二層 數(shù)據(jù)鏈路層 負責將IP數(shù)據(jù)報封裝成合適在物理網(wǎng)絡上傳輸?shù)膸袷讲鬏敚驅奈锢砭W(wǎng)絡接收到的幀解封,取出IP數(shù)據(jù)報交給網(wǎng)絡層。
第一層 物理層 負責將比特流在結點間傳輸,即負責物理傳輸。該層的協(xié)議既與鏈路有關也與傳輸介質有關。

HTTP 是應用層協(xié)議,而 TCP 是傳輸層協(xié)議,接下來我們逐一詳細介紹??

TCP

TCP、UDP都是是傳輸層協(xié)議:

  • 用戶數(shù)據(jù)報協(xié)議 UDP(User Datagram Protocol):
    • 無連接;
    • 盡最大努力的交付;
    • 面向報文;
    • 無擁塞控制;
    • 支持一對一、一對多、多對一、多對多的交互通信;
    • 首部開銷小(只有四個字段:源端口、目的端口、長度、檢驗和)。
  • 傳輸控制協(xié)議 TCP(Transmission Control Protocol):
    • 面向連接;
    • 每一個TCP連接只能是點對點的(一對一);
    • 提供 可靠交付 服務;
    • 提供 全雙工 通信;
    • 面向字節(jié)流。

另外,UDP是面向報文的傳輸方式是應用層交給UDP多長的報文,UDP發(fā)送多長的報文,即一次發(fā)送一個報文。因此,應用程序必須選擇合適大小的報文

應用程序和 TCP 的交互是一次一個數(shù)據(jù)塊(大小不等),但 TCP 把應用程序看成是一連串的無結構的字節(jié)流。TCP有一個緩沖,當應該程序傳送的數(shù)據(jù)塊太長,TCP就可以把它劃分短一些再傳送

當網(wǎng)絡通信時采用 TCP 協(xié)議時,在真正的讀寫操作之前,客戶端與服務器端之間必須建立一個連接,當讀寫操作完成后,雙方不再需要這個連接時可以釋放這個連接。連接的建立依靠“三次握手”,而釋放則需要“四次握手”,所以每個連接的建立都是需要資源消耗和時間消耗的

TCP連接過程(三次握手)

第一次握手

客戶端向服務端發(fā)送連接請求報文段。該報文段中包含自身的數(shù)據(jù)通訊初始序號。請求發(fā)送后,客戶端便進入 SYN-SENT 狀態(tài)。

第二次握手

服務端收到連接請求報文段后,如果同意連接,則會發(fā)送一個應答,該應答中也會包含自身的數(shù)據(jù)通訊初始序號,發(fā)送完成后便進入 SYN-RECEIVED 狀態(tài)。

第三次握手

當客戶端收到連接同意的應答后,還要向服務端發(fā)送一個確認報文。客戶端發(fā)完這個報文段后便進入 ESTABLISHED 狀態(tài),服務端收到這個應答后也進入 ESTABLISHED 狀態(tài),此時連接建立成功。

為什么需要三次握手,2次不行嗎?

喂喂喂,我是A,你聽的到嗎?B:在在在,我能聽到,我是B,你能聽到我嗎? A:(聽到了,老子不想理你) B:喂喂喂?聽不聽到?我X,對面死了,我掛了。。

如果只有 2 次的話,B 并不清楚 A 是否收到他發(fā)過去的信息。

TCP斷開鏈接(四次揮手)

第一次揮手

若客戶端 A 認為數(shù)據(jù)發(fā)送完成,則它需要向服務端 B 發(fā)送連接釋放請求。

第二次揮手

B 收到連接釋放請求后,會告訴應用層要釋放 TCP 鏈接。然后會發(fā)送 ACK 包,并進入 CLOSE_WAIT 狀態(tài),此時表明 A 到 B 的連接已經(jīng)釋放,不再接收 A 發(fā)的數(shù)據(jù)了。但是因為 TCP 連接是雙向的,所以 B 仍舊可以發(fā)送數(shù)據(jù)給 A。

第三次揮手

B 如果此時還有沒發(fā)完的數(shù)據(jù)會繼續(xù)發(fā)送,完畢后會向 A 發(fā)送連接釋放請求,然后 B 便進入 LAST-ACK 狀態(tài)。

PS:通過延遲確認的技術(通常有時間限制,否則對方會誤認為需要重傳),可以將第二次和第三次握手合并,延遲 ACK 包的發(fā)送。

第四次揮手

A 收到釋放請求后,向 B 發(fā)送確認應答,此時 A 進入 TIME-WAIT 狀態(tài)。該狀態(tài)會持續(xù) 2MSL(最長報文段壽命,指報文段在網(wǎng)絡中生存的時間,超時會被拋棄) 時間,若該時間段內沒有 B 的重發(fā)請求的話,就進入 CLOSED 狀態(tài)。當 B 收到確認應答后,也便進入 CLOSED 狀態(tài)。

HTTP

HTTP 是建立在 TCP 上的應用層協(xié)議,超文本傳送協(xié)議。

HTTP 連接最顯著的特點是客戶端發(fā)送的每次請求都需要服務器回送響應,在請求結束后,會主動釋放連接。從建立連接到關閉連接的過程稱為“一次連接”。

http1.0 :客戶端的每次請求都要求建立一次單獨的連接,在處理完本次請求后,就自動釋放連接。

http1.1 :可以在一次連接中處理多個請求,并且多個請求可以重疊進行,不需要等待一個請求結束后就可以再發(fā)送一個新的請求

http2.0 :支持多路復用,一個 TCP 可同時傳輸多個 http 請求,頭部數(shù)據(jù)還做了壓縮

http3.0 :使用了 QUIC,開啟多個 TCP 連接,在出現(xiàn)丟包的情況下,只有丟包的 TCP 等待重傳,剩余的 TCP 連接還可以正常傳輸數(shù)據(jù)

HTTP特點

  • 無狀態(tài):協(xié)議對客戶端沒有狀態(tài)存儲,對事物處理沒有“記憶”能力,比如訪問一個網(wǎng)站需要反復進行登錄操作。
  • 無連接:HTTP/1.1之前,由于無狀態(tài)特點,每次請求需要通過TCP三次握手四次揮手,和服務器重新建立連接。比如某個客戶機在短時間多次請求同一個資源,服務器并不能區(qū)別是否已經(jīng)響應過用戶的請求,所以每次需要重新響應請求,需要耗費不必要的時間和流量。
  • 基于請求和響應:基本的特性,由客戶端發(fā)起請求,服務端響應。
  • 簡單快速、靈活。
  • 通信使用明文、請求和響應不會對通信方進行確認、無法保護數(shù)據(jù)的完整性。

Method

  • GET 方法請求一個指定資源的表示形式. 使用GET的請求應該只被用于獲取數(shù)據(jù).
  • HEAD 方法請求一個與GET請求的響應相同的響應,只返回請求頭,沒有響應體,多數(shù)由 JavaScript 發(fā)起
  • POST 方法用于將實體提交到指定的資源,通常導致狀態(tài)或服務器上的副作用的更改.
  • PUT 方法用請求有效載荷替換目標資源的所有當前表示。
  • DELETE 方法刪除指定的資源。
  • CONNECT 方法建立一個到由目標資源標識的服務器的隧道,多用于 HTTPS 和 WebSocket 。
  • OPTIONS 方法,預檢,用于描述目標資源的通信選項。通過該請求來知道服務端是否允許跨域請求。
  • TRACE 方法沿著到目標資源的路徑執(zhí)行一個消息環(huán)回測試,多數(shù)線上服務都不支持
  • PATCH 方法用于對資源應用部分修改。

HTTP 與 TCP 區(qū)別

TCP 協(xié)議對應于傳輸層,而 HTTP 協(xié)議對應于應用層,從本質上來說,二者沒有可比性:

  • HTTP 對應于應用層,TCP 協(xié)議對應于傳輸層
  • HTTP 協(xié)議是在 TCP 協(xié)議之上建立的,HTTP 在發(fā)起請求時通過 TCP 協(xié)議建立起連接服務器的通道,請求結束后,立即斷開 TCP 連接
  • HTTP 是無狀態(tài)的短連接,而 TCP 是有狀態(tài)的長連接
  • TCP是傳輸層協(xié)議,定義的是數(shù)據(jù)傳輸和連接方式的規(guī)范,HTTP是應用層協(xié)議,定義的是傳輸數(shù)據(jù)的內容的規(guī)范

說明:從HTTP/1.1起,默認都開啟了Keep-Alive,保持連接特性,簡單地說,當一個網(wǎng)頁打開完成后,客戶端和服務器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會關閉,如果客戶端再次訪問這個服務器上的網(wǎng)頁,會繼續(xù)使用這一條已經(jīng)建立的連接Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的服務器軟件(如Apache)中設定這個時間。

來自:https://github.com/Advanced-Frontend/Daily-Interview-Question

 

責任編輯:武曉燕 來源: 三分鐘學前端
相關推薦

2022-02-20 09:56:28

TCPIP網(wǎng)絡協(xié)議

2022-05-11 11:54:55

Http傳送協(xié)議

2020-12-28 08:10:26

HTTPTCPIP

2023-09-02 21:44:24

TCP/IP通信協(xié)議

2019-10-11 08:51:11

Http協(xié)議Dubbo

2019-11-25 11:04:22

Http協(xié)議Dubbo

2019-05-14 10:50:11

HTTP協(xié)議HttpServlet

2023-10-26 01:15:09

得物視頻優(yōu)化

2019-09-12 09:56:33

TCPUDPHTTP

2022-02-25 07:34:36

MQTT協(xié)議RabbitMQ

2020-03-08 21:22:03

HTTP112

2017-05-04 20:29:12

HTTP服務器TCP

2021-05-19 08:29:05

HTTP1.x 2

2019-07-09 08:29:51

TCPIP協(xié)議

2022-02-24 07:34:10

SSL協(xié)議加密

2023-08-26 20:56:02

滑動窗口協(xié)議

2022-05-16 10:49:28

網(wǎng)絡協(xié)議數(shù)據(jù)

2021-10-13 21:43:18

JVMRPC框架

2020-06-24 12:01:16

Python數(shù)據(jù)類字符

2020-02-02 15:14:24

HTTP黑科技前端
點贊
收藏

51CTO技術棧公眾號