linux高級編程-網(wǎng)絡(luò)udp_第1頁
linux高級編程-網(wǎng)絡(luò)udp_第2頁
linux高級編程-網(wǎng)絡(luò)udp_第3頁
linux高級編程-網(wǎng)絡(luò)udp_第4頁
linux高級編程-網(wǎng)絡(luò)udp_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

應(yīng)用層傳輸層互聯(lián)網(wǎng)層網(wǎng)絡(luò)接口層它它主主要要實(shí)實(shí)現(xiàn)現(xiàn)將將上上層層傳傳下下來來的的數(shù)數(shù)據(jù)

封裝裝成成底底層層物物理理網(wǎng)網(wǎng)絡(luò)絡(luò)支支持持的的數(shù)數(shù)據(jù)據(jù)格格式式,,并并轉(zhuǎn)轉(zhuǎn)換換成成真真正正的的電電氣氣信信號號而而在在物物理理網(wǎng)網(wǎng)絡(luò)絡(luò)上上傳傳輸輸。。主主要要功能能是是使使源源端端和和目目的的端端上上的的對對等等實(shí)實(shí)體體可可以以進(jìn)進(jìn)行行

。。它它的的功功能能是是使使主主機(jī)機(jī)能能夠夠把把分分組組發(fā)發(fā)往往任任何何網(wǎng)網(wǎng)絡(luò)絡(luò),,并并使使各各分分組組獨(dú)獨(dú)立立地地到到達(dá)達(dá)目目標(biāo)標(biāo)..TCP/IP網(wǎng)絡(luò)簡介TCP/IP參考模型是計(jì)算機(jī)網(wǎng)絡(luò)的始祖,它首先提出了網(wǎng)絡(luò)分層的概念。它一共分為4層:網(wǎng)絡(luò)接口層、互聯(lián)網(wǎng)層、傳輸層和應(yīng)用層,其參考模型如圖:應(yīng)應(yīng)用用層層協(xié)協(xié)議議建建立立在在網(wǎng)網(wǎng)絡(luò)絡(luò)層層協(xié)協(xié)議議之之上上,,專專門門用用于于為為用用戶戶提提供供應(yīng)應(yīng)用用服服務(wù)務(wù),,一一般般是是可可見見的的。。軟帝信息科技http

OSI參考模型與TCP/IP參考模型應(yīng)用層表示層會話層傳輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層物理層應(yīng)用層傳輸層網(wǎng)絡(luò)層網(wǎng)絡(luò)接口層OSI參考模型TCP/IP參考模型軟帝信息科技http

OSI參考模型與TCP/IP參考模型對應(yīng)關(guān)系軟帝信息科技http

TCP/IP協(xié)議族,為網(wǎng)際數(shù)據(jù)通信協(xié)議組大體上分為三部TCP/IP實(shí)際上一個(gè)一起工作的通信提供通路。為 方便可將TCP/IP分:1.Internet協(xié)議(IP)2.傳輸控制協(xié)議(TCP)和用戶數(shù)據(jù)報(bào)文協(xié)議(UDP)3.處于TCP和UDP之上的一組協(xié)議專門開發(fā)的應(yīng)用程序。它們包括:

NET,文件傳送協(xié)議(FTP),

服務(wù)(DNS)和簡單的郵件傳送程序(SMTP)等許多協(xié)議。軟帝信息科技http

網(wǎng)絡(luò)層第一部分也稱為網(wǎng)絡(luò)層。包括Internet

協(xié)議(IP)、網(wǎng)際控制報(bào)文協(xié)議(ICMP)和地址識別協(xié)議(ARP).Internet

協(xié)議(IP)該協(xié)議被設(shè)計(jì)成互聯(lián)分組交換通信網(wǎng),以形成一個(gè)網(wǎng)際通信環(huán)境。它負(fù)責(zé)在源主機(jī)和目的

機(jī)之間傳輸來自其較的稱為數(shù)據(jù)報(bào)文的數(shù)據(jù)塊,它在源和目的地之間提供非連接型傳遞服務(wù)。網(wǎng)際控制報(bào)文協(xié)議(ICMP)它實(shí)際上不是IP層部分,但直接同IP層一起

網(wǎng)絡(luò)上的某些出錯(cuò)情況。允許網(wǎng)際路由器傳輸差錯(cuò)信息或測試報(bào)文。地址識別協(xié)議(ARP)ARP 實(shí)際上不是網(wǎng)絡(luò)層部分,它處于IP和數(shù)據(jù)鏈路層之間,它是在32位IP地址和48位局域網(wǎng)物理地址之間執(zhí)行翻譯的協(xié)議。軟帝信息科技http

傳輸層第二部分是傳輸層協(xié)議。包括傳輸控制協(xié)議和用戶數(shù)據(jù)報(bào)文協(xié)議。傳輸控制協(xié)議(TCP)。由于IP提供非連接型傳遞服務(wù),因此TCP應(yīng)為應(yīng)用程序存取網(wǎng)絡(luò)創(chuàng)造了條件,使用可靠的面向連接的傳輸層服務(wù)。該協(xié)議為建立網(wǎng)際上用戶進(jìn)程之間的負(fù)責(zé)。此外,還確保兩個(gè)以上進(jìn)程之間的可靠通信。它所提供的功能如下。1.

輸入

建立請求。2.請求另一網(wǎng)絡(luò)站點(diǎn)

。3.可靠的發(fā)送和接收數(shù)據(jù)。4.適度的關(guān)閉

。軟帝信息科技http

傳輸層用戶數(shù)據(jù)報(bào)文協(xié)議(UDP)UDP提供不可靠的非連接型傳輸層服務(wù),它允許在源和目的地站點(diǎn)之間傳送數(shù)據(jù),而不必在傳送數(shù)據(jù)之前建立。此外,該協(xié)議還不使用TCP使用的端對端差錯(cuò)校驗(yàn)。當(dāng)使用UDP時(shí),傳輸層功能全都發(fā)揮,而開銷卻比較低。它主要用于那些不要求TCP協(xié)議的非連接型的應(yīng)用程序。例如,名字服務(wù)、網(wǎng)絡(luò)管理、

點(diǎn)播和網(wǎng)絡(luò)會議等.軟帝信息科技http

在TCP/IP模型中,上層功能的實(shí)現(xiàn)要依賴下層提供的服務(wù),如在底層是以太網(wǎng)的TCP/IP網(wǎng)絡(luò)體系體系中,IP分組的傳送要封裝在以太網(wǎng)幀中,而TCP/UDP包的傳送又是封裝在IP分組的data中實(shí)現(xiàn)的。以太網(wǎng)幀以太網(wǎng)幀目的以太網(wǎng)地址destination

Ethernet

address源以太網(wǎng)地址source

Ethernetaddress協(xié)議protocol數(shù)據(jù)data校驗(yàn)和checksum長度Lengthl協(xié)議protocol校驗(yàn)和checksum源IP地址source

IP

address目的IP地址destination

IP

address數(shù)據(jù)data源端口source

port目的端口destination

port序號SEQ應(yīng)答ACK數(shù)據(jù)dataIP分組IP分組TCP包TCP包軟帝信息科技http

Linux中TCP/IP網(wǎng)絡(luò)結(jié)構(gòu)Linux網(wǎng)絡(luò)層次結(jié)構(gòu)IPTCPUDPTCPSLIPEthernetARPINET套接字BSD套接字網(wǎng)絡(luò)應(yīng)用(network

application)用戶內(nèi)核套接字接口協(xié)議層網(wǎng)絡(luò)設(shè)備層軟帝信息科技http

Linux網(wǎng)絡(luò)層次模型用戶進(jìn)程套接字網(wǎng)絡(luò)協(xié)議網(wǎng)絡(luò)設(shè)備軟帝信息科技http

在Linux操作系統(tǒng)中,socket屬于文件系統(tǒng)的一部分,網(wǎng)絡(luò)通信可以被看做是對文件的

。這就使得用戶對網(wǎng)絡(luò)的控制像對文件的控制一樣方便。套接字接口網(wǎng)絡(luò)的socket數(shù)據(jù)傳輸是一種特殊的I/O,socket也是一種文件描述符,它也有類似于對文件操作的函數(shù)調(diào)用,如完成打開、讀/寫等操作。在TCP/IP協(xié)議地址族中,按照提供服務(wù)的層次關(guān)系,套接字有BSD和INET之分。軟帝信息科技http

BSD套接字接口套接字接口(又簡稱套接口)是為方便開發(fā)進(jìn)行TCP/IP程序開發(fā),而為TCP/IP協(xié)議所開發(fā)的一組應(yīng)用程序接口。由于它最早應(yīng)用利大學(xué)的BSD

UNIX中,所以人們又把它稱為BSD

socket(簡稱BSD)。

Linux

BSD套接字支持下列套接字類型:Stream

Stream(流)套接字提供可靠的雙工順序數(shù)據(jù)流,能保證傳輸過程中數(shù)據(jù)不丟失,不被弄混和

。Internet地址中的TCP協(xié)議支持Stream套接字。Datagram

Datagram(數(shù)據(jù)報(bào))套接字提供雙工數(shù)據(jù)傳輸,但與Stream套接字不同,它是不可靠的,不保證信息的到達(dá)。Raw

利用Raw套接字可以直接處理下層協(xié)議(所以叫“Raw”)。軟帝信息科技http

Socket編程基礎(chǔ)客戶機(jī)/服務(wù)器模式在網(wǎng)絡(luò)上大部分的通信都是在客戶機(jī)/服務(wù)器模式下進(jìn)行的,利用socket實(shí)現(xiàn)通信也不例外。在客戶機(jī)/服務(wù)器模式中,將請求服務(wù)的一方稱為客戶端,而將提供服務(wù)的一方稱為服務(wù)器端。socket編程相關(guān)數(shù)據(jù)結(jié)構(gòu)套接口描述符一個(gè)套接口描述符只是一個(gè)整型的數(shù)值,它的定義為intsockfd。(也是一種文件描述符)軟帝信息科技http

Socket編程基礎(chǔ)sockaddr數(shù)據(jù)結(jié)構(gòu)sockaddr數(shù)據(jù)結(jié)構(gòu)中保存著套接口的地址信息,它的定義如下:struct

sockaddr{unsigned

short

sa_family;

/*地址族,定義為AF_

*/char

sa_data[14];

/*14字節(jié)的協(xié)議地址*/};sa_family中可以是其他的很多值,但一般把它賦值為“AF_INET”。sa_data則包括一個(gè)目的地址和一個(gè)端口地址。軟帝信息科技http

Sockaddr_in數(shù)據(jù)結(jié)構(gòu)

sockaddr_in數(shù)據(jù)結(jié)構(gòu)的定義為:

struct

sockaddr_in{short

int

sin_family;/*地址族*/unsigned

short

int

sin_port;/*端*/struct

in_addr

sin_addr;/*IP地址*/unsigned

charsin_zero[8];/*填充0以保持與struct

sockaddr同樣大小*/};這兩個(gè)數(shù)據(jù)類型是等效的,可以相互轉(zhuǎn)換,通常使用sockaddr_in更為方便.軟帝信息科技http

網(wǎng)絡(luò)字節(jié)順序因?yàn)槊恳粋€(gè)機(jī)器

對變量的字節(jié)順序不同(有的系統(tǒng)是

,底位在后,而有的系統(tǒng)是底位在后

),而網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)大家是一定要,順序的。htons():表示“Host

to

NetworkShort”,把主機(jī)地址字節(jié)順序轉(zhuǎn)向網(wǎng)絡(luò)字節(jié)順序(

對短型數(shù)據(jù)操作)

。htonl():表示“Host

to

NetworkLong”,把主機(jī)地址字節(jié)順序轉(zhuǎn)向網(wǎng)絡(luò)字節(jié)順序(

對長型數(shù)據(jù)操作)

。ntohs():表示“Network

to Host

Short”,把網(wǎng)絡(luò)字節(jié)順序轉(zhuǎn)向主機(jī)地址字節(jié)順序(

對短型數(shù)據(jù)操作)

。ntohl():表示“Networkto Host

Long”,把網(wǎng)絡(luò)字節(jié)順序轉(zhuǎn)向主機(jī)地址字節(jié)順序(

對長型數(shù)據(jù)操作)

。軟帝信息科技http

數(shù)據(jù)報(bào)通信對于數(shù)據(jù)報(bào)通信的服務(wù)器端來說,它不必再在一個(gè)端口上偵聽,以等待建立連接,而只需生成一個(gè)端口描述符,并且把這個(gè)端口描述符綁定到本地地址上就可以了。服務(wù)器阻塞,等待

請求bind()recvfrom()socket()bind()recvfrom()socket()數(shù)據(jù)(請求)sendto()客戶機(jī)close()close()軟帝信息科技有18限公司http

sendto()數(shù)據(jù)(應(yīng)答)socket通信常用API函數(shù)socket(

)使用系統(tǒng)調(diào)用socket()來獲得文件描述符,該調(diào)用的格式如下:#include

<sys/types.h>#include

<sys/socket.h>intsocket(int ,

int

type,

int

protocol);軟帝信息科技http

socket函數(shù)說明軟帝信息科技http

bind(

)一旦有了一個(gè)套接口以后,下一步工作就是把套接口綁定到本地計(jì)算機(jī)的某一個(gè)端口上,但如果只想使用connect()則無此必要。下面是系統(tǒng)調(diào)用bind()的定義:#include

<sys/types.h>#include

<sys/socket.h>int

bind(int

sockfd,

struct

sockaddr

*my_addr,

intaddrlen);軟帝信息科技http

bind函數(shù)說明軟帝信息科技http

connect(

)connect()系統(tǒng)調(diào)用由客戶端調(diào)用,它的用法如下:#include

<sys/types.h>#include

<sys/socket.h>int

connect(int

sockfd,

struct

sockaddr

*serv_addr,intaddrlen);軟帝信息科技http

connect函數(shù)說明軟帝信息科技http

sendto()和recvfrom()的主機(jī)上,所因?yàn)閿?shù)據(jù)報(bào)套接口是無連接的,它并不連接到

以在發(fā)送數(shù)據(jù)包之前,必須首先給出目的地址:in

dto(int

sockfd, const

void

*msg,

int

len,unsignedint

flags, const

stuct

sockaddr

*to,

inttolen);intrecvfrom(intsockfd,void

*buf,

intlen,unsignedintflags,

stuctsockaddr

*from,

int

*fromlen);軟帝信息科技http

sendto函數(shù)說明軟帝信息科技http

recvfrom函數(shù)說明軟帝信息科技http

close(

)和shutdown()可以使用close()調(diào)用關(guān)閉連接的套接口文件描述符,它的調(diào)用方式為:close(sockfd);這樣以后就不能再對此套接口進(jìn)行任何的讀/寫操作了。使用系統(tǒng)調(diào)用shutdown(),可有

的控制權(quán)。int

shutdown(int

sockfd,

int

how);第1個(gè)參數(shù)是希望切斷通信的套接口文件描述符。第2個(gè)參數(shù)how值如下:0:不允許再接收數(shù)據(jù)。1:不允許再發(fā)送數(shù)據(jù)。2:發(fā)送和接收數(shù)據(jù)都不允許。shutdown()調(diào)用如果成功返回0,如果失敗則返回-l。軟帝信息科技http

#include

<sys/types.h>#include

<sys/socket.h>#include

<netinet/in.h>#include

<stdio.h>#include

<errno.h>#define

SERVER_PORT8888#define

MAX_MSG_SIZE1024void

udps_respon(int

sockfd){struct

sockaddr_in

addr;int

addrlen,n;char

msg[MAX_MSG_SIZE];網(wǎng)絡(luò)數(shù)據(jù)報(bào)編程/*服務(wù)端程序UDPServer.c*/29軟帝信息科技http

網(wǎng)絡(luò)數(shù)據(jù)報(bào)編程while(1){

/*等待數(shù)據(jù)請求*/n=recvfrom(sockfd,msg,MAX_MSG_SIZE,0,(struct

sockaddr*)&addr,&addrlen);msg[n]=0;/*顯示服務(wù)器端已經(jīng)收到了信息*/fprintf(stdout,"I

have

received%s",msg);/*數(shù)據(jù)回送*/sendto(sockfd,msg,n,0,(struct

sockaddr*)&addr,addrlen);}}軟帝信息科技http

網(wǎng)絡(luò)數(shù)據(jù)報(bào)編程int

main(void){intsockfd;struct

sockaddr_inaddr;sockfd=socket(AF_INET,SOCK_DGRAM,0);if(sockfd<0){fprintf(stderr,"Socket

Error:%s\n",strerror(errno));exit(1);}軟帝信息科技http

網(wǎng)絡(luò)數(shù)據(jù)報(bào)編程bzero(&addr,sizeof(struct

sockaddr_in));addr.sin_family=AF_INET;addr.sin_addr.s_addr=htonl(INADDR_ANY);addr.sin_port=htons(SERVER_PORT);if(bind(sockfd,(struct

sockaddr

*)&addr,sizeof(struct

sockaddr_in))<0){fprintf(stderr,"Bind

Error:%s\n",strerror(errno));exit(1);}udps_respon(sockfd);close(sockfd);}軟帝信息科技http

網(wǎng)絡(luò)數(shù)據(jù)報(bào)編程—客戶端/*客戶端程序UDPClient.c,使用方法UDPClient

ServerIP

ServerPort*/#include<sys/types.h>#include

<sys/socket.h>#include

<netinet/in.h>#include

<errno.h>#include

<stdio.h>#include

<unistd.h>#define

MAX_BUF_SIZE

1024void

udpc_requ(int

sockfd,const

struct

sockaddr_in

*addr,int

len){char

buffer[MAX_BUF_SIZE];軟帝信息科技http

網(wǎng)絡(luò)數(shù)據(jù)報(bào)編程—客戶端int

n;while(1){/*從鍵盤讀入,寫到服務(wù)端*/fgets(buffer,MAX_BUF_SIZE,stdin);sendto(sockfd,buffer,strlen(buffer),0,addr,len);bzero(buffer,MAX_BUF_SIZE);/*從網(wǎng)絡(luò)上讀,寫到屏幕上*/n=recvfrom(sockfd,buffer,MAX_BUF_SIZE,0,NULL,NULL);buffer[n]=0;fputs(buffer,stdout);}}軟帝信息科技http

網(wǎng)絡(luò)數(shù)據(jù)報(bào)編程—客戶端int

main(int

argc,char

**argv){intsockfd,port;struct

sockaddr_i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論