版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 本科畢業(yè)設(shè)計(論文)</p><p><b> ?。?0 屆)</b></p><p><b> ICMP掃描器設(shè)計</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è)計4
4、</p><p> 2.1 Winsock網(wǎng)絡(luò)程序設(shè)計基本概念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 客戶機服務(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é)議層級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 校驗和算法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è)計28</p><p><b> 總結(jié)33</b></p><p><b> 參考文獻34</b></p><p><b> 附
10、錄35</b></p><p><b> 致謝42</b></p><p><b> ICMP掃描器設(shè)計</b></p><p><b> 摘要</b></p><p> 網(wǎng)絡(luò)的開放性以及黑客的攻擊是造成網(wǎng)絡(luò)不安全的主要原因??茖W(xué)家在設(shè)計Internet
11、之初就缺乏對安全性的總體構(gòu)想和設(shè)計,我們所用的TCP/IP 協(xié)議是建立在可信的環(huán)境之下,首先考慮的是網(wǎng)絡(luò)互連,它是缺乏對安全方面的考慮的。而且TCP/IP協(xié)議是完全公開的,遠程訪問使許多攻擊者無須到現(xiàn)場就能夠得手,連接的主機基于互相信任的原則等等這一些性質(zhì)使網(wǎng)絡(luò)更加不安全。先進的技術(shù)是實現(xiàn)網(wǎng)絡(luò)信息安全的有力武器。</p><p> 高級ICMP掃描技術(shù),Ping就是利用ICMP協(xié)議實現(xiàn)的,高級的ICMP掃描技術(shù)
12、主要是利用ICMP協(xié)議最基本的用途:報錯。根據(jù)網(wǎng)絡(luò)協(xié)議,如果按照協(xié)議出現(xiàn)了錯誤,那么接收端將產(chǎn)生一個ICMP的錯誤報文。這些錯誤報文并不是主動發(fā)送的,而是由于錯誤,根據(jù)協(xié)議自動產(chǎn)生。當(dāng)IP數(shù)據(jù)報出現(xiàn)checksum和版本的錯誤的時候,目標(biāo)主機將拋棄這個數(shù)據(jù)報,如果是checksum出現(xiàn)錯誤,那么路由器就直接丟棄這個數(shù)據(jù)報了。有些主機比如AIX、HP-UX等,是不會發(fā)送ICMP的Unreachable數(shù)據(jù)報的。</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給人們的生活、工作帶來了巨大的方便,但同時,也帶來了一些不容忽視的問題,網(wǎng)絡(luò)信息的安全保密問題就是其中之一。</p>
20、<p> 網(wǎng)絡(luò)的開放性以及黑客的攻擊是造成網(wǎng)絡(luò)不安全的主要原因。科學(xué)家在設(shè)計Internet之初就缺乏對安全性的總體構(gòu)想和設(shè)計,我們所用的TCP/IP 協(xié)議是建立在可信的環(huán)境之下,首先考慮的是網(wǎng)絡(luò)互連,它是缺乏對安全方面的考慮的。而且TCP/IP協(xié)議是完全公開的,遠程訪問使許多攻擊者無須到現(xiàn)場就能夠得手,連接的主機基于互相信任的原則等等這一些性質(zhì)使網(wǎng)絡(luò)更加不安全。Internet不斷增加的復(fù)雜性、協(xié)議與應(yīng)用的不斷增多等都使得
21、安全防護的難度加大[1]。</p><p> 先進的技術(shù)是實現(xiàn)網(wǎng)絡(luò)信息安全的有力武器,這些技術(shù)包括:密碼技術(shù)、身份驗證技術(shù)、訪問控制技術(shù)、安全內(nèi)核技術(shù)、網(wǎng)絡(luò)反病毒病技術(shù)、信息泄漏防治技術(shù)、防火墻技術(shù)、網(wǎng)絡(luò)安全漏洞掃描技術(shù)、入侵檢測技術(shù)等。而在系統(tǒng)發(fā)生安全事故窗體頂端之前對其進行預(yù)防性檢查,及時發(fā)現(xiàn)問題并予以解決不失為一種很好的辦法,于是網(wǎng)絡(luò)安全漏洞掃描技術(shù)應(yīng)運而生[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)主機的有用信息(比如,一個匿旬用戶是否可以登錄等等)。而其他所謂的掃描器僅僅是UNIX網(wǎng)絡(luò)應(yīng)用程序,這些程序一般用于觀察某一服務(wù)是否正
23、在一臺遠程機器上正常工作,它們不是真正的掃描器,但也可以用于收集目標(biāo)主機的信息(UNIX平臺上通用的rusers和host命令就是這類程序的很好的例子)[2]。</p><p> 1.2.2 TCP SYN 掃描</p><p> TCP SYN 掃描:掃描程序發(fā)送的SYN數(shù)據(jù)包,好像準(zhǔn)備打開一個新的連接并等待反映一樣。一個SYN|ACK的返回信息表示端口處于偵聽狀態(tài)。一個RST 返
24、回表示端口沒有處于偵聽狀態(tài)。如果收到一個SYN|ACK,掃描程序必須再發(fā)送一個RST 信號,來關(guān)閉這個連接過程。優(yōu)點:不會在目標(biāo)計算機上留下紀(jì)錄。缺點:掃描程序必須要有root權(quán)限才能建立自己的SYN數(shù)據(jù)包</p><p> 1.2.3 TCP FIN 掃描</p><p> TCP FIN 掃描:關(guān)閉的端口會用適當(dāng)?shù)腞ST來回復(fù)FIN數(shù)據(jù)包,而打開的端口會忽略對FIN數(shù)據(jù)包的回復(fù)。
25、優(yōu)點:FIN數(shù)據(jù)包可以不惹任何麻煩的通過。缺點:這種方法和系統(tǒng)的實現(xiàn)有一定的關(guān)系,有些系統(tǒng)不論是打開的或關(guān)閉的端口對FIN數(shù)據(jù)包都要給以回復(fù),這種情況下該方法就不實用了。</p><p> 1.2.4 TCP connect()掃描</p><p> TCP connect()掃描:操作系統(tǒng)操作系統(tǒng) 操提供connect()系統(tǒng)調(diào)用,用來與每一個感興趣的目標(biāo)計算機的端口進行連接。如
26、果端口處于偵聽狀態(tài),那么connect()就能成功。否則,這個端口是不能用的,即沒有提供服務(wù)。優(yōu)點:系統(tǒng)中的任何用戶都有權(quán)利使用這個調(diào)用;如果對每個目標(biāo)端口以線性的方式掃描,將會花費相當(dāng)長的時間,但如果同時打開多個套接字,就能加速掃描。缺點:很容易被發(fā)現(xiàn),目標(biāo)計算機的logs文件會顯示一連串連接和連接出錯的消息,并且能很快的將它關(guān)閉[3]。</p><p> 1.2.5 ICMP掃描</p>&
27、lt;p> ICMP掃描: Ping就是利用ICMP協(xié)議走的,高級的ICMP掃描技術(shù)主 要是利用ICMP協(xié)議最基本的用途:報錯。根據(jù)網(wǎng)絡(luò)協(xié)議,如果按照協(xié)議出現(xiàn)了錯誤,那么接收端將產(chǎn)生一個ICMP的錯誤報文。這些錯誤報文并不是主動發(fā)送的,而是由于錯誤,根據(jù)協(xié)議自動產(chǎn)生 。</p><p> 當(dāng)IP數(shù)據(jù)報出現(xiàn)checksum和版本的錯誤的時候,目標(biāo)主機將拋棄這個數(shù)據(jù)報,如果是checksum出現(xiàn)錯誤,那么
28、路由器就直接丟棄這個數(shù)據(jù)報了。有些主機比如AIX、HP-UX等,是不會發(fā)送ICMP的Unreachable數(shù)據(jù)報的。 </p><p> 我們利用下面這些特性: </p><p> 向目標(biāo)主機發(fā)送一個只有IP頭的IP數(shù)據(jù)包,目標(biāo)將返回Destination Unreachable的ICMP錯誤報文。 </p><p> 向目標(biāo)主機發(fā)送一個壞IP數(shù)據(jù)報,比如,不
29、正確的IP頭長度,目標(biāo)主機將返回Parameter Problem的ICMP錯誤報文。 </p><p> 當(dāng)數(shù)據(jù)包分片但是,卻沒有給接收端足夠的分片,接收端分片組裝超時會發(fā)送分片組裝超時的ICMP數(shù)據(jù)報。 </p><p> 向目標(biāo)主機發(fā)送一個IP數(shù)據(jù)報,但是協(xié)議項是錯誤的,比如協(xié)議項不可用,那么目標(biāo)將返回Destination Unreachable的ICMP報文,但是如果是在目標(biāo)
30、主機前有一個防火墻或者一個其他的過濾裝置,可能過濾掉提出的要求,從而接收不到任何回應(yīng)??梢允褂靡粋€非常大的協(xié)議數(shù)字來作為IP頭部的協(xié)議內(nèi)容,而且這個協(xié)議數(shù)字至少在今天還沒有被使用,應(yīng)該主機一定會返回Unreachable,如果沒有Unreachable的ICMP數(shù)據(jù)報返回錯誤提示,那么就說明被防火墻或者其他設(shè)備過濾了,我們也可以用這個辦法來探測是否有防火墻或者其他過濾設(shè)備存在[4]。 </p><p> 利用I
31、P的協(xié)議項來探測主機正在使用哪些協(xié)議,我們可以把IP頭的協(xié)議項改變,因為是8位的,有256種可能。通過目標(biāo)返回的ICMP錯誤報文,來作判斷哪些協(xié)議在使用。如果返回Destination Unreachable,那么主機是沒有使用這個協(xié)議的,相反,如果什么都沒有返回的話,主機可能使用這個協(xié)議,但是也可能是防火墻等過濾掉了。NMAP的IP Protocol scan也就是利用這個原理。 </p><p> 利用IP
32、分片造成組裝超時ICMP錯誤消息,同樣可以來達到我們的探測目的。當(dāng)主機接收到丟失分片的數(shù)據(jù)報,并且在一定時間內(nèi)沒有接收到丟失的數(shù)據(jù)報,就會丟棄整個包,并且發(fā)送ICMP分片組裝超時錯誤給原發(fā)送端。我們可以利用這個特性制造分片的數(shù)據(jù)包,然后等待ICMP組裝超時錯誤消息??梢詫DP分片,也可以對TCP甚至ICMP數(shù)據(jù)包進行分片,只要不讓目標(biāo)主機獲得完整的數(shù)據(jù)包就行了,當(dāng)然,對于UDP這種非連接的不可靠協(xié)議來說,如果我們沒有接收到超時錯誤的I
33、CMP返回報,也有可能時由于線路或者其他問題在傳輸過程中丟失了。 </p><p> 1.2.6 UDP掃描</p><p> UDP掃描:在UDP實現(xiàn)的掃描中,多是了利用和ICMP進行的組合進行,這在ICMP中以及提及了。還有一些特殊的就是UDP回饋,比如SQL SERVER,對其1434端口發(fā)送‘x02’或者‘x03’就能夠探測得到其連接端口。</p><p&
34、gt; 第二章 Winsock網(wǎng)絡(luò)程序設(shè)計</p><p> 2.1 Winsock網(wǎng)絡(luò)程序設(shè)計基本概念</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)基本上實現(xiàn)了與協(xié)議無關(guān),你可以使用Winsock來調(diào)用多種協(xié)議的功能,但較常使用的是TCP/IP協(xié)議。Socket實際在計算機中提供了一個通信端口,可以通過這個端口與任何一個具有Socket接口的計算機通信。應(yīng)用程序在網(wǎng)絡(luò)上傳輸,接收的信息都通過這個Socket接口來實現(xiàn)。</p><p>
36、微軟為VC定義了Winsock類如CAsyncSocket類和派生于CAsyncSocket 的CSocket類,它們簡單易用,我們當(dāng)然可以使用這些類來實現(xiàn)自己的網(wǎng)絡(luò)程序,但是為了更好的了解Winsock API編程技術(shù),這里主要探討怎樣使用底層的API函數(shù)實現(xiàn)簡單的 Winsock 網(wǎng)絡(luò)應(yīng)用程式設(shè)計,分別說明如何在Server端和Client端操作Socket,實現(xiàn)基于TCP/IP的數(shù)據(jù)傳送,最后給出相關(guān)的源代碼。</p>
37、<p> 在VC中進行WINSOCK的API編程開發(fā)的時候,需要在項目中使用下面三個文件,否則會出現(xiàn)編譯錯誤。</p><p> (1)WINSOCK.H: 這是WINSOCK API的頭文件,需要包含在項目中。</p><p> (2)WSOCK32.LIB: WINSOCK API連接庫文件。在使用中,一定要把它作為項目的非缺省的連接庫包含到項目文件中去。</
38、p><p> (3)WINSOCK.DLL: WINSOCK的動態(tài)連接庫,位于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)格的庫函數(shù);也包含了一組針對Windows的擴展庫函數(shù),以使程序員能充分地利用Windows消息驅(qū)動機制進行編程。Windows Sockets規(guī)范本意在于提供給應(yīng)用程序開發(fā)者一套簡單的API,并讓各家網(wǎng)絡(luò)軟件供應(yīng)商共同遵守。此外,在一個特定版本W(wǎng)indows的基礎(chǔ)上,Windows Sockets也定義了一個二進制接口(ABI),以此來保證應(yīng)用Windows Sockets API的應(yīng)用程序能夠在任何網(wǎng)絡(luò)軟件供應(yīng)商的
40、符合Windows Sockets協(xié)議的實現(xiàn)上工作。因此這份規(guī)范定義了應(yīng)用程序開發(fā)者能夠使用,并且網(wǎng)絡(luò)軟件供應(yīng)商能夠?qū)崿F(xiàn)的一套庫函數(shù)調(diào)用和相關(guān)語義。遵守這套Windows Sockets規(guī)范的網(wǎng)絡(luò)軟件,我們稱之為Windows Sockets兼容的,而Windows Sockets兼容實現(xiàn)的提供者,我們稱之為Windows Sockets提供者。</p><p> 一個網(wǎng)絡(luò)軟件供應(yīng)商必須百分之百地實現(xiàn)Windo
41、ws Sockets規(guī)范才能做到現(xiàn)Windows Sockets兼容。任何能夠與Windows Sockets兼容實現(xiàn)協(xié)同工作的應(yīng)用程序就被認為是具有Windows Sockets接口。我們稱這種應(yīng)用程序為Windows Sockets應(yīng)用程序。Windows Sockets規(guī)范定義并記錄了如何使用API與internet協(xié)議族(IPS,通常我們指的是TCP/IP)連接,尤其要指出的是所有的Windows Sockets實現(xiàn)都支持流套接
42、口和數(shù)據(jù)報套接口.應(yīng)用程序調(diào)用Windows Sockets的API實現(xiàn)相互之間的通訊。Windows Sockets又利用下層的網(wǎng)絡(luò)通訊協(xié)議功能和操作系統(tǒng)調(diào)用實現(xiàn)實際的通訊工作[5]。</p><p> 2.2.1 服務(wù)器端操作 Socket(套接字)</p><p> (1)在初始化階段調(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用來存儲系統(tǒng)傳回的關(guān)于WinSocket的資料。</p>&
44、lt;p> ?。?)建立Socket</p><p> 初始化WinSock的動態(tài)連接庫后,需要在服務(wù)器端建立一個監(jiān)聽的Socket,為此可以調(diào)用Socket()函數(shù)用來建立這個監(jiān)聽的Socket,并定義此Socket所使用的通信協(xié)議。此函數(shù)調(diào)用成功返回Socket對象,失敗則返回INVALID_SOCKET(調(diào)用WSAGetLastError()可得知原因,所有WinSocket 的函數(shù)都可以使用這個函
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,第二個參數(shù)type應(yīng)為SOCK_STREAM,如為UDP(數(shù)據(jù)報)的socket,應(yīng)為SOCK_DGRAM。</p><p><b> ?。?)綁定端口</b></p><p> 接下來要為服
47、務(wù)器端定義的這個監(jiān)聽的Socket指定一個地址及端口(Port),這樣客戶端才知道待會要連接哪一個地址的哪個端口,為此我們要調(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對象名;</p><p> name:Socket的地址值,這個地址必須是執(zhí)行這個程式所在機器的IP地址;</p><p> namelen:name的長度;</p><p> 如果使用者不在意地址或端口的值,那么可以設(shè)定地址為INADDR_ANY,及Port為0,Windows Sockets 會自動將其設(shè)定適當(dāng)之地址及Po
49、rt (1024 到 5000之間的值)。此后可以調(diào)用getsockname()函數(shù)來獲知其被設(shè)定的值。</p><p><b> ?。?)監(jiān)聽</b></p><p> 當(dāng)服務(wù)器端的Socket對象綁定完成之后,服務(wù)器端必須建立一個監(jiān)聽的隊列來接收客戶端的連接請求。listen()函數(shù)使服務(wù)器端的Socket 進入監(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:最大連接個數(shù);</p><p> 服務(wù)器端
51、的Socket調(diào)用完listen()后,如果此時客戶端調(diào)用connect()函數(shù)提出連接申請的話,Server 端必須再調(diào)用accept() 函數(shù),這樣服務(wù)器端和客戶端才算正式完成通信程序的連接動作。為了知道什么時候客戶端提出連接要求,從而服務(wù)器端的Socket在恰當(dāng)?shù)臅r候調(diào)用accept()函數(shù)完成連接的建立,我們就要使用WSAAsyncSelect()函數(shù),讓系統(tǒ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 對象;</p><p> hWnd :接收消息的窗口句柄;</p><p>
53、wMsg:傳給窗口的消息;</p><p> lEvent:被注冊的網(wǎng)絡(luò)事件,也即是應(yīng)用程序向窗口發(fā)送消息的網(wǎng)路事件,該值為下列值FD_READ、FD_WRITE、FD_OOB、FD_ACCEPT、FD_CONNECT、FD_CLOSE的組合,各個值的具體含意為FD_READ:希望在套接字S收到數(shù)據(jù)時收到消息;FD_WRITE:希望在套接字S上可以發(fā)送數(shù)據(jù)時收到消息;FD_ACCEPT:希望在套接字S上收到連接
54、請求時收到消息;FD_CONNECT:希望在套接字S上連接成功時收到消息;FD_CLOSE:希望在套接字S上連接關(guān)閉時收到消息;FD_OOB:希望在套接字S上收到帶外數(shù)據(jù)時收到消息。</p><p> 具體應(yīng)用時,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ù)器端接受客戶端的連接請求</p><p> 當(dāng)Client提出
57、連接請求時,Server 端hwnd視窗會收到Winsock Stack送來我們自定義的一個消息,這時,我們可以分析lParam,然后調(diào)用相關(guān)的函數(shù)來處理此事件。為了使服務(wù)器端接受客戶端的連接請求,就要使用accept() 函數(shù),該函數(shù)新建一Socket與客戶端的Socket相通,原先監(jiān)聽之Socket繼續(xù)進入監(jiān)聽狀態(tài),等待他人的連接要求。該函數(shù)調(diào)用成功返回一個新產(chǎn)生的Socket對象,否則返回INVALID_SOCKET。</p
58、><p> SOCKET PASCAL FAR accept( SCOKET s, struct sockaddr FAR *addr,int FAR *addrlen );</p><p> 參數(shù):s:Socket的識別碼;</p><p> addr:存放來連接的客戶端的地址;</p><p> addrlen:addr的長度<
59、/p><p> ?。?)結(jié)束 socket 連接</p><p> 結(jié)束服務(wù)器和客戶端的通信連接是很簡單的,這一過程可以由服務(wù)器或客戶機的任一端啟動,只要調(diào)用closesocket()就可以了,而要關(guān)閉Server端監(jiān)聽狀態(tài)的socket,同樣也是利用此函數(shù)。另外,與程序啟動時調(diào)用WSAStartup()憨數(shù)相對應(yīng),程式結(jié)束前,需要調(diào)用 WSACleanup() 來通知Winsock Sta
60、ck釋放Socket所占用的資源。這兩個函數(shù)都是調(diào)用成功返回0,否則返回SOCKET_ERROR。</p><p> int PASCAL FAR closesocket( SOCKET s );</p><p> 參 數(shù):s:Socket 的識別碼;</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è)計客戶機/服務(wù)器應(yīng)用程序時的主流標(biāo)準(zhǔn),但有些服務(wù)也是可以通過無連接協(xié)議(數(shù)據(jù)報套接字)提供的。先介紹一下TCP socket 與UDP socket 在傳送數(shù)據(jù)時的特性:Stream (TCP) So
62、cket 提供雙向、可靠、有次序、不重復(fù)的資料傳送。Datagram (UDP) Socket 雖然提供雙向的通信,但沒有可靠、有次序、不重復(fù)的保證,所以UDP傳送數(shù)據(jù)可能會收到無次序、重復(fù)的資料,甚至資料在傳輸過程中出現(xiàn)遺漏。由于UDP Socket 在傳送資料時,并不保證資料能完整地送達對方,所以絕大多數(shù)應(yīng)用程序都是采用TCP處理Socket,以保證資料的正確性。一般情況下TCP Socket 的數(shù)據(jù)發(fā)送和接收是調(diào)用send() 及
63、recv() 這兩個函數(shù)來達成,而 UDP Socket則是用sendto() 及recvfrom() 這兩個函數(shù),這兩個函數(shù)調(diào)用成功發(fā)揮發(fā)送或接收的資料的長度,否則返回SOCKET_ERROR。</p><p> int PASCAL FAR send( SOCKET s, const char FAR *buf,int len, int flags );</p><p> 參數(shù):s
64、:Socket 的識別碼</p><p> buf:存放要傳送的資料的暫存區(qū)</p><p> len buf:的長度</p><p> flags:此函數(shù)被調(diào)用的方式</p><p> 對于Datagram Socket而言,若是 datagram 的大小超過限制,則將不會送出任何資料,并會傳回錯誤值。對Stream Socket
65、言,Blocking 模式下,若是傳送系統(tǒng)內(nèi)的儲存空間不夠存放這些要傳送的資料,send()將會被block住,直到資料送完為止;如果該Socket被設(shè)定為 Non-Blocking 模式,那么將視目前的output buffer空間有多少,就送出多少資料,并不會被 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 的識別碼</p><p> buf:存放接收到的資料的暫存區(qū)</p><p> len buf:的長度</p><p> flags:此函數(shù)被調(diào)用的方式</p><p> 對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ò)通信/連接中有以下幾個參數(shù)需要被設(shè)置:本地IP地址 - 本地端口號 - 對方端口號 - 對方IP地址。左邊兩部分稱為一個半關(guān)聯(lián),當(dāng)與右邊兩部分建立連接后就稱為一個全關(guān)聯(lián)。在這個全關(guān)聯(lián)的套接口上可以雙向的交換
68、數(shù)據(jù)。如果是使用無連接的通信則只需要建立一個半關(guān)聯(lián),在發(fā)送和接收時指明另一半的參數(shù)就可以了,所以可以說無連接的通信是將數(shù)據(jù)發(fā)送到另一臺主機的指定端口。此外不論是有連接還是無連接的通信都不需要雙方的端口號相同。</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)建一個本地套接口
70、,其中nSocketPort為使用的端口號,為零則表示由系統(tǒng)自動選擇,通常在客戶端都使用這個選擇。nSocketType為使用的協(xié)議族,SOCK_STREAM表明使用有連接的服務(wù),SOCK_DGRAM表明使用無連接的數(shù)據(jù)報服務(wù)。lpszSocketAddress為本地的IP地址,可以使用點分法表示如10.1.1.3。 </p><p> BOOL CAsyncSocket::Bind( UINT nSocket
71、Port, LPCTSTR lpszSocketAddress = NULL )作為等待連接方時產(chǎn)生一個網(wǎng)絡(luò)半關(guān)聯(lián),或者是使用UDP協(xié)議時產(chǎn)生一個網(wǎng)絡(luò)半關(guān)聯(lián)。 </p><p> BOOL CAsyncSocket::Listen( int nConnectionBacklog = 5 )作為等待連接方時指明同時可以接受的連接數(shù),請注意不是總共可以接受的連接數(shù)。 </p><p> B
72、OOL CAsyncSocket::Accept( CAsyncSocket& rConnectedSocket, SOCKADDR* lpSockAddr = NULL, int* lpSockAddrLen = NULL )作為等待連接方將等待連接建立,當(dāng)連接建立后一個新的套接口將被創(chuàng)建,該套接口將會被用于通信。 </p><p> BOOL CAsyncSocket::Connect( LPCTS
73、TR lpszHostAddress, UINT nHostPort );作為連接方發(fā)起與等待連接方的連接,需要指明對方的IP地址和端口號。 </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 );對于無連接通信發(fā)送
76、和接收數(shù)據(jù),需要指明對方的IP地址和端口號,nFlags為標(biāo)記位,雙方需要指明相同的標(biāo)記。 </p><p> 我們可以看到大多數(shù)的函數(shù)都返回一個布爾值表明是否成功。如果發(fā)生錯誤可以通過int CAsyncSocket::GetLastError()得到錯誤值。 </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)用都必需完成后才會返回。</p><p> 2.5 客戶機服務(wù)器模型</p><p> 一個在建立分布式應(yīng)
78、用時最常用的范例便是客戶機/服務(wù)器模型。在這種方案中客戶應(yīng)用程序向服務(wù)器程序請求服務(wù)。這種方式隱含了在建立客戶機/服務(wù)器間通訊時的非對稱性??蛻魴C/服務(wù)器模型工作時要求有一套為客戶機和服務(wù)器所共識的慣例來保證服務(wù)能夠被提供(或被接受)。這一套慣例包含了一套協(xié)議。它必須在通訊的兩頭都被實現(xiàn)。根據(jù)不同的實際情況,協(xié)議可能是對稱的或是非對稱的。在對稱的協(xié)議中,每一方都有可能扮演主從角色;在非對稱協(xié)議中,一方被不可改變地認為是主機,而另一方則是
79、從機。一個對稱協(xié)議的例子是Internet中用于終端仿真的TELNET。而非對稱協(xié)議的例子是Internet中的FTP。無論具體的協(xié)議是對稱的或是非對稱的,當(dāng)服務(wù)被提供時必然存在"客戶進程"和"服務(wù)進程"。一個服務(wù)程序通常在一個眾所周知的地址監(jiān)聽對服務(wù)的請求,也就是說,服務(wù)進程一直處于休眠狀態(tài),直到一個客戶對這個服務(wù)的地址提出了連接請求。在這個時刻,服務(wù)程序被"驚醒"并且為客戶
80、提供服務(wù)-對客戶的請求作出適當(dāng)?shù)姆磻?yīng)。這一請求/相應(yīng)的過程可以簡單的用圖表示。雖然基于連接的服務(wù)是設(shè)計客戶機/服務(wù)器應(yīng)用程序時的標(biāo)準(zhǔn),但有些服務(wù)也是可以通過數(shù)據(jù)報</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é)議,通過它可以實現(xiàn)各種異構(gòu)網(wǎng)絡(luò)或異種機之間的互聯(lián)通信。</p><p> TCP/IP已成為當(dāng)今計算機網(wǎng)絡(luò)最成熟、應(yīng)用最廣的互聯(lián)協(xié)議。Internet采用的就是TCP/IP協(xié)議,網(wǎng)絡(luò)上各種各樣的計算機上只要安裝了TCP/IP協(xié)議,它們之間就能相互通信。運行TCP/IP協(xié)議的網(wǎng)絡(luò)是一種采用包(分組)交換網(wǎng)絡(luò)。TCP/IP協(xié)議是由100多個協(xié)議組成的協(xié)議集,TCP和IP是其中兩個最重要的協(xié)議。TCP和IP兩個協(xié)議
82、分別屬于傳輸層和網(wǎng)絡(luò)層,在Internet中起著不同的作用[6]。TCP/IP結(jié)構(gòu)對應(yīng)OSI結(jié)構(gòu)用表3.1來表示:</p><p> 表3.1 TCP/IP結(jié)構(gòu)對應(yīng)OSI結(jié)構(gòu)</p><p> TCP/IP是一個四層的分層體系結(jié)構(gòu)。 </p><p> 最高層:應(yīng)用層為協(xié)議的最高層,在該層應(yīng)用程序與協(xié)議相配合,發(fā)送或接收數(shù)據(jù)。TCP/IP協(xié)議集在應(yīng)用層上有遠
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ù),是負責(zé)聚集信息或把文件
84、拆分成更小的包。這些包通過網(wǎng)絡(luò)傳送到接收端的TCP層,接收端的TCP層把包還原為原始文件;UDP協(xié)議時直接利用IP協(xié)議進行UDP數(shù)據(jù)報的傳輸,因此UDP協(xié)議提供的是無連接、不保證數(shù)據(jù)完整到達目的地的傳輸服務(wù)。由于UDP不使用很繁瑣的流控制或錯誤恢復(fù)機制,只充當(dāng)數(shù)據(jù)報的發(fā)送者和接收者,因此,UDP比TCP簡單得多。 </p><p> 低層:是網(wǎng)際協(xié)議(IP,Internet Protocol),它處理每個包的地
85、址部分,使這些包正確的到達目的地。網(wǎng)絡(luò)上的網(wǎng)關(guān)計算機根據(jù)信息的地址來進行路由選擇。即使來自同一文件的分包路由也有可能不同,但最后會在目的地匯合。 TCP/IP使用客戶端/服務(wù)器模式進行通信。TCP/IP通信是點對點的,意思是通信是網(wǎng)絡(luò)中的一臺主機與另一臺主機之間的。TCP/IP與上層應(yīng)用程序之間可以說是“沒有國籍的”,因為每個客戶請求都被看做是與上一個請求無關(guān)的。正是它們之間的“無國籍的”釋放了網(wǎng)絡(luò)路徑,才使每個人都可以連續(xù)不斷的使用網(wǎng)
86、絡(luò)。 許多用戶熟悉使用TCP/IP協(xié)議的高層應(yīng)用協(xié)議。包括萬維網(wǎng)(www,world wide web)的超文本傳輸協(xié)議(HTTP),文件傳輸協(xié)議(FTP),遠程網(wǎng)絡(luò)訪問協(xié)議(Telnet)和簡單郵件傳輸協(xié)議(SMTP)。這些協(xié)議通常和TCP/IP協(xié)議打包在一起。 使用模擬電話調(diào)制解調(diào)器連接網(wǎng)絡(luò)的個人電腦通常是使用串行線路接口協(xié)議(SLIP)和點對點協(xié)議(P2P)。這些協(xié)議壓縮IP包后通過撥號電話線發(fā)送到對方的調(diào)制解調(diào)器中。 與TCP/
87、IP協(xié)議相關(guān)的協(xié)議還包括用戶數(shù)據(jù)報協(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年,為了褒獎對因特網(wǎng)發(fā)展作出突出貢獻的科學(xué)家,并對TCP/IP協(xié)議作出充分肯定,美國授
88、予為因特網(wǎng)發(fā)明和定義TCP/IP協(xié)議的文頓·瑟夫和卡恩“國家技術(shù)金獎”。這無疑使人們認識到TCP/IP協(xié)議的重要性。 </p><p> 在阿帕網(wǎng)(ARPR)產(chǎn)生運作之初,通過接口信號處理機實現(xiàn)互聯(lián)的電腦并不多,大部分電腦相互之間不兼容,在一臺電腦上完成的工作,很難拿到另一臺電腦上去用,想讓硬件和軟件都不一樣的電腦聯(lián)網(wǎng),也有很多困難。當(dāng)時美國的狀況是,陸軍用的電腦是DEC系列產(chǎn)品,海軍用的電腦是Hon
89、eywell中標(biāo)機器,空軍用的是IBM公司中標(biāo)的電腦,每一個軍種的電腦在各自的系里都運行良好,但卻有一個大弊病:不能共享資源。 </p><p> 當(dāng)時科學(xué)家們提出這樣一個理念:“所有電腦生來都是平等的?!睘榱俗屵@些“生來平等”的電腦能夠?qū)崿F(xiàn)“資源共享”就得在這些系統(tǒng)的標(biāo)準(zhǔn)之上,建立一種大家共同都必須遵守的標(biāo)準(zhǔn),這樣才能讓不同的電腦按照一定的規(guī)則進行“談判”,并且在談判之后能“握手”。 </p>
90、<p> 在確定今天因特網(wǎng)各個電腦之間“談判規(guī)則”過程中,最重要的人物當(dāng)數(shù)瑟夫(Vinton G.Cerf)。正是他的努力,才使今天各種不同的電腦能按照協(xié)議上網(wǎng)互聯(lián)。瑟夫也因此獲得了與克萊因羅克(“因特網(wǎng)之父”)一樣的美稱“互聯(lián)網(wǎng)之父”。 </p><p> 瑟夫從小喜歡標(biāo)新立異,堅強而又熱情。中學(xué)讀書時,就被允許使用加州大學(xué)洛杉磯分校的電腦,他認為“為電腦編程序是個非常激動人心的事,…只要把程序編
91、好,就可以讓電腦做任何事情。”1965年,瑟夫從斯坦福大學(xué)畢業(yè)到IBM的一家公司當(dāng)系統(tǒng)工程師,工作沒多久,瑟夫就覺得知識不夠用,于是到加州大學(xué)洛杉磯分校攻讀博士,那時,正逢阿帕網(wǎng)的建立,“接口信號處理機”(IMP)的研試及網(wǎng)絡(luò)測評中心的建立,瑟夫也成了著名科學(xué)家克萊因羅克手下的一位學(xué)生。瑟夫與另外三位年輕人(溫菲爾德、克羅克、布雷登)參與了阿帕網(wǎng)的第一個節(jié)點的聯(lián)接。此后不久,BBN公司對工作中各種情況發(fā)展有很強判斷能力、被公認阿帕網(wǎng)建成
92、作出巨大貢獻的鮑伯·卡恩(Bob Kahn)也來到了加州大學(xué)洛杉磯分校。 在那段日子里,往往是卡恩提出需要什么軟件,而瑟夫則通宵達旦地把符合要求的軟件給編出來,然后他們一起測試這些軟件,直至能正常運行。 </p><p> 當(dāng)時的主要格局是這樣的,羅伯茨提出網(wǎng)絡(luò)思想設(shè)計網(wǎng)絡(luò)布局,卡恩設(shè)計阿帕網(wǎng)總體結(jié)構(gòu),克萊因羅克負責(zé)網(wǎng)絡(luò)測評系統(tǒng),還有眾多的科學(xué)家、研究生參與研究、試驗。69年9月阿帕網(wǎng)誕生、運行后,才
93、發(fā)現(xiàn)各個IMP連接的時候,需要考慮用各種電腦都認可的信號來打開通信管道,數(shù)據(jù)通過后還要關(guān)閉通道。否則這些IMP不會知道什么時候應(yīng)該接收信號,什么時候該結(jié)束,這就是我們現(xiàn)在所說的通信“協(xié)議”的概念。70年12月制定出來了最初的通信協(xié)議由卡恩開發(fā)、瑟夫參與的“網(wǎng)絡(luò)控制協(xié)議”(NCP),但要真正建立一個共同的標(biāo)準(zhǔn)很不容易,72年10月國際電腦通信大會結(jié)束后,科學(xué)家們都在為此而努力。 </p><p> “包切換”理論
94、為網(wǎng)絡(luò)之間的聯(lián)接方式提供了理論基礎(chǔ)??ǘ髟谧约貉芯康幕A(chǔ)上,認識到只有深入理解各種操作系統(tǒng)的細節(jié)才能建立一種對各種操作系統(tǒng)普適的協(xié)議,73年卡恩請瑟夫一起考慮這個協(xié)議的各個細節(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負責(zé)發(fā)現(xiàn)傳輸?shù)膯栴},一有問題就發(fā)出信號,要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡?。而IP是給因特網(wǎng)的每一臺電腦規(guī)定一個地址。1974年12月,卡恩、瑟夫的第一份TCP協(xié)議詳細說明正式發(fā)表。當(dāng)時美國國防部與三個科學(xué)家小組簽定了完成TCP/IP的協(xié)議,結(jié)果由瑟夫領(lǐng)銜的小組捷足先登,首先制定出了通過詳細定義的TCP/IP協(xié)議標(biāo)準(zhǔn)。當(dāng)時作了一個試驗,將信息包通過點對點的衛(wèi)星網(wǎng)絡(luò),再通過陸地電纜,再通
96、過衛(wèi)星網(wǎng)絡(luò),再由地面?zhèn)鬏?,貫串歐洲和美國,經(jīng)過各種電腦系統(tǒng),全程9.4萬公里竟然沒有丟失一個數(shù)據(jù)位,遠距離的可靠數(shù)據(jù)傳輸證明了TCP/IP協(xié)議的成功[7]。 </p><p> 1983年1月1日,運行較長時期曾被人們習(xí)慣了的NCP被停止使用,TCP/IP協(xié)議作為因特網(wǎng)上所有主機間的共同協(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ò),并且意識到能夠在它們之間溝通的價值。在1973年春天,已有的ARPAN
98、ET網(wǎng)絡(luò)控制程序(NCP)協(xié)議的開發(fā)者文頓·瑟夫(Vinton Cerf)加入到卡恩為ARPANET設(shè)計下一代協(xié)議而開發(fā)開放互連模型的工作中。 </p><p> 到了1973年夏天,卡恩和瑟夫很快就開發(fā)出了一個基本的改進形式,其中網(wǎng)絡(luò)協(xié)議之間的不同通過使用一個公用互聯(lián)網(wǎng)絡(luò)協(xié)議而隱藏起來,并且可靠性由主機保證而不是像ARPANET那樣由網(wǎng)絡(luò)保證。(瑟夫稱贊Hubert Zimmerman和Louis
99、Pouzin(CYCLADES網(wǎng)絡(luò)的設(shè)計者)在這個設(shè)計上發(fā)揮了重要影響。) </p><p> 由于網(wǎng)絡(luò)的作用減少到最小的程度,就有可能將任何網(wǎng)絡(luò)連接到一起,而不用管它們不同的特點,這樣就解決了卡恩最初的問題。(一個流行的說法提到瑟夫和卡恩工作的最終產(chǎn)品TCP/IP將在運行“兩個罐子和一根弦”上,實際上它已經(jīng)用在信鴿上。一個稱為網(wǎng)關(guān)(后來改為路由器以免與網(wǎng)關(guān)混淆)的計算機為每個網(wǎng)絡(luò)提供一個接口并且在它們之間來回
100、傳輸數(shù)據(jù)包。 </p><p> 這個設(shè)計思想更細的形式由瑟夫在斯坦福的網(wǎng)絡(luò)研究組的1973年–1974年期間開發(fā)出來。(處于同一時期的誕生了PARC通用包協(xié)議組的施樂PARC早期網(wǎng)絡(luò)研究工作也有重要的技術(shù)影響;人們在兩者之間搖擺不定。) </p><p> DARPA于是與BBN、斯坦福和倫敦大學(xué)簽署了協(xié)議開發(fā)不同硬件平臺上協(xié)議的運行版本。有四個版本被開發(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年,兩個網(wǎng)絡(luò)之間的TCP/IP通信在斯坦福和倫敦大學(xué)(UCL)之間進行了測試。1977年11月,三個網(wǎng)絡(luò)之間的TCP/IP測試在美國、英國和挪威之間進行。在1978年到1983年間,其他一些TCP/IP原型在多個研究中心之間開發(fā)出來。ARPANET完全轉(zhuǎn)換到
102、TCP/IP在1983年1月1日發(fā)生。 </p><p> 1984年,美國國防部將TCP/IP作為所有計算機網(wǎng)絡(luò)的標(biāo)準(zhǔn)。1985年,因特網(wǎng)架構(gòu)理事會舉行了一個三天有250家廠商代表參加的關(guān)于計算產(chǎn)業(yè)使用TCP/IP的工作會議,幫助協(xié)議的推廣并且引領(lǐng)它日漸增長的商業(yè)應(yīng)用。 </p><p> 2005年9月9日卡恩和瑟夫由于他們對于美國文化做出的卓越貢獻被授予總統(tǒng)自由勛章。 </
103、p><p><b> 3.4 主要協(xié)議</b></p><p> 之所以說TCP/IP是一個協(xié)議族,是因為TCP/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ù)報協(xié)議 </p><p> ICMP(Internet Control Message Protocol)互聯(lián)網(wǎng)控制信息協(xié)議 </p>
105、<p> SMTP(Simple Mail Transfer Protocol)簡單郵件傳輸協(xié)議 </p><p> SNMP(Simple Network manage Protocol)簡單網(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é)議簇的第二層(對應(yīng)OSI的第三層),TCP位于協(xié)議簇的第三層(對應(yīng)OSI的第四層) [8]。</p><p> TCP和IP是TCP/IP協(xié)議簇的中間兩層,是整個協(xié)議簇的核心,起到了承上啟下的作用。</p><p> ICMP與IP位于同一層,它被用來傳送I
107、P的的控制信息。它主要是用來提供有關(guān)通向目的地址的路徑信息。ICMP的‘Redirect’信息通知主機通向其他系統(tǒng)的更準(zhǔn)確的路徑,而‘Unreachable’信息則指出路徑有問題。另外,如果路徑不可用了,ICMP可以使TCP連接‘體面地’終止。PING是最常用的基于ICMP的服務(wù)。</p><p> 3.4.1 網(wǎng)間協(xié)議IP</p><p> Internet上使用的一個關(guān)鍵的底層協(xié)
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文-udp網(wǎng)段掃描器設(shè)計【精校排版】
- icmp掃描器設(shè)計【通信工程畢業(yè)論文】
- icmp掃描器設(shè)計
- ICMP掃描器設(shè)計初稿.doc
- ICMP掃描器設(shè)計定稿.doc
- ICMP掃描器設(shè)計2稿.doc
- 畢業(yè)論文-智能音樂演奏器設(shè)計【精校排版】
- 畢業(yè)論文設(shè)計-信號發(fā)生器系統(tǒng)設(shè)計【精校排版】
- 畢業(yè)論文-低頻正弦信號發(fā)生器設(shè)計【精校排版】
- 畢業(yè)論文-實時操作系統(tǒng)設(shè)計【精校排版】
- udp網(wǎng)段掃描器設(shè)計【通信工程畢業(yè)論文】
- 畢業(yè)論文-溫度測控儀的設(shè)計【精校排版】
- 畢業(yè)論文-汽車自動大燈模塊設(shè)計【精校排版】
- 畢業(yè)論文-基于fpga的uart控制器設(shè)計【精校排版】
- 畢業(yè)論文-led點陣顯示及設(shè)計【精校排版】
- 畢業(yè)論文-數(shù)字溫度計設(shè)計【精校排版】
- 畢業(yè)論文-水箱缺水提示電路【精校排版】
- 畢業(yè)論文-基于激光傳感器的智能車設(shè)計【精校排版】
- 畢業(yè)論文-調(diào)頻無線發(fā)射機設(shè)計【精校排版】
- 畢業(yè)論文-直流穩(wěn)壓電源設(shè)計【精校排版】
評論
0/150
提交評論