【網絡原理】從零開始深入理解TCP的各項特性和機制.(三)

在這里插入圖片描述

上篇介紹了網絡原理傳輸層TCP協議的知識,本篇博客給大家帶來的是網絡原理剩余的內容, 總體來說,這部分內容沒有上兩篇文章那么重要,本篇知識有一個印象即可.
🐎文章專欄: JavaEE初階
🚀若有問題 評論區見
? 歡迎大家點贊 評論 收藏 分享
如果你不知道分享給誰,那就分享給薯條.
你們的支持是我不斷創作的動力 .

王子,公主請閱🚀

  • 要開心
    • 要快樂
      • 順便進步
  • 1. 網絡層
    • 1.1 IP協議
    • 1.2 地址管理
      • 1.2.1 地址管理
    • 1.2.2 路由選擇
  • 2. 數據鏈路層
  • 3.應用層協議DNS

要開心

要快樂

順便進步

1. 網絡層

1.1 IP協議

Ⅰ 基本概念

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

Ⅱ 協議頭格式

在這里插入圖片描述

① 4位版本號(version): 指定IP協議的版本, 對于IPv4來說, 就是4. 對于IPv6來說,就是6.
② 4位頭部長度(header length): IP頭部的長度是多少個32bit, 也就是 length * 4 的字節數. 4bit表示最大的數字是15, 因此IP頭部最大長度是60字節.
③ 8位服務類型(Type Of Service): 3位優先權字段(已經棄用), 4位TOS字段, 和1位保留字段(必須置為0). 4位TOS分別表示: 最小延時, 最大吞吐量, 最高可靠性, 最小成本. 這四者相互沖突, 只能選擇一個. 對ssh/telnet這樣的應用程序, 最小延時比較重要; 對于ftp這樣的程序, 最大吞吐量比較重要. 總的來說,8位服務類型能夠讓IP協議切換形態.
④ 16位總長度(total length): IP數據報整體占多少個字節. IP協議與UDP協議一樣,存在64KB的限制, 但是IP協議自身支持"拆包組包"功能.
⑤ 16位標識(id): 唯?的標識主機發送的報文. 如果一個大的IP數據報拆成了多個小的,拆出來的這多個小包的16位標識是相同的數值.
⑥ 3位標志字段: 第一位保留(暫時不用), 第二位置為1表示禁止拆包. 第三位表示"更多分片", 如果最后一個分片置為1, 其他是0. 類似于一個結束標記.
⑦ 13位分片偏移(framegament offset): 描述當前每個小的數據包(分片)的相對位置.
⑧ 8位生存時間(Time To Live, TTL): 數據報到達目的地的最大報文跳數. 一般是64. 每次經過一個路由, TTL -= 1, 一直減到0還沒到達, 那么就丟棄了. 這個字段主要是用來防止出現路由循環. 其實就是描述了這個 IP 數據包,在網絡上還能繼續存活多久.
⑨ 16位頭部校驗和: 使用CRC進行校驗, 來鑒別頭部是否損壞.
⑩ 32位源地址和32位目標地址(重要): 表示發送端和接收端. IP 地址,本質上就是一個 32位的整數.為了方便人來理解, 用 點分十進制 方式來表示.

在這里插入圖片描述

1.2 地址管理

1.2.1 地址管理

Ⅰ 網絡號和主機號

IP地址分為兩個部分, 網絡號和主機號
網絡號: 保證相互連接的兩個網段具有不同的標識;
主機號: 同一網段內, 主機之間具有相同的網絡號, 但是必須有不同的主機號;

在這里插入圖片描述

同一局域網中的設備,網絡號必須相同,主機號必須不同.


一個 IP 地址, 哪個部分是網絡號, 哪個部分是主機號,不是一定的,要通過子網掩碼來確定網絡號的。 如下圖: 一個255表示8個1. 被標記成1的就是網絡號.
在這里插入圖片描述
上圖的 1總共是24個,但是有些情況不是24個, 這并不是固定的,需要根據實際的網絡環境靈活配置.

Ⅱ 特殊的IP地址


① 將IP地址中的主機號全部設為0, 就成為了網絡號, 代表這個局域網; 這種IP不能給具體的主機分配. 比如: 192.168.100.0
② 將IP地址中的主機號全部設為1, 就成為了廣播地址, 用于給同一個鏈路中相互連接的所有主機發送數據包; 這種IP也不能給具體的主機分配. 比如: 192.168.100.255
前面說UDP 天然能支持廣播,就是和這個 IP 有關系,使用 UDP socket 給這個地址發送 UDP 數據報,局域網中所有的設備,都能收到這個數據報而TCP 無法和這個地址建立連接.
如果一個 IP 是 127 開頭的, 此時這個 |P 就是"環回 ip"(loopback) 這些IP地址都表示設備自身,自己發給自己. 比如最常用的127.0.0.1;
操作系統提供了一個特殊的"虛擬網卡",關聯到了這個 IP 上,這里的 環回 IP 主要的用途就是進行一些測試性的工作,環回 IP 能夠排除 網絡不通等干擾因素, 更好地排査代碼中的問題.

Ⅲ IP地址的數量限制

IP 地址是一個 32 位的整數. 2^32 約等于 42億9千萬, 按理來說地址是不應該重復的,互聯網發展到今天,能上網的設備是非常非常多的. 早就超過了 42億9千萬這個數字. 那么IP協議是如何解決IP地址不夠用的問題的?

IP協議解決地址不夠用問題的方法由下面兩個方案結合而成.

① 動態分配IP
設備不上網就不用分配IP地址,設備上網就給設備分配IP.

② NAT機制(網絡地址轉換)
本質上就是讓一個IP地址,代表一批設備.
把IP地址分成兩大類:
1. 內網IP(局域網IP), 如果一個IP地址是類似以下三種地址的話就表示內網IP.
10.x 或者172.16.x-172.31.x 或者192.168.x
在同一個局域網內部,內網IP 之間,不能重復在不同的局域網中, 內網 IP 之間, 可以重復。
2. 外網IP(廣域網IP), 除了內網IP剩下的就是外網IP了. 外網 IP 則始終都不允許重復,務必做到唯一.
通常一個小區/一個學校/一個公司,都是構成一個大的局域網 (這一個局域網中可能就有幾干甚至上萬個設備).
這樣的一個局域網,使用一個外網 IP 即可表示, 一個外網 |P 就代表了幾于個上萬個設備.

NAT機制具體是怎么工作的?

在這里插入圖片描述
路由器會將我的電腦的源IP替換成一個外網IP, 比如123.139.168.15. 之后傳輸給服務器,如下圖所示:

在這里插入圖片描述

內網IP無法在廣域網上使用, 當我的設備的IP數據包傳輸給服務器時, 路由器會對設備的源IP進行替換, 替換成一個外網IP. 同樣地, 當數據包從服務器傳回我的設備時, 也會對源IP進行替換.
如下圖所示:

在這里插入圖片描述
當服務器返回數據之后,路由器如何決定這個數據要交給哪個設備?
是要結合端口號來進行區分,“端口號可以用來區分同一個主機的不同進程,也可以區分不同主機的不同進程”.

NAT 機制最大的優勢就是純軟件方案, 也正是因為這個機制,局域網內部的設備,能夠主動訪問外網的設備外網的設備無法主動訪問局域網內部的設備. 之前寫的 UDP echo server 必須部署到云服務器上才能被其他主機訪問.

Ⅳ IPv6


IPv6 使用 16 個字節來表示 IP 地址, 總共有 2^128個地址,這個數字大到什么程度? 大到可以給地球上的每一粒砂子都分配一個不同的 ip 地址,甚至還綽綽有余.

IPv6并不是IPv4的簡單升級版. 這是互不相的兩個協議, 彼此并不兼容; 但是目前IPv6還沒有普及,因為升級成IPv6需要成本,并且花了錢網速不見得有多少提升,世界上大部分人都不愿意花這冤枉錢. 然而截止到 2023 年 8 月 28 日, 我國 IPv6 活躍用戶數達7.67億(網民總數為10.79億, 占比 71%), 世界領先.

我國為什么會大力推行IPv6呢?

IPv4 地址是由美國的一個"民間組織"負責分配, 所謂的民間組織,背后卻是由美國軍方贊助. 假設中美雙方之間出現了極端情況, 美國人這邊不給我們分配IP地址, 并且將之前給我們的地址收回,那勢必會對我們國家的互聯網行業造成重大損失, 為了預防美國人這一手, 國家大力推行IPv6是必然的.
目前來看,中國幾乎所有的互聯網公司都支持IPv6, 當然沒有默認開啟, 非必要應該不會默認開啟.

Ⅴ 私有IP地址和公網IP地址

如果一個組織內部組建局域網,IP地址只用于局域網內的通信,而不直接連到Internet上,理論上 使用任意的IP地址都可以,但是RFC 1918規定了用于組建局域網的私有IP地址.

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


一個路由器可以配置兩個IP地址, 一個是WAN口IP, 一個是LAN口IP(子網IP).
路由器LAN口連接的主機, 都從屬于當前這個路由器的子網中.
不同的路由器, 子網IP其實都是一樣的(通常都是192.168.1.1). 子網內的主機IP地址不能重復. 但是子網之間的IP地址就可以重復了.
每一個家用路由器, 其實又作為運營商路由器的子網中的一個節點. 這樣的運營商路由器可能會有很多級, 最外層的運營商路由器, WAN口IP就是一個公網IP了.
子網內的主機需要和外網進?通信時, 路由器將IP首部中的IP地址進行替換(替換成WAN口IP), 這樣逐級替換, 最終數據包中的IP地址成為一個公網IP. 這種技術稱為NAT(Network Address
Translation,網絡地址轉換).

如果希望我們自己實現的服務器程序, 能夠在公網上被訪問到, 就需要把程序部署在一臺具有外網IP的服務器上. .


1.2.2 路由選擇

在復雜的網絡結構中, 找出?條通往終點的路線;
路由的過程, 是一跳一跳(Hop by Hop) “問路” 的過程. 所謂 “一跳” 就是數據鏈路層中的一個區間. 具體在以太網中指從源MAC地址到目的MAC地址之間的幀傳輸區間.

IP數據包的傳輸過程也和問路一樣.

① 當IP數據包, 到達路由器時, 路由器會先查看目的IP;
② 路由器決定這個數據包能否直接發送給目標主機, 還是需要發送給下一個路由器;
③ 依次反復, 一直到達目標IP地址;
那么如何判定當前這個數據包該發送到哪里呢? 這個就依靠每個節點內部維護一個路由表; 此處路由表不展開說明.

2. 數據鏈路層

“以太網” 不是一種具體的網絡, 而是一種技術標準; 既包含了數據鏈路層的內容, 也包含了一些物理層的內容. 例如: 規定了網絡拓撲結構, 訪問控制方式, 傳輸速率等;
例如以太網中的網線必須使用雙絞線; 傳輸速率有10M, 100M, 1000M等;
以太網是當前應用最廣泛的局域網技術; 和以太網并列的還有令牌環網, 無線LAN等;

① 以太網幀格式

在這里插入圖片描述

源地址和目的地址是指網卡的硬件地址(也叫MAC地址), 長度是48位,是在網卡出廠時固化的;
幀協議類型字段有三種值,分別對應IP、ARP、RARP;
幀末尾是CRC校驗碼.

② 認識MAC地址
MAC地址用來識別數據鏈路層中相連的節點;
長度為48位, 即6個字節. 一般用16進制數字加上冒號的形式來表示(例如: 08:00:27:03:fb:19)
一臺電腦的MAC地址在網卡出廠時就確定了, 不能修改. MAC地址通常是唯一的,所以MAC地址 可以作為 一臺網絡設備 的身份標識

在這里插入圖片描述

IP地址描述的是路途總體的 起點 和 終點;
MAC地址描述的是路途上的每一個局部區間的起點和終點;

3.應用層協議DNS

DNS是一整套從域名映射到IP的系統.

① DNS背景

TCP/IP中使用IP地址和端口號來確定網絡上的一臺主機的一個程序. 但是IP地址不方便記憶.
于是人們發明了一種叫主機名的東西, 是一個字符串, 并且使用hosts文件來描述主機名和IP地址的關系.
DNS是應用層協議.
DNS底層使用UDP進行解析.
瀏覽器會緩存DNS結果.

② 全世界有很多設備需要同時進行 DNS 的請求, 這一組 DN服務器,能抗住這么高的請求量? 一個服務器硬件資源是有限的,服務器處理每個請求,肯定都是要消耗一定的資源的,單位時間內,請求太多,消耗的總資源超過了機器本身的資源上限,機器就掛了.

1. 開源, 搭建DNS系統的大佬們號召各個網絡運營商都可以自己搭建一組"DNS 鏡像服務器", 鏡像服務器的數據,都從他們這邊來同步, 此時用戶就會優先訪問離自己最近的鏡像服務器.


2. 節流, 讓請求量變少. 讓每個上網的設備,搞個本地緩存,假設我的電腦1分鐘之內要訪問10次百度,那么只讓第一次訪問請求DSN,把請求的結果保存到本地,后面9次請求都使用第一次的結果即可.


一般進行 DNS 解析,訪問的都是就近的運營商的鏡像DNS.


本篇博客到這里就結束啦, 感謝觀看 ???

🐎期待與你的下一次相遇😊😊😊

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

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

相關文章

解決qnn htp 后端不支持boolean 數據類型的方法。

一、背景 1.1 問題原因 Qnn 模型在使用fp16的模型轉換不支持類型是boolean的cast 算子,因為 htp 后端支持量化數據類型或者fp16,不支持boolean 類型。 ${QNN_SDK_ROOT_27}/bin/x86_64-linux-clang/qnn-model-lib-generator -c ./bge_small_fp16.cpp -b …

使用Three.js搭建自己的3Dweb模型(從0到1無廢話版本)

教學視頻參考:B站——Three.js教學 教學鏈接:Three.js中文網 老陳打碼 | 麒躍科技 一.什么是Three.js? Three.js? 是一個基于 JavaScript 的 ?3D 圖形庫,用于在網頁瀏覽器中創建和渲染交互式 3D 內容。它基于 WebGL&#xff0…

PostgreSQL WAL 冪等性詳解

1. WAL簡介 WAL(Write-Ahead Logging)是PostgreSQL的核心機制之一。其基本理念是:在修改數據庫數據頁之前,必須先將這次修改操作寫入到WAL日志中。 這確保了即使發生崩潰,數據庫也可以根據WAL日志進行恢復。 恢復的核…

git提交規范記錄,常見的提交類型及模板、示例

Git提交規范是一種約定俗成的提交信息編寫標準,旨在使代碼倉庫的提交歷史更加清晰、可讀和有組織。以下是常見的Git提交類型及其對應的提交模板: 提交信息的基本結構 一個標準的Git提交信息通常包含以下三個主要部分: Header?:描…

FastAPI系列06:FastAPI響應(Response)

FastAPI響應(Response) 1、Response入門2、Response基本操作設置響應體(返回數據)設置狀態碼設置響應頭設置 Cookies 3、響應模型 response_model4、響應類型 response_classResponse派生類自定義response_class 在“FastAPI系列0…

每日一題(小白)模擬娛樂篇33

首先,理解題意是十分重要的,我們是要求最短路徑,這道題可以用dfs,但是題目給出的數據是有規律的,我們可以嘗試模擬的過程使用簡單的方法做出來。每隔w數字就會向下轉向,就比如題目上示例的w6,無…

哈希封裝unordered_map和unordered_set的模擬實現

文章目錄 (一)認識unordered_map和unordered_set(二)模擬實現unordered_map和unordered_set2.1 實現出復用哈希表的框架2.2 迭代器iterator的實現思路分析2.3 unordered_map支持[] (三)結束語 (…

Java學習-Java基礎

1.重寫與重載的區別 重寫發生在父子類之間,重載發生在同類之間構造方法不能重寫,只能重載重寫的方法返回值,參數列表,方法名必須相同重載的方法名相同,參數列表必須不同重寫的方法的訪問權限不能比父類方法的訪問權限更低 2.接口和抽象類的區別 接口是interface,抽象類是abs…

BG開發者日志0427:故事的起點

1、4月26日晚上,BG項目的gameplay部分開發完畢,后續是細節以及試玩版優化。 開發重心轉移到story部分,目前剛開始, 確切地說以前是長期擱置狀態,因為過去的四個月中gameplay部分優先開發。 --- 2、BG這個項目的起點…

頭歌實訓之游標觸發器

🌟 各位看官好,我是maomi_9526! 🌍 種一棵樹最好是十年前,其次是現在! 🚀 今天來學習C語言的相關知識。 👍 如果覺得這篇文章有幫助,歡迎您一鍵三連,分享給更…

【深度學習】多頭注意力機制的實現|pytorch

博主簡介:努力學習的22級計算機科學與技術本科生一枚🌸博主主頁: Yaoyao2024往期回顧:【深度學習】注意力機制| 基于“上下文”進行編碼,用更聰明的矩陣乘法替代笨重的全連接每日一言🌼: 路漫漫其修遠兮,吾…

java16

1.API續集 可以導入別人寫好的clone的jar包 注意:方法要有調用者,如果調用者是null就會報錯 2.如何導入別人寫好的jar包 復制jar包然后粘貼在lib里面,然后右鍵點擊jar包再點擊下面的add 3.關于打印java中的引用數據類型

PostgreSQL的擴展 credcheck

PostgreSQL的擴展 credcheck credcheck 是 PostgreSQL 的一個安全擴展,專門用于強制實施密碼策略和憑證檢查,特別適合需要符合安全合規要求的數據庫環境。 一、擴展概述 1. 主要功能 強制密碼復雜度要求防止使用常見弱密碼密碼過期策略實施密碼重復使…

MyBatis中的@Param注解-如何傳入多個不同類型的參數

mybatis中參數識別規則 默認情況下,MyBatis 會按照參數位置自動分配名稱:param1, param2, param3, ...或者 arg0, arg1。 // Mapper 接口方法 User getUserByIdAndName(Integer id, String name); 以上接口在XML中只能通過param1或者arg0這樣的方式來引用,可讀性差。 &l…

DIFY教程第一集:安裝Dify配置環境

一、Dify的介紹 https://dify.ai/ Dify 是一款創新的智能生活助手應用,旨在為您提供便捷、高效的服務。通過人工智能技術, Dify 可以實現語音 助手、智能家居控制、日程管理等功能,助您輕松應對生活瑣事,享受智慧生活。簡約的…

5、Rag基礎:RAG 專題

RAG 簡介 什么是檢索增強生成? 檢索增強生成(RAG)是指對大型語言模型輸出進行優化,使其能夠在生成響應之前引用訓練數據來源之外的權威知識庫。大型語言模型(LLM)用海量數據進行訓練,使用數十億個參數為回答問題、翻譯語言和完成句子等任務生成原始輸出。在 LLM 本就強…

GAMES202-高質量實時渲染(homework1)

目錄 Homework1shadow MapPCF(Percentage Closer Filter)PCSS(Percentage Closer Soft Shadow) GitHub主頁:https://github.com/sdpyy1 作業實現:https://github.com/sdpyy1/CppLearn/tree/main/games202 Homework1 shadow Map 首先需要完成MVP矩陣的構造&#xf…

JDK(Ubuntu 18.04.6 LTS)安裝筆記

一、前言 本文與【MySQL 8(Ubuntu 18.04.6 LTS)安裝筆記】同批次:先搭建數據庫,再安裝JDK,后面肯定就是部署Web應用:典型的單機部署。“麻雀雖小五臟俱全”,善始善終,還是記下來吧。…

軟件測試之接口測試常見面試題

一、什么是(軟件)接口測試? 接口測試:是測試系統組件間接口的一種測試方法 接口測試的重點:檢查數據的交換,數據傳遞的正確性,以及接口間的邏輯依賴關系 接口測試的意義:在較早期開展,在軟件開發的同時…

Lua 第11部分 小插曲:出現頻率最高的單詞

在本章中,我們要開發一個讀取并輸出一段文本中出現頻率最高的單詞的程序。像之前的小插曲一樣,本章的程序也十分簡單但是也使用了諸如迭代器和匿名函數這樣的高級特性。 該程序的主要數據結構是一個記錄文本中出現的每一個單詞及其出現次數之間關系的表。…