資源描述:
《socket網(wǎng)絡(luò)編程》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、基于Socket的網(wǎng)絡(luò)編程Socket又稱為套接字,是采用客戶/服務(wù)器模型設(shè)計(jì)的網(wǎng)絡(luò)通信接口。Socket接口最早使用在Unix系統(tǒng)中,Windows提供的Socket通信稱為WinSock,目前存在v1.1版本(被封裝在WinSock.dll動(dòng)態(tài)鏈接庫文件中)和v2.0版本(被封裝在WS2_32.dll動(dòng)態(tài)鏈接庫文件中)。v1.1版本是針對(duì)Internet而設(shè)計(jì)的,在v2.0版本中已經(jīng)不再局限于TCP/IP協(xié)議,而是根據(jù)Microsoft提出的Windows開放系統(tǒng)架構(gòu)(WindowsOpenSystemArchitecture,WOSA)模型,定義了一個(gè)標(biāo)準(zhǔn)服務(wù)
2、提供接口(StandardServiceProviderInterface,SPI)。通過SPI編程接口,WinSock的應(yīng)用范圍擴(kuò)大到絕大部分的網(wǎng)絡(luò)和協(xié)議。.NETFramework在System.Net.Sockets名空間提供了對(duì)WinSock的托管封裝,提供Socket、TcpListener、TcpClient、UdpClient以及NetworkStream等類來實(shí)現(xiàn)Socket網(wǎng)絡(luò)通信。類說明Socket對(duì)WinSock的封裝和擴(kuò)展TcpListener封裝使用TCP協(xié)議進(jìn)行網(wǎng)絡(luò)偵聽的SocketTcpClient封裝使用TCP協(xié)議進(jìn)行網(wǎng)絡(luò)通信的Soc
3、ketUdpClient封裝使用UDP協(xié)議進(jìn)行網(wǎng)絡(luò)通信的SocketNetworkStream使用流的概念封裝網(wǎng)絡(luò)通信的數(shù)據(jù)在這些類中,Socket類為核心類,它提供了使用WinSock進(jìn)行網(wǎng)絡(luò)通信的基本功能。一、網(wǎng)絡(luò)編程概念網(wǎng)絡(luò)中主機(jī)間的通信是通過網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)的。目前,存在兩種網(wǎng)絡(luò)通信協(xié)議模型:開放系統(tǒng)互連(OpenSystemInterconnection,OSI)參考模型和TCP/IP模型。1、OSI參考模型OSI參考模型是一個(gè)多層通信協(xié)議模型,所謂開放是指允許任意兩個(gè)具有不同基本體系結(jié)構(gòu)的系統(tǒng)進(jìn)行通信的一套協(xié)議族。OSI參考模型最初是由國際化標(biāo)準(zhǔn)組織(Int
4、ernationalStandardOrganization,ISO)開發(fā),1983年成為國際標(biāo)準(zhǔn)。OSI參考模型將網(wǎng)絡(luò)劃分成7層,從上之下分別是:應(yīng)用層(ApplicationLayer)、表示層(PresentationLayer)、會(huì)話層(SessionLayer)、傳輸層(TransportLayer)、網(wǎng)絡(luò)層(NetworkLayer)、數(shù)據(jù)鏈路層(DataLinkLayer)和物理層(PhysicalLayer)。其中,每一層只與其上下兩層直接通信,高層協(xié)議偏重于處理用戶服務(wù)和各種應(yīng)用請(qǐng)求,底層協(xié)議注重于處理實(shí)際的信息傳輸。分層的目的是在于將各種特定的功
5、能分離,并使其實(shí)現(xiàn)對(duì)其他層來說是透明且相互獨(dú)立的。下圖描述了一個(gè)包含通信子網(wǎng)的OSI網(wǎng)絡(luò)通信模型。(1)物理層物理層定義了與物理介質(zhì)的連接機(jī)制,而不是物理介質(zhì)本身。按照OSI模型,物理層在物理介質(zhì)之上,它提供以比特(Bit)為單位形成比特流來傳送來自數(shù)據(jù)鏈路層的數(shù)據(jù),而不理會(huì)數(shù)據(jù)的格式和含義,同樣,當(dāng)接受數(shù)據(jù)(比特流)時(shí)也不加分析直接傳送到數(shù)據(jù)鏈路層。即對(duì)二進(jìn)制數(shù)據(jù)(比特)進(jìn)行編碼(發(fā)送到物理介質(zhì)上)和解碼(從物理介質(zhì)上接受)。如:以太網(wǎng)的曼切斯特編碼,光纖分布式接口(FiberDistributedDataInterface,F(xiàn)DDI)的4B5B編碼。物理層也負(fù)責(zé)
6、通知數(shù)據(jù)鏈路層何時(shí)訪問介質(zhì),如以太網(wǎng)的載波監(jiān)聽功能。此外,在某種程度上,物理層也包含連接策略,主要有:電路交換、報(bào)文交換和分組交換。(2)數(shù)據(jù)鏈路層數(shù)據(jù)鏈路層也稱為鏈路控制層(DataLinkControlLayer,DLC),負(fù)責(zé)管理數(shù)據(jù)格式、鏈路的管理、相鄰網(wǎng)絡(luò)節(jié)點(diǎn)的信息流動(dòng)以及流量控制。在數(shù)據(jù)鏈路層中,數(shù)據(jù)常以幀(Frame)為單位進(jìn)行傳輸,幀通常是由包含起始標(biāo)志的報(bào)頭或報(bào)頭位、尋址信息、循環(huán)冗余碼(CyclicRedundancyCheck,CRC)組成。循環(huán)冗余碼用來保證幀在傳輸過程中的完整性,將無錯(cuò)的幀發(fā)送到網(wǎng)絡(luò)層。OSI模型中的數(shù)據(jù)鏈路層與電氣與電子工
7、程師協(xié)會(huì)(InstituteofElectricalandElectronicEngineers,IEEE)定義的有所不同。IEEE定義的數(shù)據(jù)鏈路層包含邏輯鏈路控制(LogicalLinkControlLayer,LLC)和介質(zhì)訪問控制(MediaAccessControlLayer,MAC)。MAC層基本對(duì)應(yīng)OSI模型中的數(shù)據(jù)鏈路層,LLC層主要提供可靠的面向連接服務(wù)與無連接的數(shù)據(jù)報(bào)服務(wù),ISO在這之上提供了兩種網(wǎng)絡(luò)層服務(wù),即面向連接的網(wǎng)絡(luò)服務(wù)和無連接的網(wǎng)絡(luò)服務(wù)。(3)網(wǎng)絡(luò)層網(wǎng)絡(luò)層提供跨越多個(gè)網(wǎng)絡(luò)的路由和尋址功能,使兩個(gè)終端系統(tǒng)能夠以最佳路徑進(jìn)行互連,并具有一