Linux系統編程——網絡

一、TCP/UDP

1、osi模型

物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層(下層為上層提供服務)

2、TCP/IP模型(TCP/IP協議棧)

應用層:

HTTP(超文本傳輸協議)、FTP(文件傳輸協議)、DNS、DHCP

傳輸層:

TCP(傳輸控制協議)、UDP(用戶數據報)

網絡層:

IP(互聯網協議)、ICMP(互聯網控制消息協議)ARP(ip->mac)RARP(mac->ip)

接口層:以太網協議....

3、常見的協議

DNS:域名解析

DHCP:動態主機配置協議,功能:自動分配IP地址

4、 ip地址

IP地址?==?網絡位?+?主機位(ip地址的前三組是網絡地址,第四組是主機地址)

有A?B?C?D?E?類五類地址

5、網絡接口

套接字:用于網絡通信的一組接口函數(文件描述符)

ip+port(地址+端口):地址用來識別主機,端口用來識別進程

端口號范圍:1-65535

網絡設備是大端存儲,計算機設備是小端存儲

6、udp特性(發不會阻塞,收會阻塞)

1.?無連接?
不需要維護繁雜網絡狀態。網絡開銷小。通信雙方通信過程,無法知道對方進程關閉。如果需要告知,需要發信息通知。 (每次發數據,鏈路發完自動釋放,下次發會選擇新的鏈路)
2.?不可靠,?
傳輸數據的過程中,會有丟包。但是實時性好。適用直播?視頻傳輸,音頻傳輸。

3、數據報:數據間有邊界,收發次數需要對應
【很容易實現一對多 、可以組播,廣播】

7、UDP:客戶端-服務端

8、網絡模型

C/S:專用客戶端,標準協議,自定義協議,功能復雜,大部分資源都在客戶端(和本地客戶端打交道)

B/S:通用客戶端,超文本協議,功能相對較弱,資源都在服務器,(和瀏覽器打交道)

p2p模型:(peer to peer)用于直播,下載工具

9、TCP:傳輸控制協議(相當于打電話)特性:

1、有鏈接(一次會話中,鏈接會一直保持。如果一個斷開,另外一方可以感知),

2、可靠:應答,超時重傳

3、流式套接字:(有順序、發送和接受的次數不需要對應,發的太快會出現寫阻塞,數據之間沒有邊界)

注意:

數據之間沒有邊界會導致數據的黏包(接收收到數據后,無法正常解析)
1.協商邊界
2.固定大小
3.自定義協議?

?10、TCP:客戶端-服務端

重點代碼:網絡編程——聊天程序實現-CSDN博客

11、三次握手,四次揮手

三次握手:

客戶端-->SYN(請求連接),c_num-->服務器

服務器-->SYN/ACK,s_num-->客戶端

客戶端-->ACK-->服務器

四次揮手:

客戶端--> FIN(斷開連接)/ACK -->服務器

服務器--> ACK -->客戶端

服務器-->FIN/ACK-->客戶端

客戶端-->ACK-->服務器

?二、HTTP相關

1、網絡協議頭和工具

協議頭(數據的封包和拆包)

客戶端,從應用層發hello,經過傳輸層加tcp,網絡層加ip,接口層加ip,變成一幀數據(mtu,最大傳輸單元1500字節,,分片?),經過互聯網,到服務器逐層拆包,到服務器應用層輸出hello.

  • MAC(以太網V2幀格式):目地址,源地址,ip數據報
  • IP(20個字節大小):ip flags(x d(能不能分片)m(是不是最后一片)),TTL(生存時間:默認值64,每經過一個網絡節點ttl減1,數字減為0則不再繼續傳遞)
  • TCP(20個字節大小):標志位(urg,ack,psh(抓包時:沒有標準協議就找push,有標準協議就找相關協議),pst,synfin?),window(滑動窗口)

(UDP,8個字節大小)

2、網絡測試工具:

telnet/ssh2:遠程登錄工具

netstat -anp/ping/arp:常用命令

wireshark:網絡抓包工具

tcpdump:命令行抓包工具

3、萬維網

統一資源定位符URL,標志萬維網的各種文檔(相當于網頁鏈接)

HTTP的URL的一般形式:

http://<主機>:<端口>/<路徑>

超文本傳送協議HTTP,使用TCP可靠傳輸(加s就是加密傳輸)

超文本標記語言HTML

4、HTTP操作過程:

  • 客戶端與服務器建立連接(三次握手)
  • 客戶端發送請求報文
  • 服務器收到請求,發送響應報文+加對應數據
  • 斷開連接(四次揮手)

5、HTTP報文結構

請求報文:

第一行:方法(get/post)+URL+HTTP版本號+回車換行\r\n

首部行:狀態說明信息(鍵值對)

實體:請求實體(一般為空)

響應報文

三、多路IO復用(服務器和多客戶端)

1、定義:單線程或單進程同時監測若干個文件描述符是否可以執行IO操作的能力

(進線程消耗資源,多路IO復用用最少的資源解決更多的事)

2、IO模型:

1、阻塞IO? 閑等待(不占cpu等待):有名管道
2、非阻塞IO 忙等待(占著cpu等待)
3、信號驅動IO
4、并發模型 (進程/線程,相對多路IO比較消耗系統資源)
5、IO多路復用(可以處理單進程或單線程中,多個阻塞)

3、 fctnl設置非阻塞

?//將fd置為非阻塞模式
? int flag = fcntl(fd,F_GETFL,0);
? fcntl(fd,F_SETFL,flag|O_NONBLOCK);

//將標準輸入(0)也設置為非阻塞模式。
? flag = fcntl(0,F_GETFL,0);
? fcntl(0,F_SETFL,flag|O_NONBLOCK);

4、fctnl設置信號驅動(代碼運行和系統版本相關)(了解即可)

? //把設備設置為信號驅動的方式
? int flag = fcntl(fd,F_GETFL,0);
? fcntl(fd,F_SETFL,flag|O_ASYNC);
? //設置接收sigio信號的進程
? fcntl(fd,F_SETOWN,getpid());

5、IO多路復用:由操作系統提供的對IO事件進行檢測的機制 (select,poll,epoll)

6、select函數實現多路IO復用(輪詢方法)

創建集合(fd_set)

把文件描述符放進集合(FD_SET)

select輪詢掃描,(返回值:有幾個就是有幾個描述符準備好)

找到對應的fd,進行讀寫操作(FD_LSSET)

清除讀寫標志位

注意點:

select最多檢測1024fd

select在檢測fd的方式是輪詢的方式

select在找對應fd時,需要在原始集合(就緒和未就緒的在一個集合)找

7、epoll函數實現多路IO復用(主動上報)

創建集合 (epoll_create)

把文件描述符放進集合(epoll_ctl)

調用epoll_wait等待讀寫事件的到來,并把就緒fd存入就緒集合(rev)

在rev集合找到對應的fd,進行讀寫操作

注意點:

不限制文件描述符的限制

監聽的性能不會隨監聽描述符增加而下降

epoll在rev集合(只有就緒fd)中找

使用共享內存的方式(不需要用戶和內核反復進行復制)

四、TCP并發模型

服務器/多客戶端模型

1、循環服務器(while(accept();recv()))

2、并發服務器(進線程)

3、多路IO模型服務器(select epoll)

1、select

注意點:

maxfd + 1 告訴 select 需要檢查的文件描述符范圍是 0maxfd(包含 maxfd)。

如果 maxfd 不更新,select 可能漏掉新連接的高 fd。

2、epoll
3、線程進程并發
3.1進程

signal(SIGCHLD, myhandle) 的作用是 處理子進程終止信號(SIGCHLD),避免僵尸進程的積累。

3.2線程

pthread_detach(pthread_self());

分離屬性:線程退出時,系統自動回收資源,無需 pthread_join

信號量:

使用信號量同步,確保線程先讀取 conn,主線程再進入下一輪循環

sem_wait(&sem_arg):主線程阻塞,等待子線程讀取 conn

sem_post(&sem_arg):子線程讀取完 conn 后,通知主線程繼續。

4、mmq協議

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

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

相關文章

taro+pinia+小程序存儲配置持久化

主要通過taro的getStorageSync,setStorageSync實現配置持久化 // https://pinia.esm.dev/introduction.html import { defineStore } from pinia; import { CreditCardDateUtils } from /untils/compute; import { getStorageSync, setStorageSync } from "tarojs/taro&qu…

抖音小游戲好做嗎?

從0到1&#xff0c;教你打造爆款抖音小游戲隨著移動互聯網的發展&#xff0c;抖音小游戲憑借便捷即玩、流量龐大等優勢&#xff0c;成為游戲開發者的熱門選擇。想知道如何開發出一款吸睛又好玩的抖音小游戲嗎&#xff1f;下面就為你詳細介紹開發流程。一、前期規劃明確游戲類型…

Spring Boot 3核心技術面試指南:從遷移升級到云原生實戰,9輪技術攻防(含架構解析)

面試官&#xff1a;cc程序員&#xff0c;聊聊Spring Boot 3的那些事兒&#xff1f; 場景背景 互聯網大廠云原生架構部面試官老王&#xff0c;與自稱"Spring Boot骨灰粉"的cc程序員展開技術對決。 面試過程 第一輪&#xff1a;遷移升級 面試官&#xff1a;Spring Boot…

技術演進中的開發沉思-42 MFC系列:Components 與 ActiveX Controls

點擊程序啟動時&#xff0c;是不是看過有加載的畫面。在VC開發時&#xff0c;可使用 VC 的 Component Gallery&#xff0c;找到 Splash screen 組件&#xff0c;當時覺得組件就是給程序員的暖手寶。一、Component GalleryComponent Gallery 在 VC 里的位置很特別 —— 它藏在 “…

抽象類、接口、枚舉

第八天&#xff08;堅持&#xff09;抽象類1.什么是抽象類&#xff0c;作用特點。抽象類是面向對象編程中一種特殊的類&#xff0c;它不能被實例化&#xff0c;主要用于作為其他類的基類&#xff08;父類&#xff09;。抽象類的主要作用是定義公共結構和行為規范&#xff0c;同…

在Ubuntu上使用QEMU仿真運行ARM匯編

ARM匯編一般無法在PC上直接運行&#xff0c;因為ARM和x86架構是不一樣的。但是很多時候用ARM開發板是很不方便的&#xff0c;所以能不能直接在PC上仿真運行ARM匯編來練習呢&#xff1f;當然可以&#xff0c;那就是&#xff1a;使用QEMU來仿真。這篇文章我們就來演示下如何在Ubu…

【趣味解讀】淘寶登錄的前后端交互機制:Cookie-Session 如何保障你的賬戶安全?

在現代Web應用中&#xff0c;前后端交互是核心功能之一&#xff0c;而用戶認證又是其中最關鍵的部分。本文將以淘寶登錄為例&#xff0c;詳細解析基于Cookie-Session的前后端交互流程&#xff0c;幫助開發者理解這一常見的安全認證機制。生動理解一下什么是cookie和seesion我們…

貪心算法(基礎算法)

1.引言 ok啊&#xff0c;拖更這么長時間也是沒有壓力&#xff08;doge&#xff09; 不說啥&#xff0c;直接進入正題。 2.概念 這個貪心算法呢&#xff0c;看名字就知道&#xff0c;不就是每個步驟都挑最好的嘛&#xff0c;有啥難的。 這么說的話......其實確實&#xff0c…

簡單的mcp 服務示例

參考&#xff1a;https://www.bilibili.com/video/BV1nyVDzaE1x 編寫自己的tools.py #### tools.py from pathlib import Path import osbase_dir Path("./test")def read_file(name: str) -> str:"""Return file content. If not exist, return …

DeepSeek-R1+豆包迭代一次完成中國象棋游戲

DeepSeeek- R1生成的棋盤符合中國象棋風&#xff0c;單獨豆包無法畫好象棋棋盤。提示詞&#xff1a;使用html實現中國象棋游戲&#xff0c;要求支持人機對弈。等等&#xff0c;你需要實現完整版本。代碼如下&#xff08;電腦走棋不對&#xff09;&#xff1a;<!DOCTYPE html…

阿里通義千問Qwen3深夜升級:架構革新+性能碾壓

&#xff08;以下借助 DeepSeek-R1 & Grok3 輔助整理&#xff09; 北京時間2025年7月22日凌晨&#xff0c;阿里云通義千問團隊發布了Qwen3旗艦模型的最新更新——Qwen3-235B-A22B-Instruct-2507-FP8。這一更新不僅在性能上實現了突破&#xff0c;還標志著開源大模型技術架…

pip關于緩存的用法

pip cache info查看 pip 緩存的大小&#xff0c;運行示例 Package index page cache location (pip v23.3): c:\users\xxx\appdata\local\pip\cache\http-v2 Package index page cache location (older pips): c:\users\xxx\appdata\local\pip\cache\http Package index page c…

嵌入式學習-(李宏毅)機器學習(2)-day29

十五個作業不同類型的Functions兩大類任務一個是Regression&#xff08;回歸&#xff09; 一個是 Classification&#xff08;分類&#xff09;一個是給出一個數值&#xff0c;一個是從類別中選擇一個還有一類任務 Structured Learning 機器要學會創造文件 機器學習預測頻道第…

【C++11】哈希表與無序容器:從概念到應用

文章目錄一、前言二、哈希表&#xff08;Hash Table&#xff09;1. 基本概念2. 哈希函數3. 沖突解決方法鏈地址法&#xff08;Separate Chaining&#xff09;開放尋址法&#xff08;Open Addressing&#xff09;4. 性能分析5. 動態擴容6. 應用場景7. 優缺點二. 無序容器的介紹1…

【智能大數據分析 | 實驗二】Spark實驗:部署Spark集群

【作者主頁】Francek Chen 【專欄介紹】???智能大數據分析??? 智能大數據分析是指利用先進的技術和算法對大規模數據進行深入分析和挖掘&#xff0c;以提取有價值的信息和洞察。它結合了大數據技術、人工智能&#xff08;AI&#xff09;、機器學習&#xff08;ML&#xf…

使用pymongo進行MongoDB的回收

在 PyMongo 中使用 compact 命令進行 MongoDB 碎片回收的完整操作指南如下&#xff1a; 一、核心執行方法 from pymongo import MongoClient import time# 1. 連接到 MongoDB 實例 client MongoClient("mongodb://username:passwordhost:27017/dbname?authSourceadmin&q…

Azure DevOps 使用服務主體配置自托管代理 (Self-hosted Agent) 配置指南

Azure DevOps 使用服務主體配置自托管代理配置指南1. 概述2. 在 Azure AD 中創建服務主體 (SP)3. 授予 Azure DevOps 權限3.1. 組織層級&#xff1a;用戶身份與訪問級別3.2. 組織層級&#xff1a;Agent pools管理員3.3. 在 Linux VM 上安裝和配置代理3.4. 啟動并設置為系統服務…

Java學習第六十四部分——Nginx

目錄 一、前言提要 二、核心特點 三、核心作用 四、架構優勢 五、應用場景 六、常用命令 七、性能對比——Nginx vs Apache 八、典型用戶 九、配置示例 十、Java應用需配合的配置 十一、性能優化策略 十二、常見問題排查 十三、文件結構配置 十四、總結歸納概述 …

幾個常用的Oxygen編輯器插件

Oxygen XML Editor是羅馬尼亞的SyncroSoft公司開發的結構化文檔編輯和發布軟件。 除了Oxygen編輯器帶的功能&#xff0c;它還提供了豐富的插件來提供額外的功能來輔助資料開發人員更高效率、更低成本地開發結構化資料。 本文介紹幾個比較常用和有用的插件。 - 1 - Git Clie…

基于springboot的軟件缺陷管理跟蹤平臺

博主介紹&#xff1a;java高級開發&#xff0c;從事互聯網行業六年&#xff0c;熟悉各種主流語言&#xff0c;精通java、python、php、爬蟲、web開發&#xff0c;已經做了六年的畢業設計程序開發&#xff0c;開發過上千套畢業設計程序&#xff0c;沒有什么華麗的語言&#xff0…