當(dāng)前位置:首頁(yè) > 電源 > 功率器件
[導(dǎo)讀] Linux 是一種自由的Unix類多用戶,多任務(wù)的操作系統(tǒng),可在運(yùn)行在Intel 80386及更高檔次的PC機(jī)、ARMS、MIPS和PowerPC等多種計(jì)算機(jī)平臺(tái),已成為應(yīng)用廣泛、可靠性高、功能強(qiáng)

 Linux 是一種自由的Unix類多用戶,多任務(wù)的操作系統(tǒng),可在運(yùn)行在Intel 80386及更高檔次的PC機(jī)、ARMS、MIPS和PowerPC等多種計(jì)算機(jī)平臺(tái),已成為應(yīng)用廣泛、可靠性高、功能強(qiáng)大的計(jì)算機(jī)操作系統(tǒng),Linux 具有內(nèi)核小、效率高、源代碼開放等優(yōu)點(diǎn),還內(nèi)含了TCP/IP網(wǎng)絡(luò)協(xié)議,很適合在服務(wù)器領(lǐng)域使用,而服務(wù)器主要用途之一就是進(jìn)行網(wǎng)絡(luò)通信,隨著計(jì)算機(jī)辦公自動(dòng)化處理技術(shù)的應(yīng)用與推廣,網(wǎng)絡(luò)的不斷普及,傳統(tǒng)的紙張式文件傳輸方式已經(jīng)不再適合發(fā)展的需要,人們更期待一種便捷、高效、環(huán)保、安全的網(wǎng)絡(luò)傳輸方式。

本文就是考慮到這一現(xiàn)狀,結(jié)合基于Linux操作系統(tǒng)下的TCP/IP網(wǎng)絡(luò)通信原理,給出了一種基于TCP/IP編程實(shí)現(xiàn)文件傳輸?shù)膶?shí)例,因此,TCP/IP網(wǎng)絡(luò)通信研究具有十分重要的意義。

2 TCP/IP協(xié)議概述

TCP/IP即傳輸控制協(xié)議/網(wǎng)絡(luò)協(xié)議[1](Transmission Control Protocol/Internet Protocol),是一個(gè)由多種協(xié)議組成的協(xié)議族,他定義了計(jì)算機(jī)通過(guò)網(wǎng)絡(luò)互相通信及協(xié)議族各層次之間通信的規(guī)范,圖1描述了Linux對(duì)IP協(xié)議族的實(shí)現(xiàn)機(jī)制[2]。

Linux支持BSD的套接字和全部的TCP/IP協(xié)議,是通過(guò)網(wǎng)絡(luò)協(xié)議將其視為一組相連的軟件層來(lái)實(shí)現(xiàn)的,BSD套接字(BSD Socket)由通用的套接字管理軟件支持,該軟件是INET套接字層,用來(lái)管理基于IP的TCP與UDP端口到端口的互聯(lián)問(wèn)題,從協(xié)議分層來(lái)看,IP是網(wǎng)絡(luò)層協(xié)議,TCP是一個(gè)可靠的端口到端口的傳輸層協(xié)議,他是利用IP層進(jìn)行傳接報(bào)文的,同時(shí)也是面向連接的,通過(guò)建立一條虛擬電路在不同的網(wǎng)路間傳輸報(bào)文,保證所傳輸報(bào)文的無(wú)丟失性和無(wú)重復(fù)性。用戶數(shù)據(jù)報(bào)文協(xié)議(User Datagram Protocol,UDP)也是利用IP層傳輸報(bào)文,但他是一個(gè)非面向連接的傳輸層協(xié)議,利用IP層傳輸報(bào)文時(shí),當(dāng)目的方網(wǎng)際協(xié)議層收到IP報(bào)文后,必須識(shí)別出該報(bào)文所使用的上層協(xié)議(即傳輸層協(xié)議),因此,在IP報(bào)頭上中,設(shè)有一個(gè)"協(xié)議"域(Protocol)。通過(guò)該域的值,即可判明其上層協(xié)議類型,傳輸層與網(wǎng)絡(luò)層在功能說(shuō)的最大區(qū)別是前者提供進(jìn)程通信能力,而后者則不能,在進(jìn)程通信的意義上,網(wǎng)絡(luò)通信的最終地址不僅僅是主機(jī)地址,還包括可以描述進(jìn)程的某種標(biāo)識(shí)符,為此,TCP/UDP提出了協(xié)議端口(Protocol Port)的概念,用于標(biāo)識(shí)通信的進(jìn)程,例如,Web服務(wù)器進(jìn)程通常使用端口80,在/etc/services文件中有這些注冊(cè)了的端口地址。

對(duì)于TCP傳輸,傳輸節(jié)點(diǎn)間先要建立連接,然后通過(guò)該連接傳輸已排好序的報(bào)文,以保證傳輸?shù)恼_性,IP層中的代碼用于實(shí)現(xiàn)網(wǎng)際協(xié)議,這些代碼將 IP頭增加到傳輸數(shù)據(jù)中,同時(shí)也把收到的IP報(bào)文正確的傳送到TCP層或UDP層。TCP是一個(gè)面向連接協(xié)議,而UDP則是一個(gè)非面向連接協(xié)議,當(dāng)一個(gè) UDP報(bào)文發(fā)送出去后,Linux并不知道也不去關(guān)心他是否成功地到達(dá)了目的的主機(jī),IP層之下,是支持所有Linux網(wǎng)絡(luò)應(yīng)用的網(wǎng)絡(luò)設(shè)備層,例如點(diǎn)到點(diǎn)協(xié)議(Point to Point Protocol,PPP)和以太網(wǎng)層。網(wǎng)絡(luò)設(shè)備并非總代表物理設(shè)備,其中有一些(例如回送設(shè)備)則是純粹的軟件設(shè)備,網(wǎng)絡(luò)設(shè)備與標(biāo)準(zhǔn)的Linux設(shè)備不同,他們不是通過(guò)Mknod命令創(chuàng)建的,必須是底層軟件找到并進(jìn)行了初始化之后,這些設(shè)備才被創(chuàng)建并可用。因此只有當(dāng)啟動(dòng)了正確設(shè)置的以太網(wǎng)設(shè)備驅(qū)動(dòng)程序的內(nèi)核后,才會(huì)有/dev/eth0文件,ARP協(xié)議位于IP層和支持地址解析的協(xié)議層之間。

3 網(wǎng)絡(luò)通信原理

所有的網(wǎng)絡(luò)通信就其實(shí)現(xiàn)技術(shù)可以分為兩種,線路交換和包交換,計(jì)算機(jī)網(wǎng)絡(luò)一般采用包交換,TCP使用了包交換通信技術(shù),計(jì)算機(jī)網(wǎng)絡(luò)中所傳輸?shù)臄?shù)據(jù),全部都以包(Packet)這個(gè)單位來(lái)發(fā)送,包由"報(bào)頭"和"報(bào)文"組成,結(jié)構(gòu)如圖2所示,在"報(bào)頭"中記載有發(fā)送主機(jī)地址,接收主機(jī)地址及與報(bào)文內(nèi)容相關(guān)的信息等,在"報(bào)文"中記載有需要發(fā)送的數(shù)據(jù),網(wǎng)絡(luò)中的每個(gè)主機(jī)和路由器中都有一個(gè)路由尋址表,根據(jù)這個(gè)路由表,包就可以通過(guò)網(wǎng)絡(luò)傳送到相應(yīng)的目的主機(jī)。

網(wǎng)絡(luò)通信中的一個(gè)非常重要的概念就是套接字(Socket)[3,4],簡(jiǎn)單地說(shuō),套接字就是網(wǎng)絡(luò)進(jìn)程的ID,網(wǎng)絡(luò)通信歸根到底是進(jìn)程的通信,在網(wǎng)絡(luò)中,每個(gè)節(jié)點(diǎn)有一個(gè)網(wǎng)絡(luò)地址(即IP地址),兩個(gè)進(jìn)程通信時(shí),首先要確定各自所在網(wǎng)絡(luò)節(jié)點(diǎn)的網(wǎng)絡(luò)地址,但是,網(wǎng)絡(luò)地址只能確定進(jìn)程所在的計(jì)算機(jī),而一臺(tái)計(jì)算機(jī)上可能同時(shí)有多個(gè)網(wǎng)絡(luò)進(jìn)程,還不能確定到底是其中的哪個(gè)進(jìn)程,由此套接字中還要有其他的信息,那就是端口號(hào)(Port),在一臺(tái)計(jì)算機(jī)中,一個(gè)端口一次只能分配給一個(gè)進(jìn)程,即端口號(hào)與進(jìn)程是一一對(duì)應(yīng)的關(guān)系,所以,端口號(hào)和網(wǎng)絡(luò)地址就能唯一地確定Internet中的一個(gè)網(wǎng)絡(luò)進(jìn)程??梢哉J(rèn)為:套接字= 網(wǎng)絡(luò)地址+端口號(hào)

系統(tǒng)調(diào)用一個(gè)Socket()得到一個(gè)套接字描述符,然后就可以通過(guò)他進(jìn)行網(wǎng)絡(luò)通信了。

套接字有很多種類,最常用的就有兩種;流式套接字和數(shù)據(jù)報(bào)套接字。在Linux中分別稱之為"SOCK_STREAM"和"SOCK_DGRAM)"他們分別使用不同的協(xié)議,流式套接字使用TCP協(xié)議,數(shù)據(jù)報(bào)套接字使用UDP協(xié)議,本文所使用的是流式套接字協(xié)議。

4 網(wǎng)絡(luò)通信原理在文件傳輸程序設(shè)計(jì)中的應(yīng)用

網(wǎng)絡(luò)上的絕大多數(shù)通信采用的都是客戶機(jī)/服務(wù)器機(jī)制(Client/Server),即服務(wù)器提供服務(wù),客戶是這些服務(wù)的使用者,服務(wù)器首先創(chuàng)建一個(gè)Socket,然后將該Socket與本地地址/端口號(hào)綁定(Bind()),成功之后就在相應(yīng)的Socket上監(jiān)聽(Listen()) 。當(dāng)Accept()函數(shù)捕捉到一個(gè)連接服務(wù)(Connect())請(qǐng)求時(shí),接受并生成一個(gè)新的Socket,并通過(guò)這個(gè)新的Socket與客戶端通信,客戶端同樣也要?jiǎng)?chuàng)建一個(gè)Socket,將該Socket與本地地址/端口號(hào)綁定,還需要指定服務(wù)器端的地址與端口號(hào),隨后向服務(wù)器端發(fā)出 Connect(),請(qǐng)求被服務(wù)器端接受后,可以通過(guò)Socket與服務(wù)器端通信。

TCP是一種面向連接的、可靠的、雙向的通信數(shù)據(jù)流,說(shuō)他可靠,是因?yàn)樗褂?段握手協(xié)議傳輸數(shù)據(jù),并且在傳輸時(shí)采用"重傳肯定確認(rèn)"機(jī)制保證數(shù)據(jù)的正確發(fā)送:接收端收到的數(shù)據(jù)后要發(fā)出一個(gè)肯定確認(rèn),而發(fā)送端必須要能接受到這個(gè)肯定信號(hào),否則就要將數(shù)據(jù)重發(fā)。在此原理基礎(chǔ)之上,設(shè)計(jì)了基于Linux 操作系統(tǒng)下TCP/IP編程實(shí)現(xiàn)文件傳輸?shù)膶?shí)例。我們采用客戶機(jī)/服務(wù)器模式通信時(shí),通信雙方發(fā)送/接收數(shù)據(jù)的工作流程如圖3所示。

文件傳輸就是基于客戶機(jī)/服務(wù)器模型而設(shè)計(jì)的,客戶機(jī)和服務(wù)器之間利用TCP建立連續(xù),因文件傳輸是一個(gè)交互式會(huì)話系統(tǒng),客戶機(jī)每次執(zhí)行文件傳輸,都需要與服務(wù)器建立控制連接和數(shù)據(jù)連接,其中控制連接負(fù)責(zé)傳輸控制信息、利用控制命令、客戶機(jī)可以向服務(wù)器提出無(wú)限次的請(qǐng)求,客戶機(jī)每次提出的請(qǐng)求,服務(wù)器與客戶機(jī)建立一個(gè)數(shù)據(jù)連接,進(jìn)行實(shí)際的數(shù)據(jù)傳輸,數(shù)據(jù)傳輸完畢后,對(duì)應(yīng)的數(shù)據(jù)連接被清除,控制連接依然保持,等待客戶機(jī)發(fā)出新的傳輸請(qǐng)求,直到客戶機(jī)撤銷控制連接,結(jié)束會(huì)話。

當(dāng)進(jìn)行文件傳輸時(shí),首先向服務(wù)器發(fā)出連接請(qǐng)求,服務(wù)器驗(yàn)證身份后,與客戶端建立連接,雙方進(jìn)入會(huì)話狀態(tài),這時(shí)只要客戶端向服務(wù)器端發(fā)出數(shù)據(jù)連接請(qǐng)求,建立起數(shù)據(jù)連接后,雙方就進(jìn)入數(shù)據(jù)傳輸狀態(tài),數(shù)據(jù)傳輸完畢后,數(shù)據(jù)連接被撤銷,如此循環(huán)反復(fù),直到會(huì)話結(jié)束,從而實(shí)現(xiàn)將文件從服務(wù)器端傳輸至客戶機(jī)端。

5 文件傳輸程序設(shè)計(jì)流程[5,6]

5.1 客戶端的TCP應(yīng)用程序流程

(1)先用Socket()創(chuàng)建本地套接口,給服務(wù)器端套接口地址結(jié)構(gòu)賦值。

(2)用Connect()函數(shù)使本地套接口向服務(wù)器端套接口發(fā)出建立連接請(qǐng)求,經(jīng)3次握手建立TCP連接。

(3)用Read()函數(shù)讀取所要接收的文件名以及存放在內(nèi)存里的文件內(nèi)容。

(4)用Open()函數(shù)打開客戶端新建立的目標(biāo)文件,如果沒(méi)有建立,該函數(shù)會(huì)自動(dòng)生成目標(biāo)文件,等待存放文件內(nèi)容。

(5)最后用Write()函數(shù)將讀取的文件內(nèi)容存放在新的目標(biāo)文件中,以實(shí)現(xiàn)服務(wù)器端向客戶端的文件傳輸。

(6)通信結(jié)束,用Close()關(guān)閉套接口,停止接收文件。

5.2 服務(wù)器端的TCP應(yīng)用程序流程

(1)先用Open()函數(shù)打開等待傳輸?shù)目勺x文件;

(2)用Socket()創(chuàng)建套接口,并給套接口地址結(jié)構(gòu)賦值;

(3)用Bind()函數(shù)綁定套接口;

(4)用Listen()函數(shù)在該套接口上監(jiān)聽請(qǐng)求;

(5)用Accept()函數(shù)接受請(qǐng)求,產(chǎn)生新的套接口及描述字,并與客戶端連接;

(6)用Lseek()函數(shù)是為了在每次接受客戶機(jī)連接時(shí),將用于讀的源文件指針移到文件頭;

(7)用Read()函數(shù)讀取一定長(zhǎng)度的源文件數(shù)據(jù);

(8)最后用Write()函數(shù)將讀取的源文件數(shù)據(jù)存放在內(nèi)存中,以便客戶端讀取;

(9)傳輸完畢時(shí),用Close()關(guān)閉所有進(jìn)程,結(jié)束文件傳輸。

在文件傳輸過(guò)程中,很重要的一點(diǎn)是:當(dāng)服務(wù)器端開始發(fā)送數(shù)據(jù)時(shí),客戶端要同時(shí)進(jìn)行文件數(shù)據(jù)的接收。如果客戶端沒(méi)有運(yùn)行,服務(wù)器端會(huì)一直等待客戶端發(fā)送請(qǐng)求,當(dāng)服務(wù)器源文件發(fā)送完畢,則客戶端也將源文件的數(shù)據(jù)完全接收,并生成新的目標(biāo)文件,從而實(shí)現(xiàn)文件的網(wǎng)絡(luò)通信。

6 結(jié)語(yǔ)

Linux操作系統(tǒng)在網(wǎng)絡(luò)應(yīng)用方面具有很強(qiáng)的開發(fā)潛力,同時(shí)Linux也是可靠性、安全性非常高的系統(tǒng),因此在基于TCP/IP網(wǎng)絡(luò)通信的研究與開發(fā)中,通常選用Linux操作系統(tǒng)作為開發(fā)平臺(tái)。 本文是介紹基于Linux操作系統(tǒng)下TCP/IP網(wǎng)絡(luò)通信的實(shí)際應(yīng)用主要用于文件的網(wǎng)絡(luò)傳輸,解決了文件傳輸?shù)男蕟?wèn)題,作為進(jìn)一步完善,可以在文件傳送的過(guò)程中,加入如身份驗(yàn)證、權(quán)限分配、文件加密等安全機(jī)制,保證一些重要文件在傳送過(guò)程中不會(huì)出現(xiàn)泄密的情況,該設(shè)計(jì)可廣泛應(yīng)用企業(yè)辦公區(qū)域網(wǎng)中。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉