網絡原理----TCP/IP(3)

核心機制七----延時應答

默認情況下,接收方都是在收到數據報的第一時間,就返回ack,但是可以通過延時返回ack的方式來提高效率,理論上不是100%提高效率,但還是有一定幫助的。

因為如果接收數據的主機?刻返回ACK應答,這時候返回的窗?可能?較?.

  • 假設接收端緩沖區為1M.?次收到了500K的數據;如果?刻應答,返回的窗?就是500K;?但實際上可能處理端處理的速度很快,10ms之內就把500K數據從緩沖區消費掉了?,在這種情況下,接收端處理還遠沒有達到??的極限,即使窗?再放??些,也能處理過來;
  • 如果接收端稍微等?會再應答,?如等待200ms再應答,那么這個時候返回的窗???就是1M;??定要記得,窗?越?,?絡吞吐量就越?,傳輸效率就越?.我們的?標是在保證?絡不擁塞的情況下 盡量提?傳輸效率;

那么所有的包都可以延遲應答么?肯定也不是;

? 數量限制:每隔N個包就應答?次;?? 時間限制:超過最?延遲時間就應答?次;?具體的數量和超時時間,依操作系統不同也有差異;?般N取2,超時時間取200ms(這個數值不固定,根據實際情況而定);

核心機制八---捎帶應答

在延遲應答的基礎上,我們發現,很多情況下,客?端服務器在應?層也是"?發?收"的.意味著客?端 給服務器說了"How areyou",服務器也會給客?端回?個"Fine,thank you";?那么這個時候ACK就可以搭順??,和服務器回應的"Fine,thank you"?起回給客?端。

引入了延時應答,ack可以往后延時一段時間,恰好這個時候要返回響應數據,此時就可以把ack也代入到響應數據中,一起返回,ack設為1,窗口大小設為接收緩沖區剩余值,確認序號設為合適的值;把兩個包合成一個,就能起到提高效率的作用。

核心機制九---面向字節流

創建?個TCP的socket,同時在內核中創建?個發送緩沖區和?個接收緩沖區;

  • 調?write時,數據會先寫?發送緩沖區中;?如果發送的字節數太?,會被拆分成多個TCP的數據包發出;?如果發送的字節數太短,就會先在緩沖區?等待,等到緩沖區?度差不多了,或者其他合適的時機發 送出去;
  • ?接收數據的時候,數據也是從?卡驅動程序到達內核的接收緩沖區;然后應?程序可以調?read從接收緩沖區拿數據;
  • 另???,TCP的?個連接,既有發送緩沖區,也有接收緩沖區,那么對于這?個連接,既可以讀數據,也可以寫數據.
  • 這個概念叫做全雙?由于緩沖區的存在,TCP程序的讀和寫不需要??匹配,例如:寫100個字節數據時,可以調??次write寫100個字節,也可以調?100次write,每次寫?個字節;讀100個字節數據時,也完全不需要考慮寫的時候是怎么寫的,既可以?次read100個字節,也可以? 次read?個字節,重復100次;

在這個過程中會出現粘包問題

1.?先要明確,粘包問題中的"包",是指的應?層的數據包.?

  • ?在TCP的協議頭中,沒有如同UDP?樣的"報??度"這樣的字段,但是有?個序號這樣的字段.
  • ?站在傳輸層的?度,TCP是?個?個報?過來的.按照序號排好序放在緩沖區中.站在應?層的?度,看到的只是?串連續的字節數據.?那么應?程序看到了這么?連串的字節數據,就不知道從哪個部分開始到哪個部分,是?個完整的應 ?層數據包.

2. 那么如何避免粘包問題呢?歸根結底就是?句話,明確兩個包之間的邊界.?

  • 對于定?的包,保證每次都按固定??讀取即可;例如上?的Request結構,是固定??的,那么就從 緩沖區從頭開始按sizeof(Request)依次讀取即可;
  • 對于變?的包,可以在包頭的位置,約定?個包總?度的字段,從?就知道了包的結束位置;?對于變?的包,還可以在包和包之間使?明確的分隔符(應?層協議,是程序猿??來定的,只要保證 分隔符不和正?沖突即可);

?3.思考:對于UDP協議來說,是否也存在"粘包問題"呢?

  • ?對于UDP,如果還沒有上層交付數據,UDP的報??度仍然在.同時,UDP是?個?個把數據交付給應 ?層.就有很明確的數據邊界.
  • 站在應?層的站在應?層的?度,使?UDP的時候,要么收到完整的UDP報?,要么不收.不會出 現"半個"的情況.

核心機制十----異常情況的處理

TCP在通信過程中存在特殊情況

1.進程終止:進程終止和主動退出沒有本質區別,進程終止會釋放?件描述符,仍然可以發送FIN,進程雖然沒了,但是TCP的連接信息還存在,此時四次揮手還是可以正常進行的。。

2.主機關機:正常流程的關機,本質上還是會先殺死所有的用戶進程,與進程終止情況相同。

最終B任然可以把連接釋放掉?

3.主機掉電/網線斷開:接收端認為連接還在,?旦接收端有寫?操作,接收端發現連接已經不在了,就 會進?reset.即使沒有寫?操作,TCP??也內置了?個保活定時器,會定期詢問對?是否還在.如果 對?不在,也會把連接釋放。

主機掉電:

網線斷開就是上面兩種情況的結合

TCP小結

為什么TCP這么復雜?因為要保證可靠性,同時?盡可能的提?性能.

  • 可靠性:?? 校驗和 ? 序列號(按序到達)? 確認應答 ? 超時重發 ? 連接管理 ? 流量控制 ? 擁塞控制
  • 提?性能:? 滑動窗?? 快速重傳 ? 延遲應答 ? 捎帶應答
  • 其他:?? 定時器(超時重傳定時器,保活定時器,TIME_WAIT定時器等)

TCP與UDP的對比

TCP用于可靠傳輸的情況,應用于文件傳輸,重要狀態更新等場景;UDP用于對?速傳輸和實時性要求較?的通信領域,例如,早期的QQ,視頻傳輸等.另外UDP可以? 于?播;

如何基于UDP實現可靠運輸?往TCP上套

3.網絡層

3.1IP協議

基本概念

? 主機:配有IP地址,但是不進?路由控制的設備;?? 路由器:即配有IP地址,?能進?路由控制;?? 節點:主機和路由器的統稱;

協議頭格式:

IP協議/網絡層做的工作,主要是兩個:

1.地址管理,使用IP地址這樣的概念,標識網絡上的某個設備的位置;

2.路由器選擇,在兩個通信的節點之間,規劃處一個合理的路徑。

各部分相關介紹:

  1. 4位版本號(version):指定IP協議的版本,對于IPv4來說,就是4.
  2. 4位首部長度:IP協議的報頭,也是變長的選項,IP頭部的?度是多少個32bit,也就是length*4的字節數.4bit表?最 ?的數字是15,因此IP頭部最??度是60字節.
  3. 8位服務類型:決定了IP協議的工作方式,3位優先權字段(已經棄?),4位TOS字段,和1位保留字段(必須置為 0).4位TOS分別表?:最?延時,最?吞吐量,最?可靠性,最?成本.這四者相互沖突,只能選擇?個.?對于ssh/telnet這樣的應?程序,最?延時?較重要;對于ftp這樣的程序,最?吞吐量?較重要.
  4. 16位總長度:IP數據報整體占多少個字節,就是一個IP數據報(報頭+載荷)的長度.
  5. 16位標識:拆包,把拆出來的多個包,設為相同的標識;組包,把相同標識的數據包組合到一起.
  6. 3位標志:其中一個標志位表示是否觸發了拆包操作,還有一個表示當前包是否是最后一個。
  7. 13位片偏移:描述了先后順序,偏移小的放前面,大的放后面.
  8. 8位生存時間:數據報到達?的地的最?報?跳數.?般是64.每次經過?個路 由,TTL-=1,?直減到0還沒到達,那么就丟棄了.這個字段主要是?來防?出現路由循環.
  9. 8位協議:標識傳輸層使用哪種協議,分用的時候,IP協議解析IP數據報的時候,拿到載荷,交給上層處理,此處8位協議號,就能起到區分效果.(傳輸層到應用層通過端口號區分,網絡層到傳輸層=>8位協議,數據鏈路層到網絡層=>也有一個類似的協議編號)
  10. 16位首部校驗和:使?CRC進?校驗,來鑒別頭部是否損壞.
  11. 32位源地址和32位?標地址:表?發送端和接收端,IP協議最關鍵的部分,IP地址本質上是通過32位的整數來表示的,由于32位 整數不方便閱讀,通常會把IP寫作點分十進制表示方式,用三個點分成四個部分。如圖:.

3.2地址管理

IP不夠了該怎么辦?

1.動態分配IP:上網再分配,不上網就不分配,有所緩解,不能根本上解決問題.

2.NAT機制,網絡地址轉換(當前網絡世界最主要的方式),把所有的IP分成兩個大類

公網IP/外網IP:公網IP是唯一的

私網IP/內網IP:私網IP在不同的局域網中,可以重復。

  • 10.*,前8位是?絡號,共16,777,216個地址?
  • 172.16.到172.31.,前12位是?絡號,共1,048,576個地址
  • 192.168.*,前16位是?絡號,共65,536個地址?包含在這個范圍中的,都成為私有IP,其余的則稱為全局IP(或公?IP);

NAT機制,就可以用一個外網IP對應到一系列的內網的設備,一個設備有一個獨立的局域網IP(允許重復),但是多個設備共用同一個外網IP(不允許重復).

NAT背景下網絡通信如何進行

1.同一個局域網下,設備A訪問設備B,由于IP本身不允許重復,自然不收任何影響,NAT不起到作用.

2.公網設備A訪問公網設備B,由于公網IP本身也不重復,也不受到影響,NAT不起作用.

3.不同局域網,設備A訪問設備B是不允許的,NAT機制禁止這樣的訪問方式.

4.局域網設備A訪問公網設備B.就是網絡地址映射。

相關流程圖:

5.公網設備A訪問局域網設備A,不允許.

3.IPv6:IPv6并不是IPv4的簡單升級版.這是互不相?的兩個協議,彼此并不兼容;IPv6?16字節128位 來表??個IP地址;但是?前IPv6還沒有普及.

IP地址的其他規則

?段劃分

IP地址分為兩個部分:?絡號和主機號

???絡號:保證相互連接的兩個?段具有不同的標識;主機號:同??段內,主機之間具有相同的?絡號,但是必須有不同的主機號;

在同一個局域網中,網絡號必須相同,主機號必須不同;兩個相鄰的局域網中,網絡號必須不同,主機號無限制。

  • ?不同的??其實就是把?絡號相同的主機放到?起.
  • 如果在??中新增?臺主機,則這臺主機的?絡號和這個??的?絡號?致,但是主機號必須不能和 ??中的其他主機重復.?通過合理設置主機號和?絡號,就可以保證在相互連接的?絡中,每臺主機的IP地址都不相同.

那么問題來了,?動管理??內的IP,是?個相當?煩的事情.

?? 有?種技術叫做DHCP,能夠?動的給??內新增主機節點分配IP地址,避免了?動管理IP的不便.??般的路由器都帶有DHCP功能.因此路由器也可以看做?個DHCP服務器。

過去曾經提出?種劃分?絡號和主機號的?案,把所有IP地址分為五類,如下圖所?:

這個方案,固定分為五類,使用前綴來區分是哪一類,每一個類,網絡主機號都是固定的,但隨著Internet的?速發展,這種劃分?案的局限性很快顯現出來,?多數組織都申請B類?絡地址,導致B 類地址很快就分配完了,?A類卻浪費了?量地址;

針對這種情況提出了新的劃分?案,稱為CIDR(Classless Interdomain Routing):

引??個額外的??掩碼(subnet mask)來區分?絡號和主機號;??掩碼也是?個32位的正整數.通常??串"0"來結尾;?將IP地址和??掩碼進?"按位與"操作,得到的結果就是?絡號;??絡號和主機號的劃分與這個IP地址是A類、B類還是C類?關;

可?,IP地址與??掩碼做與運算可以得到?絡號,主機號從全0到全1就是??的地址范圍;

特殊的IP地址

  • ?將IP地址中的主機地址全部設為0,就成為了?絡號,代表這個局域?;
  • ?將IP地址中的主機地址全部設為1,就成為了?播地址,?于給同?個鏈路中相互連接的所有主機發 送數據包;
  • ?127.*的IP地址?于本機環回(loop back)測試,通常是127.0.0.1。

小結

1.IPv4地址,占幾個字節,不夠用了(動態分配,NAT,IPv6);

2.IP地址構成:網絡號+主機號? 子網掩碼;

3.特殊的IP:主機號為0,主機號全為1,127開頭。

3.3路由選擇

通過IP協議進行數據轉發的過程,在復雜的?絡結構中,找出?條通往終點的路線;路由的過程,是?跳?跳"問路"的過程.?所謂"?跳"就是數據鏈路層中的?個區間.具體在以太?中指從源MAC地址到?的MAC地址之間的幀 傳輸區間.

主要步驟:

IP數據包的傳輸過程也和問路一樣,當數據包到達某個路由器的時候,就會匹配這個這個路由器的“路由表”(路由表記錄了這個路由器周圍的設備的IP,以及每個設備要通過那個路口轉發過去);如果目的IP剛好匹配到了路由表中的記錄,直接按照當前的對應的口轉發過去就行了;如果沒有匹配到,路由表就會有下一個特殊的表項,“下一跳”指向的設備,即上一級路由器所在的位置(這些路由器越往上,涵蓋的范圍也越大)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72357.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72357.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72357.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MacBook Pro使用FFmpeg捕獲攝像頭與麥克風推流音視頻

FFmpeg查看macos系統音視頻設備列表 ffmpeg -f avfoundation -list_devices true -i "" 使用攝像頭及麥克風同時推送音頻及視頻流: ffmpeg -f avfoundation -pixel_format yuyv422 -framerate 30 -i "0:1" -c:v libx264 -preset ultrafast -b:v 1000k -…

部署Joplin私有云服務器postgres版-docker compose

我曾經使用過一段時間 Joplin,官方版本是收費的,而我更傾向于將數據掌握在自己手中。因此,在多次權衡后,我決定自己搭建 Joplin 服務器并進行嘗試。 個人搭建的版本與數據庫直連,下面是使用 Docker Compose 配置數據庫…

SQL的select語句完整的執行順序

SQL的SELECT語句的執行順序可以用"做菜流程"來類比理解。雖然我們寫SQL時按SELECT…FROM…WHERE…順序寫,但數據庫執行順序完全不同。以下是通俗易懂的講解(附流程圖和示例): 🔧 執行順序流程圖&#xff1a…

Spring Cloud LoadBalancer詳解

一、介紹 Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客戶端負載均衡器,抽象和實現,用來替代Ribbon(已經停更), 二、Ribbon和Loadbalance 對比 組件組件提供的負載策略支持負載的客戶端Ribbon隨機 RandomRule輪詢 RoundRobinRule 重試 RetryRule最低并發 Bes…

ubuntu中ollama設置記錄

自己同一臺電腦主機安裝3080和3090顯卡,測試發現ollama只默認跑在3090上;故查看一下設置,成功也把3080也運行起來了。 原因如下: 開始設置記錄: Environment Variables: OLLAMA_DEBUG 作用:顯示額外的調試…

RabbitMQ系列(四)基本概念之Exchange

在 RabbitMQ 中,Exchange(交換機) 是消息路由的核心組件,負責根據規則將生產者發送的消息分發到對應的隊列(Queue)中。以下是其核心功能與分類的詳細說明: 一、Exchange 的核心作用 消息路由樞…

有沒有什么免費的AI工具可以幫忙做簡單的ppt?

互聯網各領域資料分享專區(不定期更新): Sheet 正文 1. 博思AIPPT 特點:專為中文用戶設計,支持文本/文件導入生成PPT,內置海量模板和智能排版功能,涵蓋商務、教育等多種場景。可一鍵優化布局、配色,并集成AI繪圖功能(文生圖/圖生圖)。適用場景:職場匯報、教育培訓、商…

【Python · PyTorch】循環神經網絡 RNN(基礎應用)

【Python PyTorch】循環神經網絡 RNN(簡單應用) 1. 簡介2. 模擬客流預測(數據集轉化Tensor)3.1 數據集介紹3.2 訓練過程 3. 模擬股票預測(DataLoader加載數據集)3.1 IBM 數據集3.1.2 數據集介紹3.1.3 訓練…

【JSON2WEB】15 銀河麒麟操作系統下部署JSON2WEB

【JSON2WEB】系列目錄 【JSON2WEB】01 WEB管理信息系統架構設計 【JSON2WEB】02 JSON2WEB初步UI設計 【JSON2WEB】03 go的模板包html/template的使用 【JSON2WEB】04 amis低代碼前端框架介紹 【JSON2WEB】05 前端開發三件套 HTML CSS JavaScript 速成 【JSON2WEB】06 JSO…

地基簡識Spring MVC 組件

Spring MVC 是一個基于 MVC 設計模式的框架,其核心組件協同工作以處理 HTTP 請求并生成響應。以下是各組件的詳細說明及其協作流程: 一、?核心組件 ?DispatcherServlet(前端控制器)? ?作用:接收所有請求并協調其他…

Spring Boot(七):Swagger 接口文檔

1. Swagger 簡介 1.1 Swagger 是什么? Swagger 是一款 RESTful 風格的接口文檔在線自動生成 功能測試功能軟件。Swagger 是一個規范和完整的框架,用于生成、描述、調用和可視化 RESTful 風格的 Web 服務。目標是使客戶端和文件系統作為服務器以同樣的…

cursor 彈出在簽出前,請清理倉庫工作樹 窗口

問題出現的背景:是因為我有兩臺電腦開發,提交后,另一個電腦的代碼是舊的,這個時候我想拉取最新的代碼,就會出現如下彈窗,因為這個代碼暫存區有記錄或者工作區有代碼的修改,所以有沖突&#xff0…

Cocos Creator3.8.6拖拽物體的幾種方式

文章目錄 前言一、第一種通過UILocation二、第二種通過UIDelta實現總結 前言 在游戲開發中,拖拽物體是一個非常常見的交互功能,無論是用于UI元素的拖動,還是場景中物體的移動,拖拽操作都能極大地提升用戶體驗。Cocos Creator 3.8…

在 Mac mini M2 上本地部署 DeepSeek-R1:14B:使用 Ollama 和 Chatbox 的完整指南

隨著人工智能技術的飛速發展,本地部署大型語言模型(LLM)已成為許多技術愛好者的熱門選擇。本地部署不僅能夠保護隱私,還能提供更靈活的使用體驗。本文將詳細介紹如何在 Mac mini M2(24GB 內存)上部署 DeepS…

《UE5_C++多人TPS完整教程》學習筆記33 ——《P34 關卡與大廳之間的過渡(Transition Level And Lobby)》

本文為B站系列教學視頻 《UE5_C多人TPS完整教程》 —— 《P34 關卡與大廳之間的過渡(Transition Level And Lobby)》 的學習筆記,該系列教學視頻為計算機工程師、程序員、游戲開發者、作家(Engineer, Programmer, Game Developer,…

Nginx 配置與常用命令速查手冊

Nginx 配置文件結構 Linux 中 Nginx 的配置文件: 通常位于 /etc/nginx/nginx.conf 或 /usr/local/nginx/conf/nginx.conf。 Nginx 采用模塊化設計,主要分為以下部分: 1. 全局塊 配置與服務器整體相關的參數,如工作進程數、日…

Vscode 便用快捷鍵設置教程

文章目錄 簡介:1. go to define (跳轉到函數定義的位置)2. go to declaration (跳轉到函數聲明的位置)3. move line (上下移動本行代碼)3.1上下復制本行代碼 4. 前進和后退(就是前進到光標上一次停留的位置,和后退到那…

Vim 常用快捷鍵大全:跳轉、編輯、查找替換全解析

摘要: Vim 是一款非常強大的文本編輯器,許多程序員和系統管理員都離不開它。 本文詳細介紹了 Vim 編輯器中的常用快捷鍵和命令,從基本模式、光標移動、編輯操作到查找替換,再到文件保存等常用操作,幫助你快速上手并提…

【實戰篇】【深度解析DeepSeek:從機器學習到深度學習的全場景落地指南】

一、機器學習模型:DeepSeek的降維打擊 1.1 監督學習與無監督學習的"左右互搏" 監督學習就像學霸刷題——給標注數據(參考答案)訓練模型。DeepSeek在信貸風控場景中,用邏輯回歸模型分析百萬級用戶數據,通過特征工程挖掘出"凌晨3點頻繁申請貸款"這類魔…

Vue核心知識:Vue動態權限到按鈕完整方案

為了進一步實現上面提到的動態路由功能,并且加入對每個路由的權限控制(即增、刪、改、查按鈕的權限控制),我們需要對數據庫、后端接口、前端的設計做一些改進和擴展。下面我將詳細描述如何在現有方案的基礎上加入對路由的增、刪、…