• 正文
    • 1. 網(wǎng)絡(luò)應(yīng)用程序的設(shè)計模式
    • ?2. 協(xié)議
    • 3. 網(wǎng)絡(luò)分層模型
    • 4. 協(xié)議格式——數(shù)據(jù)包的封裝思想
    • 5. TCP/UDP傳輸層協(xié)議簡介
    • ?6. DNS服務(wù)器
  • 推薦器件
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

網(wǎng)絡(luò)編程基礎(chǔ)

2024/09/02
1220
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

1. 網(wǎng)絡(luò)應(yīng)用程序的設(shè)計模式

(1)C/S架構(gòu)

client/server架構(gòu),即客戶端/服務(wù)器架構(gòu)。

- 優(yōu)點:協(xié)議選用比較靈活;可以緩存數(shù)據(jù),比如說我們在打游戲時,在游戲過程中,實際上一些音效、圖片都已經(jīng)緩存下來了,想象一下,如果你玩LOL的時候,音效和動畫需要去服務(wù)器實時下載,那么游戲會卡成什么樣子。

- 缺點:對用戶的安全構(gòu)成威脅,因為客戶端收集了哪些信息,這些信息用于什么工作我們都不知道;客戶端開發(fā)工作量大,調(diào)試困難,需要考慮多線程和數(shù)據(jù)同步。

- 典型的C/S架構(gòu)比如QQ微信,我們在使用QQ或者微信的時候都需要安裝一個客戶端軟件,也就是說,需要安裝客戶端軟件的都是基于C/S架構(gòu)。

?(2)B/S架構(gòu)

browser/server架構(gòu),即瀏覽器/服務(wù)器架構(gòu)。

- 優(yōu)點:跨平臺。瀏覽器不需要我們開發(fā),我們只需要下載一個瀏覽器即可,并且可以在各個平臺通過瀏覽器訪問網(wǎng)站數(shù)據(jù)(手機、電腦等),那么既然是跨平臺訪問,在開發(fā)的時候就需要考慮跨平臺開發(fā)語言,比如Java和QT等等,QT提供了統(tǒng)一的接口,只不過在不同平臺下封裝API不同,有Windows、Linux等,但是可以通過同樣的接口去調(diào)用。Java是運行在虛擬機上的,只要在不同平臺安裝Java虛擬機即可。

- 缺點:只能使用http或https去實現(xiàn)。比如說,我們在瀏覽器輸入百度的域名http://www.baidu.com,這個域名對應(yīng)一個IP,瀏覽器會根據(jù)解析出的IP向百度的服務(wù)器發(fā)送一個http請求。

對于兩種架構(gòu),并沒有好壞之分,它們的應(yīng)用場景不同。比如說,大型游戲必須要通過客戶端來運行,比如我們玩的LOL、DNF、CF都需要下載一個客戶端。而小型游戲只要在web服務(wù)器運行就可以了,比如4399小游戲等。

?2. 協(xié)議

協(xié)議就是指數(shù)據(jù)傳輸和數(shù)據(jù)解釋的規(guī)則,典型的協(xié)議比如TCP/UDP協(xié)議、HTTP協(xié)議、FTP協(xié)議、IP協(xié)議、ARP協(xié)議等。

發(fā)送數(shù)據(jù)和接收數(shù)據(jù)要遵守相同的協(xié)議,否則就無法正確解析。同時,發(fā)送數(shù)據(jù)的大小一般不要太大,因為這些數(shù)據(jù)是存放在棧上的,而??臻g的大小在Linux下默認只有8M。

3. 網(wǎng)絡(luò)分層模型

① 七層OSI模型

- 物理層:雙絞線、光纖

- 數(shù)據(jù)鏈路層:數(shù)據(jù)傳輸、錯誤檢測

- 網(wǎng)絡(luò)層:路由轉(zhuǎn)發(fā)

- 傳輸層:提供端對端的接口

- 會話層:解除或建立節(jié)點之間的聯(lián)系

- 表示層:數(shù)據(jù)格式化、代碼轉(zhuǎn)換、數(shù)據(jù)加密

- 應(yīng)用層:文件傳輸、電子郵件、文件服務(wù)、虛擬終端

② TCP/IP四層模型

- 數(shù)據(jù)鏈路層

- 網(wǎng)絡(luò)層

- 傳輸層

- 應(yīng)用層

作為程序員主要關(guān)注的是應(yīng)用層協(xié)議(其它三層由操作系統(tǒng)完成),我們可以自己去定義一套應(yīng)用層協(xié)議,實際上大公司都有自己的應(yīng)用層協(xié)議。

4. 協(xié)議格式——數(shù)據(jù)包的封裝思想

(1)以太網(wǎng)幀格式

以太網(wǎng)幀是在數(shù)據(jù)鏈路層傳輸?shù)臄?shù)據(jù)格式,借助mac地址完成數(shù)據(jù)報的傳遞

MAC地址就是網(wǎng)卡編號,我們使用ifconfig就可以看到,硬件地址HWaddr就是MAC地址,這個編號是全世界唯一的,Windows下ipconfig顯示的物理地址就是MAC地址(Linux中用:間隔,Windows中用-間隔)

以太網(wǎng)幀發(fā)送數(shù)據(jù)報的前提是知道MAC地址,否則就要通過ARP協(xié)議根據(jù)對方的IP(對方的IP我們肯定是知道的,不然的話我們怎么給他發(fā)數(shù)據(jù))去獲取對方的MAC地址,我們只需要關(guān)注類型,0800表示正常發(fā)送數(shù)據(jù),0806表示要獲取對方的MAC地址,至于報文數(shù)據(jù)的填充我們不需要知道,這是操作系統(tǒng)完成的(只有應(yīng)用層協(xié)議的封裝由用戶完成),當(dāng)我們發(fā)送0806類型的數(shù)據(jù)包,對方會回復(fù)一條ARP數(shù)據(jù)報,我們就可以獲得對方的MAC地址(見下面ARP協(xié)議示意圖)。也就是說,以太網(wǎng)幀是根據(jù)MAC地址發(fā)送數(shù)據(jù)的,并不是根據(jù)IP地址發(fā)送數(shù)據(jù),IP地址是用來獲取MAC地址的,獲取到MAC地址后,再通過MAC地址發(fā)送數(shù)據(jù)。RARP協(xié)議就是通過MAC地址獲取IP地址的。

ARP數(shù)據(jù)報的格式(ARP用于根據(jù)IP地址獲取MAC地址)

ARP協(xié)議的工作示意圖如下

比如說,我們在北京要向廣州的人員發(fā)送數(shù)據(jù),我們只知道對方的IP不知道MAC地址,那么是如何實現(xiàn)以太網(wǎng)幀發(fā)送的呢?首先北京的主機會向廣州的主機發(fā)送一個ARP協(xié)議包,幀類型為0806,以太網(wǎng)源地址和發(fā)送端地址都是北京本地主機的MAC地址,發(fā)送端IP為北京本地主機的IP,目的IP為要發(fā)送到的廣州主機的IP地址,以太網(wǎng)目的地址我們不知道就填充FF。廣州主機接收到這個數(shù)據(jù)包之后,會回復(fù)一個ARP數(shù)據(jù)包,類型同樣為0806,這其中就包含了廣州主機的MAC地址,有了這個MAC地址就可以進行以太網(wǎng)幀的發(fā)送了。

(2)IP段數(shù)據(jù)格式

- 4位版本:ipv4、ipv6,當(dāng)前主要是ipv4

- 8位生存時間(TTL):最多經(jīng)過多少跳,即路由

- 32位源IP地址:數(shù)據(jù)發(fā)送端地址

- 32位目的IP地址:數(shù)據(jù)接收端地址

需要注意的是,IP協(xié)議和IP地址是兩個不同的概念,不要混淆。

關(guān)于路由:每經(jīng)過一個路由結(jié)點,TTL減一,為了防止無限跳導(dǎo)致垃圾數(shù)據(jù)包,這個操作是由路由器完成的,當(dāng)TTL減為0,路由器就不會再轉(zhuǎn)發(fā)這個數(shù)據(jù)包了,而是直接丟棄。假如要從中國通過其他國家,可能通過海底光纖一跳就到達了,所以完全不必擔(dān)心256跳(2的8次方)不夠用,并且路由會選擇最短路徑。

(3)UDP數(shù)據(jù)包格式

在UDP數(shù)據(jù)包中包含一個16位源端口號和一個16位目的端口號,端口號是用來標(biāo)識進程的,每個進程對應(yīng)位一一個PID。在網(wǎng)絡(luò)環(huán)境中,IP可以定位網(wǎng)絡(luò)中的一臺主機,而port端口可以定位一臺主機中的一個進程,格式一般為IP:Port,比如127.0.0.1:80。端口是16位的,端口最大值為65535(2的16次方減一)。

(4)TCP數(shù)據(jù)報格式

這里有一個16位的滑動窗口,滑動窗口實際上是代表了存儲空間的大小。比如說,A給B發(fā)送數(shù)據(jù),A發(fā)送的速度快,而B處理數(shù)據(jù)的速度較慢,那么A發(fā)送的數(shù)據(jù)就要先存儲起來,B就可以告訴A我的滑動窗口是多大,也就是我能緩存多少數(shù)據(jù),A發(fā)送的數(shù)據(jù)就存儲在這個緩存中,當(dāng)緩存區(qū)滿了后,A就不在發(fā)送了。滑動窗口就是做流量控制的,當(dāng)B的緩存區(qū)滿了,A就會阻塞,等到B處理了一部分數(shù)據(jù)后,A再發(fā)送數(shù)據(jù)。

在傳輸層是不需要封裝IP地址的,這是因為傳輸層的數(shù)據(jù)包還要經(jīng)過網(wǎng)絡(luò)層的包裝,而網(wǎng)絡(luò)層的IP協(xié)議中已經(jīng)封裝了IP地址,所以傳輸層就不需要IP了,傳輸層主要是封裝端口號,端口號用于標(biāo)識源主機哪個進程傳遞給目標(biāo)主機的哪個目標(biāo)進程。

?(5)數(shù)據(jù)的封裝過程

5. TCP/UDP傳輸層協(xié)議簡介

(1)TCP協(xié)議

面向連接的安全的流式傳輸協(xié)議

- 連接的時候,自動進行三次握手

- 數(shù)據(jù)發(fā)送的時候,會進行數(shù)據(jù)確認,是否收到

- 數(shù)據(jù)丟失之后,會進行數(shù)據(jù)重傳

(2)UDP協(xié)議

面向無連接的不安全的報式傳輸

- 連接的時候不會握手,通過IP和PORT連接

- 數(shù)據(jù)發(fā)送出去之后就不再管了,即不在乎對方收沒收到

實際上,雖然UDP不會校驗數(shù)據(jù),也就是不安全的,但是實際上我們可以在應(yīng)用層對數(shù)據(jù)做校驗來實現(xiàn)UDP的安全傳輸,比如說QQ發(fā)消息就是使用的UDP協(xié)議,但是它在應(yīng)用層自己定義了一套協(xié)議來保證安全傳輸,如果傳輸失敗可以再次傳輸,而QQ密碼校驗和文件傳輸則是使用TCP傳輸。

?6. DNS服務(wù)器

DNS服務(wù)器也叫做域名解析服務(wù)器,根據(jù)域名解析出IP地址,比如說在瀏覽器輸入一個域名www.baidu.com,該域名將會通過DNS服務(wù)器解析得到IP地址。DNS根服務(wù)器在全世界總共有13臺,其中美國10臺,英國、瑞典、日本各有一臺。如果其他國家不向中國提供域名解析服務(wù),那么我們就無法上網(wǎng)了,所以中國現(xiàn)在主推IPv6,實現(xiàn)DNS根服務(wù)器的多國治理。

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
AFBR-2624Z 1 Foxconn Receiver, 630nm Min, 685nm Max, Through Hole Mount, ROHS COMPLIANT, PLASTIC, PACKAGE-8
$18.85 查看
TF322P32K7680R 1 CTS Corporation Parallel - Fundamental Quartz Crystal, 0.032768MHz Nom,
暫無數(shù)據(jù) 查看
SN65HVD232D 1 Texas Instruments 3.3 V CAN Transceiver 8-SOIC -40 to 85

ECAD模型

下載ECAD模型
$2.72 查看

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

Linux、C、C++、Python、Matlab,機器人運動控制、多機器人協(xié)作,智能優(yōu)化算法,貝葉斯濾波與卡爾曼濾波估計、多傳感器信息融合,機器學(xué)習(xí),人工智能。