久久综合九色综合97婷婷-美女视频黄频a免费-精品日本一区二区三区在线观看-日韩中文无码有码免费视频-亚洲中文字幕无码专区-扒开双腿疯狂进出爽爽爽动态照片-国产乱理伦片在线观看夜-高清极品美女毛茸茸-欧美寡妇性猛交XXX-国产亚洲精品99在线播放-日韩美女毛片又爽又大毛片,99久久久无码国产精品9,国产成a人片在线观看视频下载,欧美疯狂xxxx吞精视频

有趣生活

當前位置:首頁>職場>http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)

發布時間:2024-01-24閱讀(17)

導讀一.再談HTTP再理解協議的本質:雙方的一種約定,規則,雙方需要按照相同的一套處理機制(協議)進行處理應用層協議對應的是一個服務,FTP文件傳輸協議,NDS....一. 再談HTTP再理解
  • 協議的本質: 雙方的一種約定,規則,雙方需要按照相同的一套處理機制(協議)進行處理
  • 應用層協議對應的是一個服務, FTP文件傳輸協議, NDS域名解析協議, HTTP超文本傳輸協議, 這些是協議同時也對應著一個服務.
  • http協議的本質 : http協議的本質是要獲得某種資源 (視頻,音頻, 網頁,圖片等)

實際上,上網的大部分行為都是在進行進程間通信.. 也就是不斷地獲取信息和發送信息

比如:

1. 把服務器上面地資源數據拿到本地 (短視頻, 網頁)

2. 把本地地數據推送到服務器 (搜索, 注冊,登錄,下單)

http的底層一般是基于傳輸層協議tcp實現的

  1. 瀏覽器和web服務器三次握手建立TCP連接
  2. 瀏覽器進行 req (request請求)
  3. 服務器進行 rep (reply響應)
  4. 瀏覽器和web服務器四次揮手斷開TCP連接

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(1)

http是超文本傳輸協議, 在底層實現中涉及了很多地文本解析

再談http地無狀態: 指協議不具備記憶地能力, 不需要對于進程間通信地歷史狀態進行保存, 服務器是無法判斷用戶是否歷史上曾經打開過這個網頁了的. 也就是上一次打開網頁和這一次打開相同的網頁互相不關聯, 也不知道你上次打開過. (不會記憶)這個就叫做無狀態

request 報文

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(2)

response 報文

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(3)

  • 在寫HTTP服務器的時候我們必須按照上述的報文格式進行書寫
  • 在整個收發請求數據和應答數據報文的時候會進行報文的解析, 之所以每一個結束位置都是一個CRLF,就是回車換行的意思, 所有的信息以一行一行的形式進行呈現出來
  • 空行出現的原因: 作為報頭和有效載荷的分割符號. 循環著一行一行的讀取, 直到讀取到空行代表報頭讀取完畢

主要請求方法解釋:

  • GET : 直接獲取對應的資源信息(eg: 網頁) 資源從哪來 URL定位
  • POST : 將數據交給服務器, 通過正文提交, 不需要URL定位

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(4)

上述便是需要Content-Length的原因, 獲知正文是否存在以及正文長度

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(5)

再次手寫一個便理解的簡單的HTTPServer.cc 的服務器, 使用C 完成

#include <iostream>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>#include <strings.h>#include <signal.h>#include <string>#include <fstream> #define ERR_EXIT(m) do { std::cerr << m << std::endl; close(EXIT_FAILURE); } while(0)typedef struct sockaddr SA; int main() {signal(SIGCHLD, SIG_IGN);//信號處理, 避免子進程僵尸int listenfd, connfd, pid;socklen_t addLen;struct sockaddr_in clientAdd, serveAdd;if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ) {ERR_EXIT("socket");} int flag = 1; setsockopt(listenfd,SOL_SOCKET, SO_REUSEADDR, &flag, sizeof(flag)); //SO_REUSEADDR BOOL 允許套接口和一個已在使用中的地址捆綁(參見bind()) //SOL_SOCKET固定level設置bzero(&serveAdd, sizeof(serveAdd));//清空serveAdd.sin_family = AF_INET;//協議家族serveAdd.sin_port = htons(8080);//默認80端口serveAdd.sin_addr.s_addr = htonl(INADDR_ANY);//INADDR_ANY == 0 作用適配地址if (bind(listenfd, (SA*)&serveAdd, sizeof(serveAdd)) == -1) {ERR_EXIT("bind");}//3: 等待隊列syn隊列的長度if (listen(listenfd, 3) == -1) {ERR_EXIT("listen");}while (1) {if ((connfd = accept(listenfd, (SA*)&clientAdd, &addLen)) == -1) {ERR_EXIT("accept");}pid = fork();//fork出來子進程if (pid) {close(connfd);//父進程關閉connfd然后僅僅進行listen. SIGCHLD會自動收尸} else {close(listenfd);//子進程進行發送響應報文char buffer[1024]; recv(connfd, buffer, sizeof(buffer), 0); std::cout << "#############################http request begin#############################################"<<std::endl; //打印recv的來自客戶端的請求并且輸出請求信息 std::cout << buffer << std::endl; std::cout << "#############################http request end#############################################"<<std::endl; std::ifstream ifs("./index.html"); if (ifs) { int len; ifs.seekg(0L, ifs.end);//定位到文件末尾 len = ifs.tellg();//獲取文件長度 ifs.seekg(0L, ifs.beg);//回到文件開頭 char *file = new char[len]; ifs.read(file, len);//讀取正文, 字符串形式讀取 ifs.close(); //開始處理響應: std::string status_line = "HTTP/1.1 200 OK ";//狀態行 std::string reply_header;//響應頭部 reply_header ="Content-Length: " std::to_string(len) " "; std::string black = " "; send(connfd, status_line.c_str(), status_line.size(), 0); send(connfd, reply_header.c_str(), reply_header.size(), 0); send(connfd, black.c_str(), black.size(), 0); send(connfd, file, len, 0); delete [] file; } close(connfd); exit(EXIT_SUCCESS);}}close(listenfd);return 0;}

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(6)

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(7)

服務器IP : 端口號 可以訪問, 服務器可能沒有開放端口, 可以在購買的服務器安全組中設置

  • 再次圖解小結HTTP, 整個協議棧的角度去看

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(8)

  • 注意: 這個http應用層簡單的理解是直接和對端建立了連接好似是直接和對端進行請求響應的交互方式, 然后一次連接完成之后立馬斷開, 但是其實真正傳輸數據包的時候, 是需要貫穿整個協議棧的, 也就是http請求是將自己的數據傳給下層的, 是有封包和解包的過程的, 不理解可以看入門篇
  • 再強調一下http叫啥: 超文本傳輸協議, 其實蠻簡單的, 就是傳輸的文本, 文本內容在數據報文的正文中,正文前面有報頭請求行(請求), 或者是報頭和狀態行(響應).... 報頭和有效載荷的分離依賴的是空行.
  • 請求行: 請求方法(GET, POST) URL:資源定位 協議版本(HTTP/1.0 HTTP/1.1 ...)
  • 響應狀態行: 協議版本, 狀態碼 狀態碼描述信息。。。
  • 中間的各種 鍵: 值 對(首部字段名: 值) 都是各種細節信息 eg : Content-Length
  • 空行: 分隔報頭和有效載荷(正文)

相關視頻推薦

《tcp/ip詳解卷一》: 150行代碼拉開協議棧實現的篇章

網絡原理tcp/udp,網絡編程epoll/reactor,面試中正經“八股文”

學習地址:C/C Linux服務器開發/后臺架構師【零聲教育】-學習視頻教程-騰訊課堂

需要C/C Linux服務器架構師學習資料加qun812855908獲取(資料包括C/C ,Linux,golang技術,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒體,CDN,P2P,K8S,Docker,TCP/IP,協程,DPDK,ffmpeg等),免費分享

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(9)

二. HTTP對比學習HTTPS

HTTPS : 是以安全為目標的HTTP通道, 通俗說就是安全版本的HTTP,

為啥需要HTTPS

  • HTTP的請求信息是明文傳輸, 容易被竊取
  • HTTP不會驗證對方的信息, 存在被冒充的風險
  • 數據的完整性沒有校驗, 容易被中間人篡改

為啥叫做HTTPS , S的含義, SSL:加密,在HTTP下加入SSL層 (解決上述問題)

SSL操作步驟:

  1. 驗證服務器端
  2. 允許客戶端和服務端選擇加密算法和密碼, 確保雙方都支持
  3. 驗證客戶端
  4. 使用公鑰加密技術來生成共享加密數據
  5. 創建一個加密的SSL連接
  6. 基于該SSL連接傳遞HTTP請求

HTTPS的主要作用:一個是建立一個信息安全通道,用來保證數據傳輸的安全性,另外一個就是驗證網站的真實性了...

HTTP和HTTPS的區別如下:
  1. https協議需要 ca申請證書,一般免費的證書較少,因而是需要一定費用的]
  2. http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的SSL加密傳輸協議
  3. http 和 https使用的是完全不同的連接方式,用的端口也是不一樣的。前者是80端口 后者是443端口
  4. http的連接很簡單,是無狀態的;https協議是由 SSL HTTP協議構建的可進行加密傳輸,身份認證的網絡協議,比http協議安全.
  5. 在OSI模型中,HTTP工作在應用層,而HTTPS工作在傳輸層

寫傳輸層協議之前先介紹一個四元組的概念: 網絡通信的實現就是基于四元組的,不論是TCP還是UDP 要想將數據從一端傳入到另外一端,就必須明確對端的二元組, 雙方如果都要相互通信就要確定四元組

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(10)

首先我們確定要雙方不同主機上的不同進程間進行通信, 必須確定雙方的 ip port why?

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(11)

上述圖主要是為了引出為啥要 ip

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(12)

上述圖是為了引出為啥需要 port

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(13)

  • 至此我想聰明的大家自然是明白了為啥一定要確定四元組雙發才能通信了
  • 上述四元組可謂是特別重要的一個鋪墊了, 后序的TCP最大連接數目等等咱要分析清楚其實都還得必須從上述這個得限制入手了. (這個也是面試的常考點)
三.TCP協議 (三次握手四次揮手細節過程理解在之前的博文中有詳細圖解)

報文分析

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(14)

源 / 目的端口,那就是老身常談了, 從哪個進程來,到哪個進程去

32位序號和確認序號 (原諒咱留個小疑惑,后面解釋,和重傳機制有關系)

4位TCP報頭長度: 表示該TCP頭部有多少個32位bit(有多少個4字節); 所以TCP頭部最大長度是15 * 4 = 60 (基本衡量單位都是4字節為最小單位) 因為首部長度是4位 最大就是15; 所以最大首部長度就是 15 * 4 (最小單位) = 60字節

6位標志位:

  • URG: 緊急指針是否有效
  • ACK: 確認號是否有效
  • PSH: 提示接收端應用程序立刻從TCP緩沖區把數據讀走
  • RST: 對方要求重新建立連接; 我們把攜帶RST標識的稱為復位報文段
  • SYN: 請求建立連接; 我們把攜帶SYN標識的稱為同步報文段
  • FIN: 通知對方, 本端要關閉了, 我們稱攜帶FIN標識的為結束報文段

16位窗口大小(先留個疑,其實就是存儲接收緩沖區還剩下的大小, 和流量控制有關)

16位校驗和: 發送端填充, CRC校驗. 接收端校驗不通過, 則認為數據有問題. 此處的檢驗和不光包含TCP首部, 也 包含TCP數據部分

6位緊急指針: 標識哪部分數據是緊急數據

tcp緩沖區概念的引入 (解釋流量控制):

tcp連接建立之后是存在接收和發送內核緩沖區的....

send 還有 recv這些接口都不是直接將數據發送到網路中,也不是直接從網路中讀取數據的...

而是存在發送緩沖區和接收緩沖區的概念, 這些都是內核緩沖區。。。同樣之前的窗口大小其實就是接收緩沖區還剩余的大小, 支持流量控制 (你發送的數據不能超過,不然就滿了)

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(15)

接收緩沖區大寫也對應著流量控制:why? 如何理解

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(16)

接收端處理數據的速度是有限的. 如果發送端發的太快, 導致接收端的緩沖區被打滿, 這個時候如果發送端繼續發送, 就會造成丟包, 繼而引起丟包重傳等等一系列連鎖反應.

因此TCP支持根據接收端的處理能力, 來決定發送端的發送速度. 這個機制就叫做流量控制(Flow Control)

所以窗口大小就是接收端處理能力的代表 (發送端接收到窗口大小會根據窗口大小進行調節自己的發送速度,進行流量控制) 填充窗口字段就是填充的自身的接收緩沖區中剩余空間的大小 (此窗口也稱為接收窗口)

窗口大小字段越大, 說明網絡的吞吐量越高;

確認應答(ACK)機制的理解 (編序號)

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(17)

ACK應答的含義就是: acknum 之前的序號的數據包我都已經收到了,下一次你從acknum開始發送吧

超時重傳機制

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(18)

超時重發指的是因為網絡環境的擁堵阻塞導致了在很長一段時間發送方都沒有等到自己之前發送包的回音 (于是TCP默認是丟包)然后會采取重傳措施

由于重傳機制,會存在一些情況是 之前因為網絡擁堵的數據包 在網絡環境恢復之后正常傳入到對端, 導致對端可能會收到多份重復的數據報文,不過嘞因為序號的存在可以通過需要進行簡單的去重即可

但是這個超時時間如何確認??? 多少算合適,這個也是個置得討論的問題

  1. 最理想的情況下, 找到一個最小的時間, 保證 "確認應答一定能在這個時間內返回".
  2. 但是這個時間的長短, 隨著網絡環境的不同, 是有差異的.
  3. 如果超時時間設的太長, 會影響整體的重傳效率;
  4. 如果超時時間設的太短, 有可能會頻繁發送重復的包;

TCP為了保證無論在任何環境下都能比較高性能的通信, 因此會動態計算這個最大超時時間.(抓核心主題,據網絡環境而生 超時時間)

  1. Linux中(BSD Unix和Windows也是如此), 超時以500ms為一個單位進行控制, 每次判定超時重發的超時 時間都是500ms的整數倍.
  2. 如果重發一次之后, 仍然得不到應答, 等待 2*500ms 后再進行重傳.
  3. 如果仍然得不到應答, 等待 4*500ms 進行重傳. 依次類推, 以指數形式遞增.
  4. 累計到一定的重傳次數, TCP認為網絡或者對端主機出現異常, 強制關閉連接.
滑動窗口理解
  • 首先滑動窗口的前提是基于緩沖區來實現的, 沒有緩沖區是做不到滑動窗口的,流量控制同樣也是做不到的
  • 滑動窗口的出現是根據緩沖區大小來進行一次發送多條數據來提升性能...
  • 可以思考一下反正我需要發很多數據,1 - 1000 1001 - 2000 2001 - 3000 ... 我是可以采取一條一條的發送,等待一條有了回音,再繼續發送下一條,可是如果窗口是足夠的情況下我可以一次發送多條數據,這樣可以將每條數據的等待應答時間重疊起來,實現效率性能的提升...

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(19)

  • 如同上圖這般,同時發送多條數據 (將多條數據的等待應答時間壓縮成一條數據的等待應答時間)
  • 窗口大小指的是無需等待確認應答而可以繼續發送數據的最大值. 上圖的窗口大小就是3000個字節(3個 段). 這個稱為發送窗口大小 (是根據所在端的發送緩沖區大小和對端的接收緩沖區的大小中取出最小值來確定的)
  • 發送前四個段的時候, 不需要任何等待,直接可以發送
  • 收到第一個ACK后, 滑動窗口向后移動, 繼續發送第五個段的數據; 依次類推
  • 操作系統內核為了維護這個滑動窗口, 需要開辟 發送緩沖區 來記錄當前還有哪些數據沒有應答; 只有確 認應答過的數據, 才能從緩沖區刪掉
  • 窗口越大, 則網絡的吞吐率就越高
滑動窗口下的丟包問題分析

第一種是ACK丟失

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(20)

如上述情況下,滑動窗口的ACK部分丟失其實不是很緊要,因為可以通過后序的ACK確認;ACK一旦確認之后代表的含義是 默認之前的所有序列數據都已經全部收到了

情況2是數據包傳過去的時候就丟失了

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(21)

  • 當某一段報文段丟失之后, 發送端會一直收到 1001 這樣的ACK, 就像是在提醒發送端 "我想要的是 1001" 一樣
  • 然后; 如果發送端主機連續三次收到了同樣一個 "1001" 這樣的應答, 就會將對應的數據 1001 - 2000 重新發送;
  • 這個時候接收端收到了 1001 之后, 再次返回的ACK就是7001了(因為2001 - 7000)接收端其實之前就已 經收到了, 被放到了接收端操作系統內核的接收緩沖區中 (提前收到的后序的報文也不會丟棄, 只是前面的沒有確認 后面的也就無法確認,因為一旦確認就默認前面的所有數據全部已經收到了)
  • 這種機制被稱為 "高速重發控制"(也叫 "快重傳").

單獨解釋一下 快重傳 : 就是說在接收方收到一個失序的報文段的時候就立即會發出重復確認。(目的在于使得發送方盡早地知道說自己有報文丟失了,沒有到達對面)接收方地意思就是 哥你確定你發的是對的,我前面的報文都還沒收到 (順序不對呀)三次之后發送方反應過來直接重傳,不再等待超時

擁塞控制
  • (滑動窗口) 大小決定 min( 接收窗口決定的 , 擁塞窗口決定 (發送方發送緩沖區大小))
  • why需要慢開始,最一開始發送方會將發送窗口(擁塞窗口的)設置的很小 ?
  • 因為網絡環境錯綜復雜,剛開始不清楚網絡環境的好壞, 所以滿開始就有點像是派個偵察兵去看看,網絡環境咋樣,然后再進一步調整擁塞窗口的大小 確定滑動窗口大小..
  • 先探測一下當前的網絡擁塞程度,然后由小到大的逐漸增大擁塞窗口的大小.
  • 然后是指數級的擴張滑動窗口大小,但是也不能一直那樣擴大下去,于是有一個閾值的概念,超過這個閾值又轉變為線性增長了

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(22)

  • 當TCP開始啟動的時候, 慢啟動閾值等于窗口最大值
  • 在每次超時重發的時候, 慢啟動閾值會變成原來的一半, 同時擁塞窗口置回
  • 少量的丟包, 我們僅僅是觸發超時重傳; 大量的丟包, 我們就認為網絡擁塞;
  • 當TCP通信開始后, 網絡吞吐量會逐漸上升; 隨著網絡發生擁堵, 吞吐量會立刻下降
  • 其實就是為了保證在不造成網絡環境壓力太大的情況下盡快將數據傳輸過去
TCP小結

TCP是面向連接的,可靠的,基于字節流的傳輸層通信協議

如何保證可靠性:

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(23)

性能提升上面:

1. 采取了滑動窗口

2. 快速重傳 (不需要等待超時,三次對端提醒之后自動重傳)

基于TCP應用層協議 HTTP HTTPS SSH Telnet FTP SMTP

TCP最大連接數的分析(面試常考)(從四元組的角度入手)
  • 客戶端 和 服務器之間建立連接 : 只要確保客戶端的 ip 客戶端的 port 兩個中存在一個和服務端不同即可建立連接.....
  • 理論最大 : 最大TCP連接數目 = 客戶端ip數目 * 客戶端端口數目
  • ipv4而言理論ip 數目最多是 2 ^ 32 port 數目是 65535 = 2 ^ 16, 所以理論最大的TCP連接數目是 2 ^ 48
  • 但是并發數目是萬萬不可能達到上述這么多的. (考慮并發) 首先第一個就是文件描述符的限制 sockfd數量限制,當然這個可以在服務器中修改配置... ulimit
  • 還有就是內存的限制了,TCP存在發送和接收內核緩沖區, 你用戶空間也還要開緩沖區,所以肯定是無法達到上述哪個恐怖的數目的
四.UDP協議

先從報文分析入手

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(24)

  • 源端口號: 客戶端端口號.
  • 目的端口號:服務器端口號, 負責確定交付給哪個應用程序.
  • 一個應用程序可以綁定多個端口號,但是一個端口號一定是對應一個應用程序.(端口號標識唯一應用程序)
  • 16位UDP長度, 表示整個數據報(UDP首部 UDP數據)的最大長度
  • 如果校驗和出錯, 就會直接丟棄
  • 報頭理解, 報頭實現地方式, 使用C語言中地位段進行理解: 多少位分為一段

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(25)

UDP的特征: 什么是無連接,不可靠,關鍵為什么它如此的不穩定但是在現在的短視頻 音視頻通話 DNS ARP這些全部都還使用的是UDP作為傳輸層協議

首先是無連接, 連接是什么: 連接算是一端到另外一端的不存在的一根線 (抽象的來說,這個是我的個人理解, 連接的過程也就是三次握手的過程)對于三次握手不理解的可以看我前文鏈接存在詳解

首先不論是有連接還是無連接, 我們核心應該確定的是什么? 確定四元組,對了四元組,無連接也可以進程間通信,只不過每一次必須傳入四元組, 但是口說無憑, 咱看看接口唄。對比一下:

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(26)

為什么UDP是不可靠連接?

因為UDP沒有TCP的哪些為了保證可靠性的機制: 比如超時重傳機制,擁塞控制,流量控制機制,為數據包編號排序等...

思考為啥UDP如此不可靠我們還必須要使用它, 而且還會盡量的使其變得可靠, 還要專門做UDP可靠性設計,這個不是多次一舉嗎. 不如直接使用TCP?

首先解釋UDP相比TCP為什么相對實時性好, 在時間上更短, 更加快速。。。

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(27)

以上是從不必要的三次握手建立連接上解釋這個速度問題, 為啥UDP更快

而且在進行數據傳輸的時候TCP還會存在一定的時間限制,時間閾值,超過這個時間就需要進行重傳, 重傳也會導致延遲性,向我們的qq聊天呀就經常出現這樣的延遲現象,很明顯底層應當是采取的TCP作為傳輸層協議.

根據上述的延遲解釋一下音視頻通話為例解釋下為啥使用UDP而不是TCP?

一句話解釋:就是通話延遲的問題,我們qq上發個消息是無所謂,延遲下我們可以等會看嘛,但是你在跟別人搞音視頻,像抖音這些,或者各種視頻,這個要是通話延遲,幾秒前說的話幾秒后出來了你這個還搞個屁呀, 還說得清嘛,這個很明顯需要實時通話,正是這樣的場景存在所以UDP必然是需要的。。。而且現在音視頻(短視頻)如此火爆更是少不了UDP了

我們再從另外一個角度來分析一下這個問題, 服務端壓力上面來考慮。。。

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(28)

再談UDP可靠傳輸的設計。。。

現有的udp可靠傳輸協議就是KCP了,感興趣的還真有必要得去深入研究一下,我個人是研究深度還不夠,先暫且淺顯的聊一聊這個UDP可靠傳輸設計的一些基本的東西,KCP要是將來我的理解深入足夠會盡力刨析一下...

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(29)

首先既然提到了MTU 先解釋一下 MTU是個啥玩也.

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(30)

總結UDP可靠傳輸的學習:

  • 多研究TCP協議的實現
  • 設計 udp可靠傳輸,和TCP不一樣,重傳策略受到我們的控制可控 (也不一定所有都需要重傳) 像音視頻,游戲走位 超時太久丟包就丟了,不需要重傳... 但是有些其他應用場景下又必須進行重傳
  • 重傳時機的確定 (根據具體的業務需求去設計,不要一味追求設計一個通用性的UDP可靠傳輸協議)
五. 對比TCP和UDP的細節
  • 連接
  • TCP是面向連接的傳輸層協議,傳輸數據前需要先建立連接
  • UDP 是不需要建立連接的。 即可馬上立即傳輸數據 (接口傳入二元組)
  • 服務對象
  • TCP是一對一的兩點服務,即一條連接只有兩個斷點
  • UDP支持一對一 ,一對多, 多對多的交互通信
  • 可靠性
  • TCP是可靠交付數據的,數據無差錯,不重復,按順序到達
  • UDP則是盡力交付,不保證可靠 (因為沒有各種傳輸策略)
總結本文
  • 本文從再看HTTP 和 對比學習 HTTPS入手
  • HTTP協議的學習核心在于搞清楚他是一次性的無狀態連接方式,連接建立之后服務結束立馬斷開連接。。。
  • 還有就是搞清楚HTTP的報文格式

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(31)

http協議處于tcp/ip哪一層(再談Http和Https及TCPUDPIP協議分析)(32)

  • 上述的核心在于最開始的一行請求行 (請求方法 URL 協議版本) 狀態行(協議版本 狀態碼 狀態碼描述字段) 搞清楚空行的作用:分割報頭和正文
  • HTTPS對比 HTTP學習 : 一個是明文傳輸的角度來看 另外一個是從網站真實性,身份驗證,中間數據修改 的角度來看去分析,HTTPS相對 HTTP多了SSL加密層
  • 然后是UDP和TCP的學習:
  • UDP無連接的 基于一個一個數據包的傳輸的一種 不可靠傳輸協議 (但是因為其相對TCP的快速 (實時性更好) 可制定各種傳輸策略實現可靠傳輸 )在音視頻通話等領域有著不可替代的作用
  • TCP有連接的 基于數據流的可靠傳輸協議 (可靠的核心在于各種策略機制)
,
TAGS標簽:  http  協議  處于  一層  再談  http協議處于tc

歡迎分享轉載→http://www.avcorse.com/read-234308.html

Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖