畢業(yè)論文-icmp掃描器設(shè)計(jì)【精校排版】_第1頁(yè)
已閱讀1頁(yè),還剩47頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  本科畢業(yè)設(shè)計(jì)(論文)</p><p><b> ?。?0 屆)</b></p><p><b>  ICMP掃描器設(shè)計(jì)</b></p><p><b>  目 錄</b></p><p><b>  摘要III</b></p

2、><p>  AbstractIV</p><p><b>  第一章 緒論1</b></p><p>  1.1 網(wǎng)絡(luò)掃描器基本概念1</p><p>  1.2 網(wǎng)絡(luò)掃描器分類1</p><p>  1.2.1 端口掃描1</p><p>  1.2.2

3、 TCP SYN 掃描1</p><p>  1.2.3 TCP FIN 掃描2</p><p>  1.2.4 TCP connect()掃描2</p><p>  1.2.5 ICMP掃描2</p><p>  1.2.6 UDP掃描3</p><p>  第二章 Winsock網(wǎng)絡(luò)程序設(shè)計(jì)4

4、</p><p>  2.1 Winsock網(wǎng)絡(luò)程序設(shè)計(jì)基本概念4</p><p>  2.2 Windows Sockets規(guī)范4</p><p>  2.2.1 服務(wù)器端操作 Socket(套接字)5</p><p>  2.2.2 數(shù)據(jù)的傳送8</p><p>  2.3 網(wǎng)絡(luò)通信/連接中需要設(shè)

5、置的參數(shù)9</p><p>  2.4 套接口類所提供的一些功能9</p><p>  2.5 客戶機(jī)服務(wù)器模型11</p><p>  第三章 TCP/IP協(xié)議介紹12</p><p>  3.1 概念12</p><p>  3.2 產(chǎn)生背景13</p><p>  3

6、.3 開發(fā)過程15</p><p>  3.4 主要協(xié)議16</p><p>  3.4.1 網(wǎng)間協(xié)議IP17</p><p>  3.4.2 傳輸控制協(xié)議TCP17</p><p>  3.4.3 IP地址及其分類18</p><p>  3.5 IP地址19</p><p

7、>  3.6 協(xié)議層級(jí)20</p><p>  3.6.1 接口層20</p><p>  3.6.2 網(wǎng)絡(luò)層20</p><p>  3.6.3 傳輸層21</p><p>  3.6.4 應(yīng)用層21</p><p>  3.7 ICMP協(xié)議22</p><p>

8、  3.7.1 ICMP協(xié)定內(nèi)容23</p><p>  3.7.2 ICMP的重要性24</p><p>  3.7.3 ICMP 校驗(yàn)和算法25</p><p>  3.8 防御基于ICMP 的網(wǎng)絡(luò)攻擊的方法26</p><p>  3.8.1 選擇合適的防火墻26</p><p>  3.8.

9、2 配置防火墻以預(yù)防攻擊26</p><p>  3.9 過濾規(guī)則26</p><p>  第四章 ICMP掃描器設(shè)計(jì)28</p><p><b>  總結(jié)33</b></p><p><b>  參考文獻(xiàn)34</b></p><p><b>  附

10、錄35</b></p><p><b>  致謝42</b></p><p><b>  ICMP掃描器設(shè)計(jì)</b></p><p><b>  摘要</b></p><p>  網(wǎng)絡(luò)的開放性以及黑客的攻擊是造成網(wǎng)絡(luò)不安全的主要原因。科學(xué)家在設(shè)計(jì)Internet

11、之初就缺乏對(duì)安全性的總體構(gòu)想和設(shè)計(jì),我們所用的TCP/IP 協(xié)議是建立在可信的環(huán)境之下,首先考慮的是網(wǎng)絡(luò)互連,它是缺乏對(duì)安全方面的考慮的。而且TCP/IP協(xié)議是完全公開的,遠(yuǎn)程訪問使許多攻擊者無須到現(xiàn)場(chǎng)就能夠得手,連接的主機(jī)基于互相信任的原則等等這一些性質(zhì)使網(wǎng)絡(luò)更加不安全。先進(jìn)的技術(shù)是實(shí)現(xiàn)網(wǎng)絡(luò)信息安全的有力武器。</p><p>  高級(jí)ICMP掃描技術(shù),Ping就是利用ICMP協(xié)議實(shí)現(xiàn)的,高級(jí)的ICMP掃描技術(shù)

12、主要是利用ICMP協(xié)議最基本的用途:報(bào)錯(cuò)。根據(jù)網(wǎng)絡(luò)協(xié)議,如果按照協(xié)議出現(xiàn)了錯(cuò)誤,那么接收端將產(chǎn)生一個(gè)ICMP的錯(cuò)誤報(bào)文。這些錯(cuò)誤報(bào)文并不是主動(dòng)發(fā)送的,而是由于錯(cuò)誤,根據(jù)協(xié)議自動(dòng)產(chǎn)生。當(dāng)IP數(shù)據(jù)報(bào)出現(xiàn)checksum和版本的錯(cuò)誤的時(shí)候,目標(biāo)主機(jī)將拋棄這個(gè)數(shù)據(jù)報(bào),如果是checksum出現(xiàn)錯(cuò)誤,那么路由器就直接丟棄這個(gè)數(shù)據(jù)報(bào)了。有些主機(jī)比如AIX、HP-UX等,是不會(huì)發(fā)送ICMP的Unreachable數(shù)據(jù)報(bào)的。</p>&l

13、t;p>  網(wǎng)絡(luò)掃描器是系統(tǒng)管理員保障系統(tǒng)安全的有效工具,也是網(wǎng)絡(luò)入侵者收集信息的重要手段。</p><p>  關(guān)鍵詞:網(wǎng)絡(luò)掃描器;TCP/IP協(xié)議;ICMP掃描</p><p>  The Design of ICMP Scanner</p><p><b>  Abstract</b></p><p>  N

14、etwork openness and caused by hackers is the main reason for the network is not safe. Scientists at the beginning of the Internet design of the overall lack of security ideas and design,We used the TCP/IP protocol is bas

15、ed on credible environment under, first concern is the networking, it is lack of security considerations. And the TCP/IP protocol is completely open, remote access make many attackers need not to site can successful, bas

16、ed on mutual trust and connected hosts some properties of p</p><p>  SeniorICMP scanning techniques, the Ping is to useICMP protocol walk,SeniorICMP scanning technique is mainly useICMP protocol most basic p

17、urpose: error occurs. According to the network protocol, in accordance with the agreement appeared mistake if, then the receiver will produce anICMP error message. These error messages and not actively send, but because,

18、 according to the agreement automatically generated errors. When IP data submitted newer and version of the errors occur when the target host </p><p>  Key words:Network Scanner,TCP/IP Protocol ,ICMP</p&g

19、t;<p><b>  第一章 緒論</b></p><p>  1.1 網(wǎng)絡(luò)掃描器基本概念</p><p>  網(wǎng)絡(luò)掃描器是系統(tǒng)管理員保障系統(tǒng)安全的有效工具,也是網(wǎng)絡(luò)入侵者收集信息的重要手段。迅速發(fā)展的Internet給人們的生活、工作帶來了巨大的方便,但同時(shí),也帶來了一些不容忽視的問題,網(wǎng)絡(luò)信息的安全保密問題就是其中之一。</p>

20、<p>  網(wǎng)絡(luò)的開放性以及黑客的攻擊是造成網(wǎng)絡(luò)不安全的主要原因??茖W(xué)家在設(shè)計(jì)Internet之初就缺乏對(duì)安全性的總體構(gòu)想和設(shè)計(jì),我們所用的TCP/IP 協(xié)議是建立在可信的環(huán)境之下,首先考慮的是網(wǎng)絡(luò)互連,它是缺乏對(duì)安全方面的考慮的。而且TCP/IP協(xié)議是完全公開的,遠(yuǎn)程訪問使許多攻擊者無須到現(xiàn)場(chǎng)就能夠得手,連接的主機(jī)基于互相信任的原則等等這一些性質(zhì)使網(wǎng)絡(luò)更加不安全。Internet不斷增加的復(fù)雜性、協(xié)議與應(yīng)用的不斷增多等都使得

21、安全防護(hù)的難度加大[1]。</p><p>  先進(jìn)的技術(shù)是實(shí)現(xiàn)網(wǎng)絡(luò)信息安全的有力武器,這些技術(shù)包括:密碼技術(shù)、身份驗(yàn)證技術(shù)、訪問控制技術(shù)、安全內(nèi)核技術(shù)、網(wǎng)絡(luò)反病毒病技術(shù)、信息泄漏防治技術(shù)、防火墻技術(shù)、網(wǎng)絡(luò)安全漏洞掃描技術(shù)、入侵檢測(cè)技術(shù)等。而在系統(tǒng)發(fā)生安全事故窗體頂端之前對(duì)其進(jìn)行預(yù)防性檢查,及時(shí)發(fā)現(xiàn)問題并予以解決不失為一種很好的辦法,于是網(wǎng)絡(luò)安全漏洞掃描技術(shù)應(yīng)運(yùn)而生[1]。</p><p>

22、;  1.2 網(wǎng)絡(luò)掃描器分類</p><p>  1.2.1 端口掃描</p><p>  端口掃描:真正的掃描器是TCP端口掃描器,這種程序可以選通TCP/IP端口和服務(wù)(比如,Telnet或FTP),并記錄目標(biāo)的回答。通過這種方法,可以搜集到關(guān)于目標(biāo)主機(jī)的有用信息(比如,一個(gè)匿旬用戶是否可以登錄等等)。而其他所謂的掃描器僅僅是UNIX網(wǎng)絡(luò)應(yīng)用程序,這些程序一般用于觀察某一服務(wù)是否正

23、在一臺(tái)遠(yuǎn)程機(jī)器上正常工作,它們不是真正的掃描器,但也可以用于收集目標(biāo)主機(jī)的信息(UNIX平臺(tái)上通用的rusers和host命令就是這類程序的很好的例子)[2]。</p><p>  1.2.2 TCP SYN 掃描</p><p>  TCP SYN 掃描:掃描程序發(fā)送的SYN數(shù)據(jù)包,好像準(zhǔn)備打開一個(gè)新的連接并等待反映一樣。一個(gè)SYN|ACK的返回信息表示端口處于偵聽狀態(tài)。一個(gè)RST 返

24、回表示端口沒有處于偵聽狀態(tài)。如果收到一個(gè)SYN|ACK,掃描程序必須再發(fā)送一個(gè)RST 信號(hào),來關(guān)閉這個(gè)連接過程。優(yōu)點(diǎn):不會(huì)在目標(biāo)計(jì)算機(jī)上留下紀(jì)錄。缺點(diǎn):掃描程序必須要有root權(quán)限才能建立自己的SYN數(shù)據(jù)包</p><p>  1.2.3 TCP FIN 掃描</p><p>  TCP FIN 掃描:關(guān)閉的端口會(huì)用適當(dāng)?shù)腞ST來回復(fù)FIN數(shù)據(jù)包,而打開的端口會(huì)忽略對(duì)FIN數(shù)據(jù)包的回復(fù)。

25、優(yōu)點(diǎn):FIN數(shù)據(jù)包可以不惹任何麻煩的通過。缺點(diǎn):這種方法和系統(tǒng)的實(shí)現(xiàn)有一定的關(guān)系,有些系統(tǒng)不論是打開的或關(guān)閉的端口對(duì)FIN數(shù)據(jù)包都要給以回復(fù),這種情況下該方法就不實(shí)用了。</p><p>  1.2.4 TCP connect()掃描</p><p>  TCP connect()掃描:操作系統(tǒng)操作系統(tǒng) 操提供connect()系統(tǒng)調(diào)用,用來與每一個(gè)感興趣的目標(biāo)計(jì)算機(jī)的端口進(jìn)行連接。如

26、果端口處于偵聽狀態(tài),那么connect()就能成功。否則,這個(gè)端口是不能用的,即沒有提供服務(wù)。優(yōu)點(diǎn):系統(tǒng)中的任何用戶都有權(quán)利使用這個(gè)調(diào)用;如果對(duì)每個(gè)目標(biāo)端口以線性的方式掃描,將會(huì)花費(fèi)相當(dāng)長(zhǎng)的時(shí)間,但如果同時(shí)打開多個(gè)套接字,就能加速掃描。缺點(diǎn):很容易被發(fā)現(xiàn),目標(biāo)計(jì)算機(jī)的logs文件會(huì)顯示一連串連接和連接出錯(cuò)的消息,并且能很快的將它關(guān)閉[3]。</p><p>  1.2.5 ICMP掃描</p>&

27、lt;p>  ICMP掃描: Ping就是利用ICMP協(xié)議走的,高級(jí)的ICMP掃描技術(shù)主 要是利用ICMP協(xié)議最基本的用途:報(bào)錯(cuò)。根據(jù)網(wǎng)絡(luò)協(xié)議,如果按照協(xié)議出現(xiàn)了錯(cuò)誤,那么接收端將產(chǎn)生一個(gè)ICMP的錯(cuò)誤報(bào)文。這些錯(cuò)誤報(bào)文并不是主動(dòng)發(fā)送的,而是由于錯(cuò)誤,根據(jù)協(xié)議自動(dòng)產(chǎn)生 。</p><p>  當(dāng)IP數(shù)據(jù)報(bào)出現(xiàn)checksum和版本的錯(cuò)誤的時(shí)候,目標(biāo)主機(jī)將拋棄這個(gè)數(shù)據(jù)報(bào),如果是checksum出現(xiàn)錯(cuò)誤,那么

28、路由器就直接丟棄這個(gè)數(shù)據(jù)報(bào)了。有些主機(jī)比如AIX、HP-UX等,是不會(huì)發(fā)送ICMP的Unreachable數(shù)據(jù)報(bào)的。 </p><p>  我們利用下面這些特性: </p><p>  向目標(biāo)主機(jī)發(fā)送一個(gè)只有IP頭的IP數(shù)據(jù)包,目標(biāo)將返回Destination Unreachable的ICMP錯(cuò)誤報(bào)文。 </p><p>  向目標(biāo)主機(jī)發(fā)送一個(gè)壞IP數(shù)據(jù)報(bào),比如,不

29、正確的IP頭長(zhǎng)度,目標(biāo)主機(jī)將返回Parameter Problem的ICMP錯(cuò)誤報(bào)文。 </p><p>  當(dāng)數(shù)據(jù)包分片但是,卻沒有給接收端足夠的分片,接收端分片組裝超時(shí)會(huì)發(fā)送分片組裝超時(shí)的ICMP數(shù)據(jù)報(bào)。 </p><p>  向目標(biāo)主機(jī)發(fā)送一個(gè)IP數(shù)據(jù)報(bào),但是協(xié)議項(xiàng)是錯(cuò)誤的,比如協(xié)議項(xiàng)不可用,那么目標(biāo)將返回Destination Unreachable的ICMP報(bào)文,但是如果是在目標(biāo)

30、主機(jī)前有一個(gè)防火墻或者一個(gè)其他的過濾裝置,可能過濾掉提出的要求,從而接收不到任何回應(yīng)??梢允褂靡粋€(gè)非常大的協(xié)議數(shù)字來作為IP頭部的協(xié)議內(nèi)容,而且這個(gè)協(xié)議數(shù)字至少在今天還沒有被使用,應(yīng)該主機(jī)一定會(huì)返回Unreachable,如果沒有Unreachable的ICMP數(shù)據(jù)報(bào)返回錯(cuò)誤提示,那么就說明被防火墻或者其他設(shè)備過濾了,我們也可以用這個(gè)辦法來探測(cè)是否有防火墻或者其他過濾設(shè)備存在[4]。 </p><p>  利用I

31、P的協(xié)議項(xiàng)來探測(cè)主機(jī)正在使用哪些協(xié)議,我們可以把IP頭的協(xié)議項(xiàng)改變,因?yàn)槭?位的,有256種可能。通過目標(biāo)返回的ICMP錯(cuò)誤報(bào)文,來作判斷哪些協(xié)議在使用。如果返回Destination Unreachable,那么主機(jī)是沒有使用這個(gè)協(xié)議的,相反,如果什么都沒有返回的話,主機(jī)可能使用這個(gè)協(xié)議,但是也可能是防火墻等過濾掉了。NMAP的IP Protocol scan也就是利用這個(gè)原理。 </p><p>  利用IP

32、分片造成組裝超時(shí)ICMP錯(cuò)誤消息,同樣可以來達(dá)到我們的探測(cè)目的。當(dāng)主機(jī)接收到丟失分片的數(shù)據(jù)報(bào),并且在一定時(shí)間內(nèi)沒有接收到丟失的數(shù)據(jù)報(bào),就會(huì)丟棄整個(gè)包,并且發(fā)送ICMP分片組裝超時(shí)錯(cuò)誤給原發(fā)送端。我們可以利用這個(gè)特性制造分片的數(shù)據(jù)包,然后等待ICMP組裝超時(shí)錯(cuò)誤消息??梢詫?duì)UDP分片,也可以對(duì)TCP甚至ICMP數(shù)據(jù)包進(jìn)行分片,只要不讓目標(biāo)主機(jī)獲得完整的數(shù)據(jù)包就行了,當(dāng)然,對(duì)于UDP這種非連接的不可靠協(xié)議來說,如果我們沒有接收到超時(shí)錯(cuò)誤的I

33、CMP返回報(bào),也有可能時(shí)由于線路或者其他問題在傳輸過程中丟失了。 </p><p>  1.2.6 UDP掃描</p><p>  UDP掃描:在UDP實(shí)現(xiàn)的掃描中,多是了利用和ICMP進(jìn)行的組合進(jìn)行,這在ICMP中以及提及了。還有一些特殊的就是UDP回饋,比如SQL SERVER,對(duì)其1434端口發(fā)送‘x02’或者‘x03’就能夠探測(cè)得到其連接端口。</p><p&

34、gt;  第二章 Winsock網(wǎng)絡(luò)程序設(shè)計(jì)</p><p>  2.1 Winsock網(wǎng)絡(luò)程序設(shè)計(jì)基本概念</p><p>  Microsoft聯(lián)合了其他幾家公司共同制定了一套WINDOWS下的網(wǎng)絡(luò)編程接口,即Windows Sockets規(guī)范;為了方便網(wǎng)絡(luò)編程,90年代初,由Microsoft聯(lián)合了其他幾家公司共同制定了一套WINDOWS下的網(wǎng)絡(luò)編程接口,即Windows Soc

35、kets規(guī)范,它不是一種網(wǎng)絡(luò)協(xié)議,而是一套開放的、支持多種協(xié)議的Windows下的網(wǎng)絡(luò)編程接口?,F(xiàn)在的Winsock已經(jīng)基本上實(shí)現(xiàn)了與協(xié)議無關(guān),你可以使用Winsock來調(diào)用多種協(xié)議的功能,但較常使用的是TCP/IP協(xié)議。Socket實(shí)際在計(jì)算機(jī)中提供了一個(gè)通信端口,可以通過這個(gè)端口與任何一個(gè)具有Socket接口的計(jì)算機(jī)通信。應(yīng)用程序在網(wǎng)絡(luò)上傳輸,接收的信息都通過這個(gè)Socket接口來實(shí)現(xiàn)。</p><p>  

36、微軟為VC定義了Winsock類如CAsyncSocket類和派生于CAsyncSocket 的CSocket類,它們簡(jiǎn)單易用,我們當(dāng)然可以使用這些類來實(shí)現(xiàn)自己的網(wǎng)絡(luò)程序,但是為了更好的了解Winsock API編程技術(shù),這里主要探討怎樣使用底層的API函數(shù)實(shí)現(xiàn)簡(jiǎn)單的 Winsock 網(wǎng)絡(luò)應(yīng)用程式設(shè)計(jì),分別說明如何在Server端和Client端操作Socket,實(shí)現(xiàn)基于TCP/IP的數(shù)據(jù)傳送,最后給出相關(guān)的源代碼。</p>

37、<p>  在VC中進(jìn)行WINSOCK的API編程開發(fā)的時(shí)候,需要在項(xiàng)目中使用下面三個(gè)文件,否則會(huì)出現(xiàn)編譯錯(cuò)誤。</p><p>  (1)WINSOCK.H: 這是WINSOCK API的頭文件,需要包含在項(xiàng)目中。</p><p>  (2)WSOCK32.LIB: WINSOCK API連接庫(kù)文件。在使用中,一定要把它作為項(xiàng)目的非缺省的連接庫(kù)包含到項(xiàng)目文件中去。</

38、p><p>  (3)WINSOCK.DLL: WINSOCK的動(dòng)態(tài)連接庫(kù),位于WINDOWS的安裝目錄下。</p><p>  2.2 Windows Sockets規(guī)范</p><p>  以U.C. Berkeley大學(xué)BSD UNIX中流行的Socket接口為范例定義了一套microsoft Windows下網(wǎng)絡(luò)編程接口。它不僅包含了人們所熟悉的Berkele

39、y Socket風(fēng)格的庫(kù)函數(shù);也包含了一組針對(duì)Windows的擴(kuò)展庫(kù)函數(shù),以使程序員能充分地利用Windows消息驅(qū)動(dòng)機(jī)制進(jìn)行編程。Windows Sockets規(guī)范本意在于提供給應(yīng)用程序開發(fā)者一套簡(jiǎn)單的API,并讓各家網(wǎng)絡(luò)軟件供應(yīng)商共同遵守。此外,在一個(gè)特定版本W(wǎng)indows的基礎(chǔ)上,Windows Sockets也定義了一個(gè)二進(jìn)制接口(ABI),以此來保證應(yīng)用Windows Sockets API的應(yīng)用程序能夠在任何網(wǎng)絡(luò)軟件供應(yīng)商的

40、符合Windows Sockets協(xié)議的實(shí)現(xiàn)上工作。因此這份規(guī)范定義了應(yīng)用程序開發(fā)者能夠使用,并且網(wǎng)絡(luò)軟件供應(yīng)商能夠?qū)崿F(xiàn)的一套庫(kù)函數(shù)調(diào)用和相關(guān)語(yǔ)義。遵守這套Windows Sockets規(guī)范的網(wǎng)絡(luò)軟件,我們稱之為Windows Sockets兼容的,而Windows Sockets兼容實(shí)現(xiàn)的提供者,我們稱之為Windows Sockets提供者。</p><p>  一個(gè)網(wǎng)絡(luò)軟件供應(yīng)商必須百分之百地實(shí)現(xiàn)Windo

41、ws Sockets規(guī)范才能做到現(xiàn)Windows Sockets兼容。任何能夠與Windows Sockets兼容實(shí)現(xiàn)協(xié)同工作的應(yīng)用程序就被認(rèn)為是具有Windows Sockets接口。我們稱這種應(yīng)用程序?yàn)閃indows Sockets應(yīng)用程序。Windows Sockets規(guī)范定義并記錄了如何使用API與internet協(xié)議族(IPS,通常我們指的是TCP/IP)連接,尤其要指出的是所有的Windows Sockets實(shí)現(xiàn)都支持流套接

42、口和數(shù)據(jù)報(bào)套接口.應(yīng)用程序調(diào)用Windows Sockets的API實(shí)現(xiàn)相互之間的通訊。Windows Sockets又利用下層的網(wǎng)絡(luò)通訊協(xié)議功能和操作系統(tǒng)調(diào)用實(shí)現(xiàn)實(shí)際的通訊工作[5]。</p><p>  2.2.1 服務(wù)器端操作 Socket(套接字)</p><p> ?。?)在初始化階段調(diào)用WSAStartup()</p><p>  此函數(shù)在應(yīng)用程序中初

43、始化Windows Sockets DLL ,只有此函數(shù)調(diào)用成功后,應(yīng)用程序才可以再調(diào)用其他Windows Sockets DLL中的API函數(shù)。在程式中調(diào)用該函數(shù)的形式如下:WSAStartup(MAKEWORD(2, 2),(LPWSADATA)&WSAData),其中MAKEWORD(2, 2)表示我們用的是WinSocket2.2版本,WSAata用來存儲(chǔ)系統(tǒng)傳回的關(guān)于WinSocket的資料。</p>&

44、lt;p> ?。?)建立Socket</p><p>  初始化WinSock的動(dòng)態(tài)連接庫(kù)后,需要在服務(wù)器端建立一個(gè)監(jiān)聽的Socket,為此可以調(diào)用Socket()函數(shù)用來建立這個(gè)監(jiān)聽的Socket,并定義此Socket所使用的通信協(xié)議。此函數(shù)調(diào)用成功返回Socket對(duì)象,失敗則返回INVALID_SOCKET(調(diào)用WSAGetLastError()可得知原因,所有WinSocket 的函數(shù)都可以使用這個(gè)函

45、數(shù)來獲取失敗的原因)。</p><p>  SOCKET PASCAL FAR socket( int af, int type, int protocol )</p><p>  參數(shù): af:目前只提供 PF_INET(AF_INET);</p><p>  type:Socket 的類型 (SOCK_STREAM、SOCK_DGRAM);</p>

46、<p>  protocol:通訊協(xié)定(如果使用者不指定則設(shè)為0);</p><p>  如果要建立的是遵從TCP/IP協(xié)議的socket,第二個(gè)參數(shù)type應(yīng)為SOCK_STREAM,如為UDP(數(shù)據(jù)報(bào))的socket,應(yīng)為SOCK_DGRAM。</p><p><b>  (3)綁定端口</b></p><p>  接下來要為服

47、務(wù)器端定義的這個(gè)監(jiān)聽的Socket指定一個(gè)地址及端口(Port),這樣客戶端才知道待會(huì)要連接哪一個(gè)地址的哪個(gè)端口,為此我們要調(diào)用bind()函數(shù),該函數(shù)調(diào)用成功返回0,否則返回SOCKET_ERROR。</p><p>  int PASCAL FAR bind( SOCKET s, const struct sockaddr FAR *name,int namelen );</p><p&g

48、t;  參 數(shù): s:Socket對(duì)象名;</p><p>  name:Socket的地址值,這個(gè)地址必須是執(zhí)行這個(gè)程式所在機(jī)器的IP地址;</p><p>  namelen:name的長(zhǎng)度;</p><p>  如果使用者不在意地址或端口的值,那么可以設(shè)定地址為INADDR_ANY,及Port為0,Windows Sockets 會(huì)自動(dòng)將其設(shè)定適當(dāng)之地址及Po

49、rt (1024 到 5000之間的值)。此后可以調(diào)用getsockname()函數(shù)來獲知其被設(shè)定的值。</p><p><b>  (4)監(jiān)聽</b></p><p>  當(dāng)服務(wù)器端的Socket對(duì)象綁定完成之后,服務(wù)器端必須建立一個(gè)監(jiān)聽的隊(duì)列來接收客戶端的連接請(qǐng)求。listen()函數(shù)使服務(wù)器端的Socket 進(jìn)入監(jiān)聽狀態(tài),并設(shè)定可以建立的最大連接數(shù)(目前最大值限

50、制為 5, 最小值為1)。該函數(shù)調(diào)用成功返回0,否則返回SOCKET_ERROR。</p><p>  int PASCAL FAR listen( SOCKET s, int backlog );</p><p>  參 數(shù): s:需要建立監(jiān)聽的Socket;</p><p>  backlog:最大連接個(gè)數(shù);</p><p>  服務(wù)器端

51、的Socket調(diào)用完listen()后,如果此時(shí)客戶端調(diào)用connect()函數(shù)提出連接申請(qǐng)的話,Server 端必須再調(diào)用accept() 函數(shù),這樣服務(wù)器端和客戶端才算正式完成通信程序的連接動(dòng)作。為了知道什么時(shí)候客戶端提出連接要求,從而服務(wù)器端的Socket在恰當(dāng)?shù)臅r(shí)候調(diào)用accept()函數(shù)完成連接的建立,我們就要使用WSAAsyncSelect()函數(shù),讓系統(tǒng)主動(dòng)來通知我們有客戶端提出連接請(qǐng)求了。該函數(shù)調(diào)用成功返回0,否則返回S

52、OCKET_ERROR。</p><p>  int PASCAL FAR WSAAsyncSelect( SOCKET s, HWND hWnd,unsigned int wMsg, long lEvent );</p><p>  參數(shù): s:Socket 對(duì)象;</p><p>  hWnd :接收消息的窗口句柄;</p><p>  

53、wMsg:傳給窗口的消息;</p><p>  lEvent:被注冊(cè)的網(wǎng)絡(luò)事件,也即是應(yīng)用程序向窗口發(fā)送消息的網(wǎng)路事件,該值為下列值FD_READ、FD_WRITE、FD_OOB、FD_ACCEPT、FD_CONNECT、FD_CLOSE的組合,各個(gè)值的具體含意為FD_READ:希望在套接字S收到數(shù)據(jù)時(shí)收到消息;FD_WRITE:希望在套接字S上可以發(fā)送數(shù)據(jù)時(shí)收到消息;FD_ACCEPT:希望在套接字S上收到連接

54、請(qǐng)求時(shí)收到消息;FD_CONNECT:希望在套接字S上連接成功時(shí)收到消息;FD_CLOSE:希望在套接字S上連接關(guān)閉時(shí)收到消息;FD_OOB:希望在套接字S上收到帶外數(shù)據(jù)時(shí)收到消息。</p><p>  具體應(yīng)用時(shí),wMsg應(yīng)是在應(yīng)用程序中定義的消息名稱,而消息結(jié)構(gòu)中的lParam則為以上各種網(wǎng)絡(luò)事件名稱。所以,可以在窗口處理自定義消息函數(shù)中使用以下結(jié)構(gòu)來響應(yīng)Socket的不同事件:</p><

55、;p>  switch(lParam) </p><p>  {case FD_READ:</p><p><b>  …  </b></p><p><b>  break;</b></p><p>  case FD_WRITE、</p><p><b>

56、  …</b></p><p><b>  break;</b></p><p><b>  …</b></p><p><b>  } </b></p><p> ?。?)服務(wù)器端接受客戶端的連接請(qǐng)求</p><p>  當(dāng)Client提出

57、連接請(qǐng)求時(shí),Server 端hwnd視窗會(huì)收到Winsock Stack送來我們自定義的一個(gè)消息,這時(shí),我們可以分析lParam,然后調(diào)用相關(guān)的函數(shù)來處理此事件。為了使服務(wù)器端接受客戶端的連接請(qǐng)求,就要使用accept() 函數(shù),該函數(shù)新建一Socket與客戶端的Socket相通,原先監(jiān)聽之Socket繼續(xù)進(jìn)入監(jiān)聽狀態(tài),等待他人的連接要求。該函數(shù)調(diào)用成功返回一個(gè)新產(chǎn)生的Socket對(duì)象,否則返回INVALID_SOCKET。</p

58、><p>  SOCKET PASCAL FAR accept( SCOKET s, struct sockaddr FAR *addr,int FAR *addrlen );</p><p>  參數(shù):s:Socket的識(shí)別碼;</p><p>  addr:存放來連接的客戶端的地址;</p><p>  addrlen:addr的長(zhǎng)度<

59、/p><p> ?。?)結(jié)束 socket 連接</p><p>  結(jié)束服務(wù)器和客戶端的通信連接是很簡(jiǎn)單的,這一過程可以由服務(wù)器或客戶機(jī)的任一端啟動(dòng),只要調(diào)用closesocket()就可以了,而要關(guān)閉Server端監(jiān)聽狀態(tài)的socket,同樣也是利用此函數(shù)。另外,與程序啟動(dòng)時(shí)調(diào)用WSAStartup()憨數(shù)相對(duì)應(yīng),程式結(jié)束前,需要調(diào)用 WSACleanup() 來通知Winsock Sta

60、ck釋放Socket所占用的資源。這兩個(gè)函數(shù)都是調(diào)用成功返回0,否則返回SOCKET_ERROR。</p><p>  int PASCAL FAR closesocket( SOCKET s );</p><p>  參 數(shù):s:Socket 的識(shí)別碼;</p><p>  int PASCAL FAR WSACleanup( void );</p>

61、<p><b>  參 數(shù): 無</b></p><p>  2.2.2 數(shù)據(jù)的傳送</p><p>  雖然基于TCP/IP連接協(xié)議(流套接字)的服務(wù)是設(shè)計(jì)客戶機(jī)/服務(wù)器應(yīng)用程序時(shí)的主流標(biāo)準(zhǔn),但有些服務(wù)也是可以通過無連接協(xié)議(數(shù)據(jù)報(bào)套接字)提供的。先介紹一下TCP socket 與UDP socket 在傳送數(shù)據(jù)時(shí)的特性:Stream (TCP) So

62、cket 提供雙向、可靠、有次序、不重復(fù)的資料傳送。Datagram (UDP) Socket 雖然提供雙向的通信,但沒有可靠、有次序、不重復(fù)的保證,所以UDP傳送數(shù)據(jù)可能會(huì)收到無次序、重復(fù)的資料,甚至資料在傳輸過程中出現(xiàn)遺漏。由于UDP Socket 在傳送資料時(shí),并不保證資料能完整地送達(dá)對(duì)方,所以絕大多數(shù)應(yīng)用程序都是采用TCP處理Socket,以保證資料的正確性。一般情況下TCP Socket 的數(shù)據(jù)發(fā)送和接收是調(diào)用send() 及

63、recv() 這兩個(gè)函數(shù)來達(dá)成,而 UDP Socket則是用sendto() 及recvfrom() 這兩個(gè)函數(shù),這兩個(gè)函數(shù)調(diào)用成功發(fā)揮發(fā)送或接收的資料的長(zhǎng)度,否則返回SOCKET_ERROR。</p><p>  int PASCAL FAR send( SOCKET s, const char FAR *buf,int len, int flags );</p><p>  參數(shù):s

64、:Socket 的識(shí)別碼</p><p>  buf:存放要傳送的資料的暫存區(qū)</p><p>  len buf:的長(zhǎng)度</p><p>  flags:此函數(shù)被調(diào)用的方式</p><p>  對(duì)于Datagram Socket而言,若是 datagram 的大小超過限制,則將不會(huì)送出任何資料,并會(huì)傳回錯(cuò)誤值。對(duì)Stream Socket

65、言,Blocking 模式下,若是傳送系統(tǒng)內(nèi)的儲(chǔ)存空間不夠存放這些要傳送的資料,send()將會(huì)被block住,直到資料送完為止;如果該Socket被設(shè)定為 Non-Blocking 模式,那么將視目前的output buffer空間有多少,就送出多少資料,并不會(huì)被 block 住。flags 的值可設(shè)為 0 或 MSG_DONTROUTE及 MSG_OOB 的組合。</p><p>  int PASCAL F

66、AR recv( SOCKET s, char FAR *buf, int len, int flags );參數(shù):s:Socket 的識(shí)別碼</p><p>  buf:存放接收到的資料的暫存區(qū)</p><p>  len buf:的長(zhǎng)度</p><p>  flags:此函數(shù)被調(diào)用的方式</p><p>  對(duì)Stream Socket

67、 言,我們可以接收到當(dāng)前input buffer內(nèi)有效的數(shù)據(jù),但其數(shù)量不超過len的大小。 </p><p>  2.3 網(wǎng)絡(luò)通信/連接中需要設(shè)置的參數(shù)</p><p>  在一次網(wǎng)絡(luò)通信/連接中有以下幾個(gè)參數(shù)需要被設(shè)置:本地IP地址 - 本地端口號(hào) - 對(duì)方端口號(hào) - 對(duì)方IP地址。左邊兩部分稱為一個(gè)半關(guān)聯(lián),當(dāng)與右邊兩部分建立連接后就稱為一個(gè)全關(guān)聯(lián)。在這個(gè)全關(guān)聯(lián)的套接口上可以雙向的交換

68、數(shù)據(jù)。如果是使用無連接的通信則只需要建立一個(gè)半關(guān)聯(lián),在發(fā)送和接收時(shí)指明另一半的參數(shù)就可以了,所以可以說無連接的通信是將數(shù)據(jù)發(fā)送到另一臺(tái)主機(jī)的指定端口。此外不論是有連接還是無連接的通信都不需要雙方的端口號(hào)相同。</p><p>  2.4 套接口類所提供的一些功能</p><p>  下面我們看看套接口類所提供的一些功能,通過這些功能我們可以方便的建立網(wǎng)絡(luò)連接和發(fā)送數(shù)據(jù)。 </p&g

69、t;<p>  BOOL CAsyncSocket::Create( UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE, LPCTSTR lpszSocketAddress = NULL );用于創(chuàng)建一個(gè)本地套接口

70、,其中nSocketPort為使用的端口號(hào),為零則表示由系統(tǒng)自動(dòng)選擇,通常在客戶端都使用這個(gè)選擇。nSocketType為使用的協(xié)議族,SOCK_STREAM表明使用有連接的服務(wù),SOCK_DGRAM表明使用無連接的數(shù)據(jù)報(bào)服務(wù)。lpszSocketAddress為本地的IP地址,可以使用點(diǎn)分法表示如10.1.1.3。 </p><p>  BOOL CAsyncSocket::Bind( UINT nSocket

71、Port, LPCTSTR lpszSocketAddress = NULL )作為等待連接方時(shí)產(chǎn)生一個(gè)網(wǎng)絡(luò)半關(guān)聯(lián),或者是使用UDP協(xié)議時(shí)產(chǎn)生一個(gè)網(wǎng)絡(luò)半關(guān)聯(lián)。 </p><p>  BOOL CAsyncSocket::Listen( int nConnectionBacklog = 5 )作為等待連接方時(shí)指明同時(shí)可以接受的連接數(shù),請(qǐng)注意不是總共可以接受的連接數(shù)。 </p><p>  B

72、OOL CAsyncSocket::Accept( CAsyncSocket& rConnectedSocket, SOCKADDR* lpSockAddr = NULL, int* lpSockAddrLen = NULL )作為等待連接方將等待連接建立,當(dāng)連接建立后一個(gè)新的套接口將被創(chuàng)建,該套接口將會(huì)被用于通信。 </p><p>  BOOL CAsyncSocket::Connect( LPCTS

73、TR lpszHostAddress, UINT nHostPort );作為連接方發(fā)起與等待連接方的連接,需要指明對(duì)方的IP地址和端口號(hào)。 </p><p>  void CAsyncSocket::Close( );關(guān)閉套接口。 </p><p>  int CAsyncSocket::Send( const void* lpBuf, int nBufLen, int nFlags =

74、 0 ) </p><p>  int CAsyncSocket::Receive( void* lpBuf, int nBufLen, int nFlags = 0 );在建立連接后發(fā)送和接收數(shù)據(jù),nFlags為標(biāo)記位,雙方需要指明相同的標(biāo)記。 </p><p>  int CAsyncSocket::SendTo( const void* lpBuf, int nBufLen, UIN

75、T nHostPort, LPCTSTR lpszHostAddress = NULL, int nFlags = 0 ) </p><p>  int CAsyncSocket::ReceiveFrom( void* lpBuf, int nBufLen, CString& rSocketAddress, UINT& rSocketPort, int nFlags = 0 );對(duì)于無連接通信發(fā)送

76、和接收數(shù)據(jù),需要指明對(duì)方的IP地址和端口號(hào),nFlags為標(biāo)記位,雙方需要指明相同的標(biāo)記。 </p><p>  我們可以看到大多數(shù)的函數(shù)都返回一個(gè)布爾值表明是否成功。如果發(fā)生錯(cuò)誤可以通過int CAsyncSocket::GetLastError()得到錯(cuò)誤值。 </p><p>  由于CSocket由CAsyncSocket派生所以擁有CAsyncSocket的所有功能,此外你可以通

77、過BOOL CSocket::Create( UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, LPCTSTR lpszSocketAddress = NULL )來創(chuàng)建套接口,這樣創(chuàng)建的套接口沒有辦法異步處理事件,所有的調(diào)用都必需完成后才會(huì)返回。</p><p>  2.5 客戶機(jī)服務(wù)器模型</p><p>  一個(gè)在建立分布式應(yīng)

78、用時(shí)最常用的范例便是客戶機(jī)/服務(wù)器模型。在這種方案中客戶應(yīng)用程序向服務(wù)器程序請(qǐng)求服務(wù)。這種方式隱含了在建立客戶機(jī)/服務(wù)器間通訊時(shí)的非對(duì)稱性??蛻魴C(jī)/服務(wù)器模型工作時(shí)要求有一套為客戶機(jī)和服務(wù)器所共識(shí)的慣例來保證服務(wù)能夠被提供(或被接受)。這一套慣例包含了一套協(xié)議。它必須在通訊的兩頭都被實(shí)現(xiàn)。根據(jù)不同的實(shí)際情況,協(xié)議可能是對(duì)稱的或是非對(duì)稱的。在對(duì)稱的協(xié)議中,每一方都有可能扮演主從角色;在非對(duì)稱協(xié)議中,一方被不可改變地認(rèn)為是主機(jī),而另一方則是

79、從機(jī)。一個(gè)對(duì)稱協(xié)議的例子是Internet中用于終端仿真的TELNET。而非對(duì)稱協(xié)議的例子是Internet中的FTP。無論具體的協(xié)議是對(duì)稱的或是非對(duì)稱的,當(dāng)服務(wù)被提供時(shí)必然存在"客戶進(jìn)程"和"服務(wù)進(jìn)程"。一個(gè)服務(wù)程序通常在一個(gè)眾所周知的地址監(jiān)聽對(duì)服務(wù)的請(qǐng)求,也就是說,服務(wù)進(jìn)程一直處于休眠狀態(tài),直到一個(gè)客戶對(duì)這個(gè)服務(wù)的地址提出了連接請(qǐng)求。在這個(gè)時(shí)刻,服務(wù)程序被"驚醒"并且為客戶

80、提供服務(wù)-對(duì)客戶的請(qǐng)求作出適當(dāng)?shù)姆磻?yīng)。這一請(qǐng)求/相應(yīng)的過程可以簡(jiǎn)單的用圖表示。雖然基于連接的服務(wù)是設(shè)計(jì)客戶機(jī)/服務(wù)器應(yīng)用程序時(shí)的標(biāo)準(zhǔn),但有些服務(wù)也是可以通過數(shù)據(jù)報(bào)</p><p>  第三章 TCP/IP協(xié)議介紹</p><p><b>  3.1 概念</b></p><p>  TCP/IP(傳輸控制協(xié)議/網(wǎng)際協(xié)議)是異構(gòu)網(wǎng)絡(luò)互連的通信

81、協(xié)議,通過它可以實(shí)現(xiàn)各種異構(gòu)網(wǎng)絡(luò)或異種機(jī)之間的互聯(lián)通信。</p><p>  TCP/IP已成為當(dāng)今計(jì)算機(jī)網(wǎng)絡(luò)最成熟、應(yīng)用最廣的互聯(lián)協(xié)議。Internet采用的就是TCP/IP協(xié)議,網(wǎng)絡(luò)上各種各樣的計(jì)算機(jī)上只要安裝了TCP/IP協(xié)議,它們之間就能相互通信。運(yùn)行TCP/IP協(xié)議的網(wǎng)絡(luò)是一種采用包(分組)交換網(wǎng)絡(luò)。TCP/IP協(xié)議是由100多個(gè)協(xié)議組成的協(xié)議集,TCP和IP是其中兩個(gè)最重要的協(xié)議。TCP和IP兩個(gè)協(xié)議

82、分別屬于傳輸層和網(wǎng)絡(luò)層,在Internet中起著不同的作用[6]。TCP/IP結(jié)構(gòu)對(duì)應(yīng)OSI結(jié)構(gòu)用表3.1來表示:</p><p>  表3.1 TCP/IP結(jié)構(gòu)對(duì)應(yīng)OSI結(jié)構(gòu)</p><p>  TCP/IP是一個(gè)四層的分層體系結(jié)構(gòu)。 </p><p>  最高層:應(yīng)用層為協(xié)議的最高層,在該層應(yīng)用程序與協(xié)議相配合,發(fā)送或接收數(shù)據(jù)。TCP/IP協(xié)議集在應(yīng)用層上有遠(yuǎn)

83、程登錄協(xié)議(Telnet)、文件傳輸協(xié)議(FTP)、電子郵箱協(xié)議(SMTP)、域名系統(tǒng)(DNS)等,它們構(gòu)成了TCP/IP的基本應(yīng)用程序。 </p><p>  高層:即傳輸層,其主要協(xié)議有UDP(user data protocol)和傳輸控制協(xié)議(TCP,Transmission Control Protocol)。TCP協(xié)議是在IP協(xié)議提供的服務(wù)基礎(chǔ)上,支持面向連接的、可靠地傳輸服務(wù),是負(fù)責(zé)聚集信息或把文件

84、拆分成更小的包。這些包通過網(wǎng)絡(luò)傳送到接收端的TCP層,接收端的TCP層把包還原為原始文件;UDP協(xié)議時(shí)直接利用IP協(xié)議進(jìn)行UDP數(shù)據(jù)報(bào)的傳輸,因此UDP協(xié)議提供的是無連接、不保證數(shù)據(jù)完整到達(dá)目的地的傳輸服務(wù)。由于UDP不使用很繁瑣的流控制或錯(cuò)誤恢復(fù)機(jī)制,只充當(dāng)數(shù)據(jù)報(bào)的發(fā)送者和接收者,因此,UDP比TCP簡(jiǎn)單得多。 </p><p>  低層:是網(wǎng)際協(xié)議(IP,Internet Protocol),它處理每個(gè)包的地

85、址部分,使這些包正確的到達(dá)目的地。網(wǎng)絡(luò)上的網(wǎng)關(guān)計(jì)算機(jī)根據(jù)信息的地址來進(jìn)行路由選擇。即使來自同一文件的分包路由也有可能不同,但最后會(huì)在目的地匯合。 TCP/IP使用客戶端/服務(wù)器模式進(jìn)行通信。TCP/IP通信是點(diǎn)對(duì)點(diǎn)的,意思是通信是網(wǎng)絡(luò)中的一臺(tái)主機(jī)與另一臺(tái)主機(jī)之間的。TCP/IP與上層應(yīng)用程序之間可以說是“沒有國(guó)籍的”,因?yàn)槊總€(gè)客戶請(qǐng)求都被看做是與上一個(gè)請(qǐng)求無關(guān)的。正是它們之間的“無國(guó)籍的”釋放了網(wǎng)絡(luò)路徑,才使每個(gè)人都可以連續(xù)不斷的使用網(wǎng)

86、絡(luò)。 許多用戶熟悉使用TCP/IP協(xié)議的高層應(yīng)用協(xié)議。包括萬維網(wǎng)(www,world wide web)的超文本傳輸協(xié)議(HTTP),文件傳輸協(xié)議(FTP),遠(yuǎn)程網(wǎng)絡(luò)訪問協(xié)議(Telnet)和簡(jiǎn)單郵件傳輸協(xié)議(SMTP)。這些協(xié)議通常和TCP/IP協(xié)議打包在一起。 使用模擬電話調(diào)制解調(diào)器連接網(wǎng)絡(luò)的個(gè)人電腦通常是使用串行線路接口協(xié)議(SLIP)和點(diǎn)對(duì)點(diǎn)協(xié)議(P2P)。這些協(xié)議壓縮IP包后通過撥號(hào)電話線發(fā)送到對(duì)方的調(diào)制解調(diào)器中。 與TCP/

87、IP協(xié)議相關(guān)的協(xié)議還包括用戶數(shù)據(jù)報(bào)協(xié)議(U</p><p><b>  3.2 產(chǎn)生背景</b></p><p>  眾所周知,如今電腦上因特網(wǎng)都要作TCP/IP協(xié)議設(shè)置,顯然該協(xié)議成了當(dāng)今地球村“人與人”之間的“牽手協(xié)議”。 </p><p>  1997年,為了褒獎(jiǎng)對(duì)因特網(wǎng)發(fā)展作出突出貢獻(xiàn)的科學(xué)家,并對(duì)TCP/IP協(xié)議作出充分肯定,美國(guó)授

88、予為因特網(wǎng)發(fā)明和定義TCP/IP協(xié)議的文頓·瑟夫和卡恩“國(guó)家技術(shù)金獎(jiǎng)”。這無疑使人們認(rèn)識(shí)到TCP/IP協(xié)議的重要性。 </p><p>  在阿帕網(wǎng)(ARPR)產(chǎn)生運(yùn)作之初,通過接口信號(hào)處理機(jī)實(shí)現(xiàn)互聯(lián)的電腦并不多,大部分電腦相互之間不兼容,在一臺(tái)電腦上完成的工作,很難拿到另一臺(tái)電腦上去用,想讓硬件和軟件都不一樣的電腦聯(lián)網(wǎng),也有很多困難。當(dāng)時(shí)美國(guó)的狀況是,陸軍用的電腦是DEC系列產(chǎn)品,海軍用的電腦是Hon

89、eywell中標(biāo)機(jī)器,空軍用的是IBM公司中標(biāo)的電腦,每一個(gè)軍種的電腦在各自的系里都運(yùn)行良好,但卻有一個(gè)大弊?。翰荒芄蚕碣Y源。 </p><p>  當(dāng)時(shí)科學(xué)家們提出這樣一個(gè)理念:“所有電腦生來都是平等的?!睘榱俗屵@些“生來平等”的電腦能夠?qū)崿F(xiàn)“資源共享”就得在這些系統(tǒng)的標(biāo)準(zhǔn)之上,建立一種大家共同都必須遵守的標(biāo)準(zhǔn),這樣才能讓不同的電腦按照一定的規(guī)則進(jìn)行“談判”,并且在談判之后能“握手”。 </p>

90、<p>  在確定今天因特網(wǎng)各個(gè)電腦之間“談判規(guī)則”過程中,最重要的人物當(dāng)數(shù)瑟夫(Vinton G.Cerf)。正是他的努力,才使今天各種不同的電腦能按照協(xié)議上網(wǎng)互聯(lián)。瑟夫也因此獲得了與克萊因羅克(“因特網(wǎng)之父”)一樣的美稱“互聯(lián)網(wǎng)之父”。 </p><p>  瑟夫從小喜歡標(biāo)新立異,堅(jiān)強(qiáng)而又熱情。中學(xué)讀書時(shí),就被允許使用加州大學(xué)洛杉磯分校的電腦,他認(rèn)為“為電腦編程序是個(gè)非常激動(dòng)人心的事,…只要把程序編

91、好,就可以讓電腦做任何事情?!?965年,瑟夫從斯坦福大學(xué)畢業(yè)到IBM的一家公司當(dāng)系統(tǒng)工程師,工作沒多久,瑟夫就覺得知識(shí)不夠用,于是到加州大學(xué)洛杉磯分校攻讀博士,那時(shí),正逢阿帕網(wǎng)的建立,“接口信號(hào)處理機(jī)”(IMP)的研試及網(wǎng)絡(luò)測(cè)評(píng)中心的建立,瑟夫也成了著名科學(xué)家克萊因羅克手下的一位學(xué)生。瑟夫與另外三位年輕人(溫菲爾德、克羅克、布雷登)參與了阿帕網(wǎng)的第一個(gè)節(jié)點(diǎn)的聯(lián)接。此后不久,BBN公司對(duì)工作中各種情況發(fā)展有很強(qiáng)判斷能力、被公認(rèn)阿帕網(wǎng)建成

92、作出巨大貢獻(xiàn)的鮑伯·卡恩(Bob Kahn)也來到了加州大學(xué)洛杉磯分校。 在那段日子里,往往是卡恩提出需要什么軟件,而瑟夫則通宵達(dá)旦地把符合要求的軟件給編出來,然后他們一起測(cè)試這些軟件,直至能正常運(yùn)行。 </p><p>  當(dāng)時(shí)的主要格局是這樣的,羅伯茨提出網(wǎng)絡(luò)思想設(shè)計(jì)網(wǎng)絡(luò)布局,卡恩設(shè)計(jì)阿帕網(wǎng)總體結(jié)構(gòu),克萊因羅克負(fù)責(zé)網(wǎng)絡(luò)測(cè)評(píng)系統(tǒng),還有眾多的科學(xué)家、研究生參與研究、試驗(yàn)。69年9月阿帕網(wǎng)誕生、運(yùn)行后,才

93、發(fā)現(xiàn)各個(gè)IMP連接的時(shí)候,需要考慮用各種電腦都認(rèn)可的信號(hào)來打開通信管道,數(shù)據(jù)通過后還要關(guān)閉通道。否則這些IMP不會(huì)知道什么時(shí)候應(yīng)該接收信號(hào),什么時(shí)候該結(jié)束,這就是我們現(xiàn)在所說的通信“協(xié)議”的概念。70年12月制定出來了最初的通信協(xié)議由卡恩開發(fā)、瑟夫參與的“網(wǎng)絡(luò)控制協(xié)議”(NCP),但要真正建立一個(gè)共同的標(biāo)準(zhǔn)很不容易,72年10月國(guó)際電腦通信大會(huì)結(jié)束后,科學(xué)家們都在為此而努力。 </p><p>  “包切換”理論

94、為網(wǎng)絡(luò)之間的聯(lián)接方式提供了理論基礎(chǔ)??ǘ髟谧约貉芯康幕A(chǔ)上,認(rèn)識(shí)到只有深入理解各種操作系統(tǒng)的細(xì)節(jié)才能建立一種對(duì)各種操作系統(tǒng)普適的協(xié)議,73年卡恩請(qǐng)瑟夫一起考慮這個(gè)協(xié)議的各個(gè)細(xì)節(jié),他們這次合作的結(jié)果產(chǎn)生了目前在開放系統(tǒng)下的所有網(wǎng)民和網(wǎng)管人員都在使用的“傳輸控制協(xié)議”(TCP,Transmission-Control Protocol)和“因特網(wǎng)協(xié)議”(IP,Internet Protocol)即TCP/IP協(xié)議。 </p>

95、<p>  通俗而言:TCP負(fù)責(zé)發(fā)現(xiàn)傳輸?shù)膯栴},一有問題就發(fā)出信號(hào),要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡亍6鳬P是給因特網(wǎng)的每一臺(tái)電腦規(guī)定一個(gè)地址。1974年12月,卡恩、瑟夫的第一份TCP協(xié)議詳細(xì)說明正式發(fā)表。當(dāng)時(shí)美國(guó)國(guó)防部與三個(gè)科學(xué)家小組簽定了完成TCP/IP的協(xié)議,結(jié)果由瑟夫領(lǐng)銜的小組捷足先登,首先制定出了通過詳細(xì)定義的TCP/IP協(xié)議標(biāo)準(zhǔn)。當(dāng)時(shí)作了一個(gè)試驗(yàn),將信息包通過點(diǎn)對(duì)點(diǎn)的衛(wèi)星網(wǎng)絡(luò),再通過陸地電纜,再通

96、過衛(wèi)星網(wǎng)絡(luò),再由地面?zhèn)鬏?,貫串歐洲和美國(guó),經(jīng)過各種電腦系統(tǒng),全程9.4萬公里竟然沒有丟失一個(gè)數(shù)據(jù)位,遠(yuǎn)距離的可靠數(shù)據(jù)傳輸證明了TCP/IP協(xié)議的成功[7]。 </p><p>  1983年1月1日,運(yùn)行較長(zhǎng)時(shí)期曾被人們習(xí)慣了的NCP被停止使用,TCP/IP協(xié)議作為因特網(wǎng)上所有主機(jī)間的共同協(xié)議,從此以后被作為一種必須遵守的規(guī)則被肯定和應(yīng)用。正是由于TCP/IP協(xié)議,才有今天“地球村”因特網(wǎng)的巨大發(fā)展。</p

97、><p><b>  3.3 開發(fā)過程</b></p><p>  在構(gòu)建了阿帕網(wǎng)先驅(qū)之后,DARPA開始了其他數(shù)據(jù)傳輸技術(shù)的研究。NCP誕生后兩年,1972年,羅伯特·卡恩(Robert E. Kahn)被DARPA的信息技術(shù)處理辦公室雇傭,在那里他研究衛(wèi)星數(shù)據(jù)包網(wǎng)絡(luò)和地面無線數(shù)據(jù)包網(wǎng)絡(luò),并且意識(shí)到能夠在它們之間溝通的價(jià)值。在1973年春天,已有的ARPAN

98、ET網(wǎng)絡(luò)控制程序(NCP)協(xié)議的開發(fā)者文頓·瑟夫(Vinton Cerf)加入到卡恩為ARPANET設(shè)計(jì)下一代協(xié)議而開發(fā)開放互連模型的工作中。 </p><p>  到了1973年夏天,卡恩和瑟夫很快就開發(fā)出了一個(gè)基本的改進(jìn)形式,其中網(wǎng)絡(luò)協(xié)議之間的不同通過使用一個(gè)公用互聯(lián)網(wǎng)絡(luò)協(xié)議而隱藏起來,并且可靠性由主機(jī)保證而不是像ARPANET那樣由網(wǎng)絡(luò)保證。(瑟夫稱贊Hubert Zimmerman和Louis

99、Pouzin(CYCLADES網(wǎng)絡(luò)的設(shè)計(jì)者)在這個(gè)設(shè)計(jì)上發(fā)揮了重要影響。) </p><p>  由于網(wǎng)絡(luò)的作用減少到最小的程度,就有可能將任何網(wǎng)絡(luò)連接到一起,而不用管它們不同的特點(diǎn),這樣就解決了卡恩最初的問題。(一個(gè)流行的說法提到瑟夫和卡恩工作的最終產(chǎn)品TCP/IP將在運(yùn)行“兩個(gè)罐子和一根弦”上,實(shí)際上它已經(jīng)用在信鴿上。一個(gè)稱為網(wǎng)關(guān)(后來改為路由器以免與網(wǎng)關(guān)混淆)的計(jì)算機(jī)為每個(gè)網(wǎng)絡(luò)提供一個(gè)接口并且在它們之間來回

100、傳輸數(shù)據(jù)包。 </p><p>  這個(gè)設(shè)計(jì)思想更細(xì)的形式由瑟夫在斯坦福的網(wǎng)絡(luò)研究組的1973年–1974年期間開發(fā)出來。(處于同一時(shí)期的誕生了PARC通用包協(xié)議組的施樂PARC早期網(wǎng)絡(luò)研究工作也有重要的技術(shù)影響;人們?cè)趦烧咧g搖擺不定。) </p><p>  DARPA于是與BBN、斯坦福和倫敦大學(xué)簽署了協(xié)議開發(fā)不同硬件平臺(tái)上協(xié)議的運(yùn)行版本。有四個(gè)版本被開發(fā)出來——TCP v1、TCP

101、 v2、在1978年春天分成TCP v3和IP v3的版本,后來就是穩(wěn)定的TCP/IP v4——目前因特網(wǎng)仍然使用的標(biāo)準(zhǔn)協(xié)議。 </p><p>  1975年,兩個(gè)網(wǎng)絡(luò)之間的TCP/IP通信在斯坦福和倫敦大學(xué)(UCL)之間進(jìn)行了測(cè)試。1977年11月,三個(gè)網(wǎng)絡(luò)之間的TCP/IP測(cè)試在美國(guó)、英國(guó)和挪威之間進(jìn)行。在1978年到1983年間,其他一些TCP/IP原型在多個(gè)研究中心之間開發(fā)出來。ARPANET完全轉(zhuǎn)換到

102、TCP/IP在1983年1月1日發(fā)生。 </p><p>  1984年,美國(guó)國(guó)防部將TCP/IP作為所有計(jì)算機(jī)網(wǎng)絡(luò)的標(biāo)準(zhǔn)。1985年,因特網(wǎng)架構(gòu)理事會(huì)舉行了一個(gè)三天有250家廠商代表參加的關(guān)于計(jì)算產(chǎn)業(yè)使用TCP/IP的工作會(huì)議,幫助協(xié)議的推廣并且引領(lǐng)它日漸增長(zhǎng)的商業(yè)應(yīng)用。 </p><p>  2005年9月9日卡恩和瑟夫由于他們對(duì)于美國(guó)文化做出的卓越貢獻(xiàn)被授予總統(tǒng)自由勛章。 </

103、p><p><b>  3.4 主要協(xié)議</b></p><p>  之所以說TCP/IP是一個(gè)協(xié)議族,是因?yàn)門CP/IP協(xié)議包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP、TFTP等許多協(xié)議,這些協(xié)議一起稱為TCP/IP協(xié)議。以下是協(xié)議族中一些常用協(xié)議英文名稱和用途: </p><p>  TCP(Trans

104、port Control Protocol)傳輸控制協(xié)議 </p><p>  IP(Internet Protocol)因特網(wǎng)協(xié)議 </p><p>  UDP(User Datagram Protocol)用戶數(shù)據(jù)報(bào)協(xié)議 </p><p>  ICMP(Internet Control Message Protocol)互聯(lián)網(wǎng)控制信息協(xié)議 </p>

105、<p>  SMTP(Simple Mail Transfer Protocol)簡(jiǎn)單郵件傳輸協(xié)議 </p><p>  SNMP(Simple Network manage Protocol)簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議 </p><p>  FTP(File Transfer Protocol)文件傳輸協(xié)議 </p><p>  ARP(Address Reso

106、lution Protocol)地址解析協(xié)議 </p><p>  TCP/IP協(xié)議簇分為四層,IP位于協(xié)議簇的第二層(對(duì)應(yīng)OSI的第三層),TCP位于協(xié)議簇的第三層(對(duì)應(yīng)OSI的第四層) [8]。</p><p>  TCP和IP是TCP/IP協(xié)議簇的中間兩層,是整個(gè)協(xié)議簇的核心,起到了承上啟下的作用。</p><p>  ICMP與IP位于同一層,它被用來傳送I

107、P的的控制信息。它主要是用來提供有關(guān)通向目的地址的路徑信息。ICMP的‘Redirect’信息通知主機(jī)通向其他系統(tǒng)的更準(zhǔn)確的路徑,而‘Unreachable’信息則指出路徑有問題。另外,如果路徑不可用了,ICMP可以使TCP連接‘體面地’終止。PING是最常用的基于ICMP的服務(wù)。</p><p>  3.4.1 網(wǎng)間協(xié)議IP</p><p>  Internet上使用的一個(gè)關(guān)鍵的底層協(xié)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論