理解計算機系統_網絡編程(2)

前言
? ? ? ?

? ? ? ? 以<深入理解計算機系統>(以下稱“本書”)內容為基礎,對程序的整個過程進行梳理。本書內容對整個計算機系統做了系統性導引,每部分內容都是單獨的一門課.學習深度根據自己需要來定

引入

? ? ? ? 接續上一篇理解計算機系統_網絡編程(1)-CSDN博客

國際互聯網

? ? ? ? Internet的硬件與軟件組織

? ? ? ? 本書原話如下(黑體字):

? ? ? ? 全球IP因特網是最著名和最成功的互聯網絡實現.以下是一個客戶端--服務器應用程序的基本硬件和軟件組織

? ? ? ? ?每臺因特網主機都運行實現TCP/IP協議,幾乎每個現代計算機系統都支持這個協議?

? ? ? ? ----解讀:從圖中可以看出,TCP/IP協議由操作系統內核支持,并對外提供套接字接口.程序員是面向套接字接口編程的.用戶代碼將由系統調用轉化成機器代碼控制硬件(網絡適配器)完成數據傳送.

? ? ? ? 程序員怎樣看待網絡

? ? ? ? 從程序員的角度,我們可以把因特網看做一個世界范圍的主機集合,滿足以下特性:

? ? ? ? ? ? ? ? 1.主機集合被映射為一組32位的IP地址

? ? ? ? ? ? ? ? 2.這組IP地址被映射為一組稱為因特網域名的標識符

? ? ? ? ? ? ? ? 3.因特網主機上的進程能夠通過連接和任何其他因特網主機上的進程通信? ---黑體字是原話

????????----解讀:不管主機是客戶端還是服務器,都以IP地址在網絡上標識其身份.對于服務器而言,IP地址被映射成因特網域名.客戶端與服務器之間通過連接進行通信

====================內容分割線↓============================================

? ? ? ? IPv4和IPv6???????

? ? ? ? 理論上IPv4已經夠用了

????????問題:互聯網上主機擁有自己的IP地址,IP地址是32位,最大數是40多億,意味著超過這個數字的主機設備將不能聯網,但事實真的如此嗎?

????????答案是否定的.之前筆者提到過以多個數據來建立"層級"或者更大數據的例子.例如:8位機理論上可以尋址個數也可以是無限的,原理是通過"指針"來延展.單個8位能表達256個數,而當8位數據放的是指針,用2個8位數據就能表達65536個數,即達到16位數的效果.

? ? ? ? IP地址的延展基于相同的思想.一個IP地址本來用作映射一臺主機,當用一個IP地址映射一個網關的時候,這個IP地址可以表示一個子網絡里的n臺主機,如果n臺主機仍覺得不夠,那么在子網絡中的某個IP地址再次用作網關,這時最初的那個IP地址可以表示(n-1)*(n-1)臺主機,依此類推.當然這是一種簡化的表達,其中可能牽涉到帶寬分配,路由算法等細節,筆者不知道具體實現,但有這樣的技術.

? ? ? ? 這種思想也可以放入數據結構中,建立層級的數據類型,筆者以前帖子中有所提及,可翻看

====================內容分割線↑============================================

接下來部分內容逐一分析IP地址,域名映射,主機通信

IP地址

? ? ? ? 本書原話:一個IP地址就是一個32位無符號整數,網絡程序將IP地址存放在以下結構中

struct in_addr{uint32_t s_addr;
}

? ? ? ? ----解讀:一個標量地址被放入一個結構中,有些令人費解,用個全局變量就可以表達的.而本書對此表示承認,說"是套接字接口早期實現的不幸產物",目前體會不到,不作解讀.

大端法和小端法

? ? ? ? 本書原話:在IP地址結構中存放的地址總是以(大端法)網絡字節順序存放的,即使主機字節順序是小端法.

? ? ? ? ----解讀:大端法和小端法沒有多難,但可以加深對數據存儲和訪問的理解,所以值得一說.

????????假設有個32位地址0x12345678,里面的數字是0x11223344.用C語言表示如下:

int *p= 0x12345678;   //指針指向該地址
*p=0x11223344;        //賦值
p+=4;                 //往下偏移4,指向0x1234567c

????????有一個問題:每次指針偏移4,指向下一個地址,那中間地址數據在哪里?0x12345679,0x1234567a,0x1234567b?

????????實際上*p=0x11223344這個32位數包含了這三個字節的值.一個字節是8位,最大表示0xff(十進制255) .*p把這四個字節的值一起表達了,0x12345678這個地址里的數是0x44,地址79里的數是0x33,地址7a里的數是0x22,地址7b里的值是0x11.圖示如下:

????????大小端法在字節順序上有所不同,圖示如下:

? ? ? ? 注意:筆者查了某度,說法似乎不一致.細想是一樣的,把左邊定義成小端或者右邊定義成小端,不影響結果.

????????相比較,小端法適合思維習慣(當然也可能是先入為主,先學主機表示再學網絡).

????????對于程序員來說,大端法和小端法不會影響代碼,不必去糾結.那么為什么要作區別呢?筆者估計在機器層面,把數據從網絡上取下來的時候,位置不同數據不同.程序員只需要記住某種情況下需要調用這個api.

IP地址和點分十進制串之間的轉換

? ? ? ? 具體不知道在什么情況下能用得上,所以不做過多解讀.

? ? ? ? 記住一個例子:十進制串0xffffffff對應的IP地址是255.255.255.255

因特網域名

? ? ? ? 因特網客戶端和服務器互相通信時使用的是IP地址.然而,對于人們而言,大整數是很難記住的,所以因特網也定義了一組更加人性化的域名,以及一種將域名映射到IP地址的機制.---黑體字是原話

? ? ? ? ---解讀:域名的由來

? ? ? ? 域名集合形成一個層次結構

? ? ? ? 一旦一個組織得到一個二級域名,那么他可以在這個子域中創建任何新的域名.如cs.cmu.edu

?????????---解讀:創建一個網站至少需要二級域名.

DNS數據庫

? ? ? ? 因特網定義了域名集合和IP地址集合之間的映射.直到1988年,這個映射都是通過一個叫做HOSTS.TXT的文本文件來手工維護.從那以后,這個映射通過分布世界范圍內的數據庫DNS(Domain Name System,域名系統)來維護.

? ? ? ? DNS數據庫由上百萬的主機條目結構組成,其中每條定義了一組域名和一組IP地址之間的映射.從數學意義來講,可以認為每條主機條目就是一個域名和IP地址的等價類.

? ? ? ? ---解讀:條目類設計

//不太可能設計
struct Entry{vector<string> domain_name;vector<string> IP_address;
}

? ? ? ? 域名系統包含有上百萬個Entry對象,可對其進行添加,查找和修改等操作.試試看著不太可能,同樣應選擇"層級"的數據結構---筆者前面帖子有闡述????????

//有可能設計
struct Com{string next_name;vector<string> IP_address;vector<Com> com;
}

? ? ? ? 查找算法:將域名按照"."隔開的字符串取出,每個字符串交給next_name做匹配,如果匹配成功,則IP_address是所需要的字符串集合---即上面的點分十進制串,再將其轉化成IP地址,可訪問對應服務器.

? ? ? ? 如果按照這個思路,需要確定一級域名的所有形式,即第一層域名必須只有com,edu,gov,org和net.然后分別寫出struct Edu,struct Gov,struct Org和struct Net

? ? ? ? 注意:能不能寫到一起設計個類?因為至少兩層域名才得到IP地址,比如csdn.net可以但是net不可以.所以類型設計的時候分開比較好.

域名和IP地址的對應

? ? ? ? 1>一一對應

? ? ? ? 一個域名對應一個IP地址

? ? ? ? 2>一對多

? ? ? ? 一個域名對應多個IP地址.這種場景比如一個大型網站,流量非常大,需要在全球范圍內多個國家架設多個服務器來應對,或者應對其他復雜情形.

? ? ? ? 3>多對一

? ? ? ? 多個域名對應一個IP地址

? ? ? ? ---解讀:按照前面條目類型的說法:主機條目就是一個域名和IP地址的等價類(黑體字是原話),也不用考慮那么多,幾百萬的數據量不是很大,搜索和添加的影響都不大,他的類型設計仍然按照一一對應關系.

因特網連接

? ? ? ?本書原話:?因特網客戶端和服務器通過連接發送和接收字節流來通信.連接是點對點的,全雙工的,可靠的.

? ? ? ? 連接由"地址:端口"表示.客戶端套接字地址由內核自動分配,服務器套接字地址中的端口通常是某個知名端口.

? ? ? ? 如圖,客戶端和服務器之間的連接由下列套接字對唯一確定了.

? ? ? ? (128.2.194.242:51213,208.216.181.15:80)

? ? ? ? ---解讀:因特網連接的規定,套接字對確定連接,也沒說怎么實現的,留待后面內容解讀.?

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

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

相關文章

【盈達科技】GEO(生成式引擎優化)底層邏輯

??一、GEO的現狀?? ??技術快速迭代?? 生成式AI&#xff08;如ChatGPT、Claude、Google SGE&#xff09;正在成為用戶獲取信息的核心入口&#xff0c;傳統搜索引擎的流量被分流。主流平臺如Google推出“生成式搜索體驗&#xff08;SGE&#xff09;”&#xff0c;Bing整合…

VS Code 智能代理模式:重塑開發體驗

在編程領域&#xff0c;效率與精準度無疑是開發者們永恒的追求。而如今&#xff0c;VS Code 推出的智能代理模式&#xff08;Agent Mode&#xff09;&#xff0c;正以前所未有的方式&#xff0c;徹底顛覆了傳統開發流程&#xff0c;為程序員們帶來了一場前所未有的效率革命。本…

【回眸】Aurix TC397 IST 以太網 UDP 相關開發

前言 關于移植IST功能至 Infineon TC397上主要涉及到UDP發送報文及接收。IST是安全診斷相關的工作 Nvidia IST介紹 Orin系列芯片會提供一種機制來檢測由系統內測&#xff08;IST&#xff09;所產生的永久的故障&#xff0c;IST 應該在 Orin-x 功能安全系統中使用期間被啟動。…

Mediamtx與FFmpeg遠程與本地推拉流使用

1.本地推拉流 啟服 推流 ffmpeg -re -stream_loop -1 -i ./DJI_0463.MP4 -s 1280x720 -an -c:v h264 -b:v 2000k -maxrate 2500k -minrate 1500k -bufsize 3000k -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:8554/stream 拉流 ffplay -rtsp_transport tcp rtsp://43.136.…

使用QML Tumbler 實現時間日期選擇器

目錄 引言相關閱讀項目結構示例實現與代碼解析示例一&#xff1a;時間選擇器&#xff08;TimePicker&#xff09;示例二&#xff1a;日期時間選擇器&#xff08;DateTimePicker&#xff09; 主窗口整合運行效果總結下載鏈接 引言 在現代應用程序開發中&#xff0c;時間與日期選…

R語言中的常用內置函數

常用的數值函數 常用的字符函數 與概率分布相關的函數 有用的統計函數 數據來源:《數據挖掘與數據分析&#xff1a;基于R語言》王陽 2024年1月出版

org.springframework.core.env.PropertiesPropertySource 類詳解

org.springframework.core.env.PropertiesPropertySource 類詳解 1. 基本概述 類路徑: org.springframework.core.env.PropertiesPropertySource繼承關系: 繼承自 PropertySource<Properties>&#xff0c;實現 PropertySource 接口。作用: 將 Java Properties 對象&…

2025-04-22 李沐深度學習5 —— 線性回歸

文章目錄 1 案例介紹1.1 應用場景&#xff1a;美國房價預測1.2 核心假設1.3 線性回歸與神經網絡的關系1.4 平方損失&#xff08;L2 Loss&#xff09;1.5 訓練模型&#xff1a;最小化損失 2 基礎優化算法2.1 梯度下降2.2 小批量隨機梯度下降&#xff08;Mini-batch SGD&#xff…

你的大模型服務如何壓測:首 Token 延遲、并發與 QPS

寫在前面 大型語言模型(LLM)API,特別是遵循 OpenAI 規范的接口(無論是 OpenAI 官方、Azure OpenAI,還是 DeepSeek、Moonshot 等眾多兼容服務),已成為驅動下一代 AI 應用的核心引擎。然而,隨著應用規模的擴大和用戶量的增長,僅僅關注模型的功能是不夠的,API 的性能表…

數字化轉型避坑指南:中鈞科技如何用“四個錨點”破解轉型深水區

數字化轉型浪潮下&#xff0c;企業常陷入四大典型陷阱&#xff1a;跟風式投入、數據沼澤化、流程偽在線、安全裸奔化。中鈞科技旗下產品以“經營幫”平臺為核心&#xff0c;通過針對性方案幫助企業繞開深坑。 陷阱一&#xff1a;盲目跟風&#xff0c;為數字化而數字化 許…

時分復用、頻分復用和碼分復用簡要比較分析

時分復用&#xff08;TDM&#xff09;、頻分復用&#xff08;FDM&#xff09;和碼分復用&#xff08;CDM&#xff09;是經典的多路復用技術&#xff0c;它們通過不同的方式共享信道資源。以下是兩者的詳細比較及其優缺點&#xff1a; 1. 原理對比 時分復用&#xff08;TDM&…

MCP認證難題破解:常見技術難題實戰分析與解決方案

MCP認證難題破解:常見技術難題實戰分析與解決方案 一、引言:MCP認證——智能協作領域的“技術試金石” MCP(Multi-agent Communication Protocol)認證作為多智能體系統領域的權威認證,旨在考察考生對MCP協議設計、智能體協作架構、分布式系統優化等核心技術的掌握程度。…

最新iOS性能測試方法與教程

一、工具instrument介紹 使用Xcode的instrument進行測試&#xff0c;instrument自帶了很多性能方面的測試工具&#xff0c;如圖所示&#xff1a; 二、常見性能測試內容 不管是安卓還是iOS的性能測試&#xff0c;常見的性能測試都要包含這五個方面&#xff1a; 1、內存&#xff…

Vue el-checkbox 虛擬滾動解決多選框全選卡頓問題 - 高性能處理大數據量選項列表

一、背景 在我們開發項目中&#xff0c;經常會遇到需要展示大量選項的多選框場景&#xff0c;比如權限配置、數據篩選等。當選項數量達到幾百甚至上千條時&#xff0c;傳統的渲染方式全選時會非常卡頓&#xff0c;導致性能問題。本篇文章&#xff0c;記錄我使用通過虛擬滾動實現…

JWT的token泄露要如何應對

文章目錄 前言? 一、預防措施&#xff08;防泄露&#xff09;&#x1f6a8; 二、應急響應機制&#xff08;發現已泄露&#xff09;&#x1f512; 1. **啟用 Token 黑名單機制**&#x1f501; 2. **啟用 Refresh Token 機制 旋轉令牌**&#x1f4cd; 3. **強制下線機制**&…

24.中醫知識問答刪除歷史對話功能前端代碼實現

前端實現對話刪除功能的完整指南 功能概述 前篇文章介紹了刪除歷史對話的后端開發&#xff0c;本篇將介紹如何在前端實現一個完整的對話刪除功能&#xff0c;包括用戶確認、API調用、狀態管理和錯誤處理等關鍵環節。 功能拆解 1. 用戶確認機制 javascript const confirmDe…

如何在 Python 項目中引入 Rust 函數

目錄 1. 初始化 Python 項目2. 添加 Rust 開發工具3. 初始化 Rust 項目4. 開發模式構建5. 驗證模塊是否成功安裝6. 測試 Rust 函數總結 (封面pid: 129416070) Python 是一門非常流行的編程語言&#xff0c;具有易于使用和開發的特點。然而&#xff0c;隨著項目需求的增長和性能…

Java基礎系列-HashMap源碼解析2-AVL樹

文章目錄 AVL樹左旋右旋左旋右旋的4種情況LL 型RR 型LR 型RL 型 實際插入時怎么判斷是那種類型&#xff1f;插入時注意事項刪除節點 AVL樹 為避免BST樹退化成鏈表的極端情況&#xff0c; AVL 樹應運而生。 平衡因子取值&#xff08;-1&#xff0c;0&#xff0c;1&#xff09;…

新書速覽|Hadoop與Spark大數據全景解析(視頻教學版)

《Hadoop與Spark大數據全景解析:視頻教學版》 01 本書內容 《Hadoop與Spark大數據全景解析:視頻教學版》結合作者多年在大數據領域的開發實踐經驗&#xff0c;采用“理論實戰”的形式&#xff0c;以大量實例全面介紹Hadoop和Spark的基礎知識及其高級應用。作者將豐富的教學經…

TapData × 夢加速計劃 | 與 AI 共舞,TapData 攜 AI Ready 實時數據平臺亮相加速營,企業數據基礎設施現代化

在實時躍動的數據節拍中&#xff0c;TapData 與 AI 共舞&#xff0c;踏出智能未來的新一步。 4月10日&#xff0c;由前海產業發展集團、深圳市前海夢工場、斑馬星球科創加速平臺等聯合發起的「夢加速計劃下一位獨角獸營」正式啟航。 本次加速營以“打造下一位獨角獸企業”為目…