Linux應用軟件編程---網絡編程1(目的、網絡協議、網絡配置、UDP編程流程)

Linux下的網絡編程

一、目的

? ? 不同主機,進程間通信。

二、解決的問題

1. 主機與主機之間物理層面必須互聯互通。
2. 進程與進程在軟件層面必須互聯互通。

? ? 物理層面的互聯互通流程圖如下:

? ? 其中:

????????IP地址:計算機的軟件地址,用來標識計算機設備
MAC地址:計算機的硬件地址(固定)
網絡的端口號:標記同一主機上的不同網絡進程

????????交換機:實現局域網內通信
路由器:負責數據的路徑規劃
廣域網:實現遠距離傳輸

三、網絡協議

? ? 網絡協議是網絡通信的標準。

1、OSI 七層模型

? ? OSI 七層模型:開放系統互聯模型(open system interconnect)是不同體系結構設備間,網絡通信的通信標準。
應用層:要傳輸的數據信息,如文件傳輸,電子郵件等
表示層:數據加密、解密操作,壓縮,解壓縮
會話層:建立數據傳輸通道, ? --->一個會話
傳輸層:傳輸的方式 ?UDP ?TCP ? 端口號
網絡層:實現數據路由,路徑規劃 ? ?路由器 ?ip
數據鏈路層:封裝成幀,點對點通信(局域網內通信),差錯檢測 ? 交換機 ?ARP
物理層:定義物理設備標準、電氣特性,比如網線,光纖等傳輸介質 ? 比特流 ?bit ?0 1

2、TCP/IP 模型

? ? TCP/IP 模型分為五層和四層兩種。每所表示的與 OSI 七層模型內容一致,只是將七層的 “ 應用層、表示層、會話層 ” 合并之后表示五層和四層的應用層,將五層的 “ 數據鏈路層、物理層 ” 合并表示四層中的網絡接口層。

? ? 五層結構及舉例說明:

應用層:

HTTP:超文本傳輸協議
HTTPS:超文本傳輸協議(SSL加密算法)
FTP:文件傳輸協議(TCP)

TFTP:簡單文件傳輸協議(UDP)
MQTT:消息隊列遙測傳輸(物聯網協議)
DNS:域名解析服務(www.baidu.com---》IP地址)

?傳輸層:TCP :傳輸控制協議
UDP:用戶數據報協議
? ?網絡層:IP協議:
IPv4:
IPv6:
數據鏈路層:ARP : 地址解析協議
?物理層:

四、IP 協議

1、概念

? IP 協議位于網絡層,有?IPv4 (32位) 和 IPv6 (128位) 兩種,以IPv4 為主展開學習。?
192.168.1.140? ? (用戶表示形式) ? 點分十進制 ??
11000000 10101000 00000000 01000011?? ?(計算機存儲形式) 32bits
在 192.168.0.121/24 中,24表示網絡位的位數

2、IPv4 的地址

??IPv4 的?IP地址 = 網絡位 + 主機位?
網絡位:該IP地址位于哪個網段(局域網)內
主機位:這個網段(局域網)第幾臺主機

3、子網掩碼

??功能:用來區分IP地址的網絡位和主機位,搭配IP地址使用。
規則:子網掩碼是1的部分對應IP地址的網絡位
是0的部分對應IP地址的主機位

? 例如:子網掩碼如:255.255.255.0
11111111.11111111.11111111.00000000

?4、網段號

? ?規則:IP地址網絡位不變,主機位全為0,則為該IP地址的網段號
例如:IP地址:192.168.1.3
子網掩碼:255.255.0.0
網段號:192.168.0.0
網段內的IP能直接通信

5、廣播號

? ? 規則:IP地址網絡位不變,主機位全為1,則為該IP地址的廣播號
例如:IP地址:192.168.1.3
子網掩碼:255.255.255.0
廣播號:192.168.1.255

? ? ? 向廣播號發送信息,所有局域網內IP都能收到此信息
feiQ VNC
192.168.1.255
網關地址:
192.168.1.1

6、IP地址的劃分:

? ? 1)A類地址:
范圍:1.0.0.0 - 126.255.255.255
子網掩碼:255.0.0.0? ? ? ??范圍:126*2^24 ? ? ? ?
用于管理大規模網絡
私有IP地址:10.0.0.0 - 10.255.255.255
127.0.0.0 ? 回環地址

? ? 2)B類地址:
范圍:128.0.0.0 - 191.255.255.255
子網掩碼:255.255.0.0? ? ? 范圍:?2^16
管理大中規模網絡
私有IP地址:172.16.0.0 - 172.31.255.255

? ? 3)C類地址:
范圍:192.0.0.0 - 223.255.255.255
子網掩碼:255.255.255.0? ? ? ? 范圍:2^8
管理中小規模網絡
私有IP地址:192.168.0.0 - 192.168.255.255

? ? 4)D類地址:
224.0.0.0 - 239.255.255.255
組播和廣播使用

? ? 5)E類地址:
240.0.0.0 - 255.255.255.254
用來進行實驗

7、公有IP 和 私有IP

?? ??? ?公有IP:由電信公司直接分配,并需要付費的IP地址, 可以直接訪問internet
私有IP:不能直接訪問internet的ip地址? ? ? ??
節省ip地址

五、網絡端口號

1、概念

? ? 端口號:16位的整形數據(unsigned short)0-65535
端口號功能:標記同一主機上的不同網絡進程

2、分類

? ? 1)任何TCP/IP實現所提供的服務都用1-1023之間的端口號。
http : 80
FTP: 20/21
TFPT: 69
HTTPS: 443
2)端口號從1024-49151是被注冊的端口號,被IANA指定為特殊服務使用。
MQTT:1883/8883
3)從49152-65535是動態或私有端口號。

3、數據包的封裝和解封過程

六、網絡配置

1. ?ping ?ip地址/域名

? ? 查看當前主機和IP/域名所對應的這臺主機網絡是否聯通
例如,ping www.baidu.com

2. ifconfig?

? ? ifconfig 在Linux查看當前主機的IP地址
ipconfig 在Windows上查看當前主機的IP地址

3. 網絡配置

? ? 1)虛擬機-->設置-->網絡適配器-->橋接模式
2)編輯-->虛擬網絡編輯器-->更改設置-->VMnet0-->橋接至-->當前PC正在上網的網卡上-->應用-->確定
3)修改網絡配置文件
輸入指令:sudo vim /etc/network/interfaces
將內容更改為:
auto lo
iface lo inet loopback
auto ens33?
iface ens33 inet dhcp
4)重啟網絡服務
輸入指令:sudo /etc/init.d/networking restart
5) 測試
輸入指令:ping www.baidu.com

七、網絡協議 UDP

? ? UDP 位于傳輸層,用戶數據報協議(User Datagram Protocol)。

?1、網絡編程模型

?? ?1)B/S模型

????????browser/server(瀏覽器/服務器)
(1)客戶端是通用的客戶端(瀏覽器)
(2)一般只做服務器開發
(3)客戶端要加載的數據均來自服務器

? ? 2)C/S模型

? ? ? ? client/server(客戶端/服務端)
(1)客戶端是一個專用的客戶端
(2)服務器和客戶端都需開發
(3)客戶端可保存資源,本地加載,無需所有數據都請求服務器

2、UDP編程流程

? ? ? ? ? ?套接字:文件描述符
網絡通信時,應用層可操作的端口。

3、相關函數接口

? ? 1)socket() 函數

?int socket(int domain, int type, int protocol);
功能:創建通信的套接字
參數:
domain:網絡層使用什么協議族
AF_INET:IPv4
AF_INET6:IPv6
ype:規定傳輸層的協議
SOCK_DGRAM : UDP協議
SOCK_STREAM:TCP協議
SOCK_RAW :原始套接字
protocol:0 按照默認協議方式創建
返回值:
成功:套接字
失敗:-1

? ? 2)sendto() 函數

?ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);

功能:向網絡套接字發送數據
參數:
sockfd:套接字
buf: 要發送的數據的首地址
len:要發送的字節數
flags: 0:按照默認方式發送
dest_addr:接收方的地址信息(IP+端口號)
addrlen:接收方地址的大小

返回值:
成功:實際發送的字節數
失敗:-1

? ? ? ? 其中,IPv4 的地址信息存放在 struct sockaddr_in 中:

可使用 “ man 7 ip ” 指令查看程序員手冊

? ? ? ? ? ?struct sockaddr_in {
sa_family_t ? ?sin_family; /* address family: AF_INET */
in_port_t ? ? ?sin_port; ? /* port in network byte order */
struct in_addr sin_addr; ? /* internet address */
};

? ? ? ? ? ?/* Internet address. */
struct in_addr {
uint32_t ? ? ? s_addr; ? ? /* address in network byte order */
};

? ? 3)IP 地址形式轉換函數

? ? ? ? (1)inet_addr() 函數
in_addr_t inet_addr(const char *cp);
功能:
將字符串IP地址轉換成二進制IP地址形式
? ? ? ? (2)inet_ntoa() 函數
char *inet_ntoa(struct in_addr in);
功能:
將二進制ip轉換成字符串

? ? 4)bind() 函數

int bind(int sockfd, const struct sockaddr *addr,?socklen_t addrlen);
功能:綁定自己的IP地址和端口號
參數:
sockfd:套接字
addr:需要綁定的地址
addrlen:地址大小
返回值:
成功:0
失敗:-1

? ? 5)recvfrom() 函數

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);

功能:從套接字上接收數據
參數:
sockfd:套接字
buf:存放接收數據的內存首地址
len:希望接收的字節數
flags:0 :按照默認方式接收(阻塞)
src_addr:發送方的地址信息
addrlen:發送發地址的指針
功能:
成功:實際接收到的字節數
失敗:-1

【END】

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

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

相關文章

常見開源協議詳解:哪些行為被允許?哪些被限制?

常見開源協議詳解:哪些行為被允許?哪些被限制? 開源世界的魅力在于共享與合作,但不同的開源協議對分發、修改、再發布以及宣傳/推廣有不同的要求和限制。很多開發者在 fork 項目、改 README、放到自己倉庫并在自媒體傳播 時&…

服務器硬盤進行分區和掛載

查看服務器上的硬盤:lsblk -d -o NAME,SIZE,MODEL可以看到我的硬盤是除了vda系統盤以外,還有個vdb。我們查看一下分區:lsblk可以看到:vdb 1T disk (底下沒有分區,也沒有掛載)我們想要用起來這…

【C初階】數據在內存中的存儲

目錄 1. 整數在內存中的存儲 2. 大小端字節序 2.1 什么是大小端? 2.2 為什么有大小端? 2.3 練習 2.3.1 練習1 2.3.2 練習2 2.3.3 練習3 2.3.4 練習4 2.3.5 練習5 2.3.6 練習6 3. 浮點數在內存中的存儲 3.1 浮點數存儲的過程 3.2 浮點數的取…

AI 自動化編程 trae 體驗2 幫我分析一個項目

總結: 接手一個項目可以讓trae 幫忙分析 上次講到trae在處理組件引入的時候,經常會碰到版本問題,分析引入了互聯網上非本版本或者有bug的代碼。主要依賴互聯網的資源庫。 但是分析一個項目應該是沒問題。 這次表現非常好,接手一個…

VMware虛擬機中CentOS 7 報錯 ping: www.xxx.com: Name or service not known

1:主要原因是網絡配置的問題 2:其實就是下面三張圖片中的,物理機虛擬網卡 vmware8 和虛擬機網絡編輯器,如果設置靜態IP 就是這三個地方的問題最簡單的解決辦法第一步:還原虛擬機網絡點擊確認后 ** 第二步給自己的虛擬機設置網絡連接方式 選擇NAT模式連接…

Java面試-自動裝箱與拆箱機制解析

👋 歡迎閱讀《Java面試200問》系列博客! 🚀大家好,我是Jinkxs,一名熱愛Java、深耕技術一線的開發者。在準備和參與了數十場Java面試后,我深知面試不僅是對知識的考察,更是對理解深度與表達能力的…

《VMware 安裝 CentOS 7.9 虛擬機詳細教程(含圖解步驟)》

目錄1.安裝前準備1.1 準備VMware軟件1.1.1 方式一1.1.2 方式二1.2 準備centos7.9鏡像1.2.1 方式一1.2.2 方式二2.安裝centos7.91.安裝前準備 1.1 準備VMware軟件 VMware需要的激活碼百度直接搜索vmware workstation17激活碼就可以搜索到 1.1.1 方式一 這種方式需要注冊官網的…

新能源知識庫(84)什么是IEC白皮書

IEC白皮書是由國際電工委員會(IEC)發布的戰略性技術文件,旨在針對新興技術和社會發展趨勢,提出標準化需求和發展路徑,為全球產業提供前瞻性指導。在新能源領域,IEC白皮書是推動技術創新、產業協同和國際規則…

從零開始學習JavaWeb-15

??一、數據庫安全與防注入實戰??1. ??SQL 注入原理與危害????攻擊本質??:利用輸入漏洞篡改 SQL 語義,例如:SELECT * FROM users WHERE username admin OR 11 -- AND password xxxOR 11導致條件永真,繞過密碼驗證。?…

深入理解深度學習中的“Batch”

文章目錄 **一、什么是Batch?為什么需要它?** **二、Batch Size(批次大小)的影響** **三、Batch, Epoch 和 Iteration 的關系** **四、案例分析** 在深度學習領域,“Batch”(批次)是一個核心且至關重要的概念。它指的是在模型訓練過程中,一次性輸入給神經網絡進行處理的…

27.語言模型

語言模型,是NLP方向一直主力研究的,通過訓練機器,來讓機器學習人類語言的內在規律,理解自然語言,并將其轉換為計算機語言。 目前的主流語言模型,如GPT、Deepseek等,并不是簡單的搜索背誦。他們的…

小智ai+mcp+n8n的智能組合

小智aimcpn8n的智能組合1 小智ai的版本2 n8n的配置3 mcp的demo4 工作流json? 之前有寫過小智ai的介紹,它提供了流暢且豐富的用戶語音交互能力。n8n提供了靈活且穩定的后臺工作流的能力,如果這兩個工具進行組合,可以打造一個好玩又好用的智能…

【DataGrip】連接達夢數據庫后,能查詢數據但是看不到表的幾種情況分析,達夢數據庫驅動包下載DmJdbcDriver18.jar

大概分為以下兩類情況,配置問題和驅動包的問題 DmJdbcDriver18.jar點擊下載 1.配置了表不可見 左上角點擊過濾的圖標,把table勾上就可以 2.Introspect using JDBC metadata 未勾選 1)老版本的DataGrip 在options選項下 3)新版…

全面解析 `strncasecmp` 字符串比較函數

1) 函數的概念與用途 strncasecmp 是 C 語言中一個非常實用的字符串處理函數,它執行不區分大小寫的字符串比較,但只比較前 n 個字符。這個函數的名字來源于"string n case-compare"(字符串前n個字符不區分大小寫比較)。…

高級SQL優化 | 告別 Hive 中 GROUP BY 的大 KEY 數據傾斜!PawSQL 自適應優化算法詳解

數據傾斜讓你的Hive查詢慢如蝸牛?單個熱點分組拖垮整個集群?PawSQL獨家算法GroupSkewedOptimization來拯救!🎯 痛點直擊:當數據傾斜遇上分組操作想象這樣一個場景:你的電商平臺有1000萬VIP用戶訂單和100萬普…

HUMS 2023齒輪箱數據分析

HUMS問答:https://humsconference.com.au/HUMS2023datachallenge/questions-answers.html 數據集申請:https://www.dst.defence.gov.au/our-technologies/helicopter-main-rotor-gearbox-planet-gear-fatigue-crack-propagation-test 歷年試卷&#xff1…

智慧工地:科技賦能與管理革新下的建筑業新圖景

隨著數字技術的深度滲透,智慧工地正以“技術落地 行業變革 管理創新”的三重突破,重構施工場景的核心邏輯,推動建筑業從傳統粗放式發展向精細化、智能化轉型。一、技術落地:用科技筑牢安全防線,提升施工效率技術是智…

[docker/大數據]Spark快速入門

[docker/大數據]Spark快速入門1. 概述 1.1 誕生背景Spark官方文檔:https://spark.apache.ac.cn/docs/latest/Spark 由加州大學伯克利分校 AMP 實驗室于 2009 年開發,2013 年成為 Apache 頂級項目,旨在解決 MapReduce 的三大核心問題&#xff…

CSS 定位的核心屬性:position

🧩 一、CSS 定位的核心屬性:positionposition 屬性用于定義一個元素在頁面中的定位方式,它決定了:元素在頁面中的定位規則是否脫離文檔流元素的位置是相對于誰(父元素、瀏覽器窗口、自身等)? 可選值如下&a…

數據結構之深入探索快速排序

基準值的選定 我們之前已經用四種不同的方式實現了快速排序,如果還沒有學習過的伙伴們可以看一下這篇文章哦:數據結構之排序大全(3)-CSDN博客 那我們既然已經學習了這么多種方法,為什么還要繼續探索快速排序呢&#…