TCPIP完整的一套基礎介紹 |
|
conundrum
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
TCPIP完整的一套基礎介紹 2004-04-23 15:18 pm 作者:作者 來自:Linux知識寶庫 現載:http://www.douzhe.com/linuxtips/1004.html 地址:無名 TCP/IP應該是個協定集,根據OS的七層理論,TCP/IP分為四層.分別是應用,傳輸,Interne和網路介面. 我們一般說TCP在傳輸層,而IP在Internet層. TCP/IP的應用程式包括我們平時經常用到的Ping,Telnet,Ftp,Finger等等 配置TCP/IP包括IP位址,子網路遮罩和缺省閘道 正確檢測TCP/IP的四個步驟:PIng 127.0.0.1(回環地址)如果通表示TCP/IP已經裝入,Ping自己表明客戶機正常(主要是網卡),Ping閘道表示局域網正常,Ping路由外位址表示完全正常,當然你也可以直接進行第四步,一般來說沒這麼麻煩的,但理論是基礎:-) IP位址是四段八位的二進位數字組成的,IP分為A,B,C,D,E五類地址 A類高端為0,從1.x.y.z~126.x.y.z .B類高端為10,從128.x.y.z~191.x.y.z C類高端為110,從192.x.y.z~223.x.y.z D類高端為1110是保留的IP位址 E類高端為1111,是科研用的IP位址 其中255是廣播位址,127是內部回送函數 以上算是開頭,以後一點點增加,實在是現在還有很多事情等著去做,不好意思了 :-) 以下內容是子網的設定 若公司不上Internet,那一定不會煩惱IPAddress的問題,因 為可以任意使用所有的IPAddress,不管是AClass或是BClass, 這個時候不會想到要用SubNet,但若是上Internet那IPAddress 便彌足珍貴了,目前全球一陣Internet熱,IPAddress已經愈 來愈少了,而所申請的IPAddress目前也趨保守,而且只有 經申請的IPAddress能在Internet使用,但對某些公司只能申 請到一個CCLass的IPAddress,但又有多個點需要使用,那這 時便需要使用到Subnet,這篇短文說明Subnet的原理及如 何規劃。 SubnetMask的介紹 設定任何網路上的任何設備不管是主機、PC、Router等 皆需要設定IPAddress,而跟隨著IPAddress的是所謂的NetMask, 這個NetMask主要的目的是由IPAddress中也能獲得NetworkNumber ,也就是說IPAddress和NetMask作AND而得到NetworkNumber,如下所 示 IPAddress 192.10.10.611000000.00001010.00001010.00000110 NetMask 255.255.255.011111111.11111111.11111111.00000000 AND ------------------------------------------------------------------- etworkNumber 192.10.10.011000000.00001010.00001010.00000000 NetMask有所謂的預設值,如下所示 ClassIPAddress範圍NetMask A 1.0.0.0-126.255.255.255255.0.0.0 B 128.0.0.0-191.255.255.255255.255.0.0 C 192.0.0.0-223.255.255.255255.255.255.0 在預設的NetMask都只有255的值,在談到SubnetMask時這個值 便不一定是255了。 在完整一組CClass中如203.67.10.0-203.67.10.255NetMask255.255.255.0, 203.67.10.0稱之NetworkNumber(將IPAddress和Netmask作AND),而 203.67.10.255是Broadcast的IPAddress,所以這?兩者皆不能使用,實 際只能使用203.67.10.1--203.67.10.254等254個IPAddress,這是以 255.255.255.0作NetMask的結果,而所謂SubnetMsk尚可將整組C Class分成陣列NetworkNumber,這要在NEtMask作手腳,若是要將 整組CCLass分成2個NetworkNumber那NetMask設定為255.255.255.192, 若是要將整組CCLass分成8組NetworkNumber則NetMask要為 255.255.255.224,這是怎?來的,由以上知道NetworkNumber是由IP Address和NetMask作AND而來的,而且將NetMask以二進位表示 法知道是1的會保留,而為0的去掉 192.10.10.193--11000000.00001010.00001010.10000001 255.255.255.0--11111111.11111111.11111111.00000000 -------------------------------------------------------------- 192.10.10.0--11000000.00001010.00001010.00000000 以上是以255.255.255.0為NetMask的結果,NetworkNumber是192.10.10.0, 若是使用255.255.255.224作NetMask結果便有所不同 192.10.10.193--11000000.00001010.00001010.10000000 255.255.255.224--11111111.11111111.11111111.11100000 -------------------------------------------------------------- 192.10.10.192--11000000.00001010.00001010.10000000 此時NetworkNumber變成了192.10.10.192,這便是Subnet。 那要如何決定所使用的NetMask,255.255.255.224以二進位表示 法為11111111.11111111.11111111.11100000,變化是在最後一組,11100000 便是224,以三個Bit可表示2的3次方便是8個NetworkNumber NetMask二進位表示法可分幾個Network 255.255.255.0 11111111.11111111.11111111.000000001 255.255.255.128 11111111.11111111.11111111.100000002 255.255.255.192 11111111.11111111.11111111.110000004 255.255.255.224 11111111.11111111.11111111.111000008 255.255.255.240 11111111.11111111.11111111.1111000016 255.255.255.248 11111111.11111111.11111111.1111100032 255.255.255.252 11111111.11111111.11111111.1111110064 以下使用255.255.255.224將C Class203.67.10.0分成8組NetworkNumber,各 個NetworkNumber及其BroadcastIPAddress及可使用之IPAddress 序號NetworkNumberBroadcast可使用之IPAddress 1 203.67.10.0 203.67.10.31 203.67.10.1-203.67.10.30 2 203.67.10.32 203.67.10.63 203.67.10.33-203.67.10.62 3 203.67.10.64 203.67.10.95 203.67.10.65-203.67.10.94 4 203.67.10.96 203.67.10.127 203.67.10.97-203.67.10.126 5 203.67.10.128 203.67.10.159 203.67.10.129-203.67.10.158 6 203.67.10.160 203.67.10.191 203.67.10.161-203.67.10.190 7 203.67.10.192 203.67.10.223 203.67.10.193-203.67.10.222 8 203.67.10.224 203.67.10.255 203.67.10.225-203.67.10.254 可驗證所使用的IPAddress是否如上表所示 203.67.10.115--11001011.01000011.00001010.01110011 255.255.255.224--11111111.11111111.11111111.11100000 -------------------------------------------------------------- 203.67.10.96--11001011.01000011.00001010.01100000 203.67.10.55--11001011.01000011.00001010.00110111 255.255.255.224--11111111.11111111.11111111.11100000 -------------------------------------------------------------- 203.67.10.32--11001011.01000011.00001010.00100000 其他的NetMask所分成的NetworkNumber可自行以上述方法自行推演出來。 Subnet的應用 使用Subnet是要解決只有一組CClass但需要數個NetworkNumber的問題,並不是解決IPAddress不夠用的問題,因為使用 Subnet反而能使用的IPAddress會變少,Subnet通常是使用在總公司在臺北,但分公司在台中,兩者之間使用Router連線 ,同時也上Internet,但只申請到一組CCLassIPAddress,過Router又需不同的Network,所以此時就必須使用到Subnet,當然二 辦公司間可以RemoteBridge連接,那便沒有使用Subnet的問題,這點在此不討論,所以在以上情況下的網路連線架 構及IPAddress的使用 TCP/IP(傳輸控制協定/網間協定)是一種網路通信協定,它規範了網路上的所有通信設備,尤其是一個主機與另一個主機之間的資料往來格式以及傳送方式。TCP/IP是INTERNET的基礎協定,也是一種電腦資料打包和定址的標準方法。在資料傳送中,可以形象地理解為有兩個信封,TCP和IP就像是信封,要傳遞的資訊被劃分成若干段,每一段塞入一個TCP信封,並在該信封面上記錄有分段號的資訊,再將TCP信封塞入IP大信封,發送上網。在接受端,一個TCP套裝軟體收集信封,抽出資料,按發送前的順序還原,並加以校驗,若發現差錯,TCP將會要求重發。因此,TCP/IP在INTERNET中幾乎可以無差錯地傳送資料。 在任何一個物理網路中,各站點都有一個機器可識別的位址,該位址叫做物理位址.物理位址有兩個 特點: 物理位址的長度,格式等是物理網路技術的一部分,物理網路不同,物理位址也不同. 同一類型不同網路上的站點可能擁有相同的物理位址. 以上兩點決定了,不能用物理網路進行網間網通訊. 在網路術語中,協定中,協定是為了在兩台電腦之間交換資料而預先規定的標準。TCP/IP並不是一個而是許多協議,這就是為什麼你經常聽到它代表一個協議集的原因,而TCP和IP只是其中兩個基本協議而已。 你裝在電腦-的TCP/IP軟體提供了一個包括TCP、IP以及TCP/IP協定集中其他協定的工具平臺。特別是它包括一些高層次的應用程式和FTP(檔傳輸協議),它允許用戶在命令行上進行網路檔傳輸。 TCP/IP是美國政府資助的高級研究計畫署(ARPA)在二十世紀七十年代的一個研究成果,用來使全球的研究網路聯在一起形成一個虛擬網路,也就是國際互聯網。原始的 Internet通過將已有的網路如ARPAnet轉換到TCP/IP上來而形成,而這個Internet最終成為如今的國際互聯網的骨幹網。 如今TCP/IP如此重要的原因,在於它允許獨立的網格加入到Internet或組織在一起形成私有的內部網(Intranet)。構成內部網的每個網路通過一種-做路由器或IP路由器的設備在物理上聯接在一起。路由器是一台用來從一個網路到另一個網路傳輸資料包的電腦。在一個使用TCP/IP的內部網中,資訊通過使用一種獨立的叫做IP包(IPpacket)或IP資料報(IPdatagrams)的資料單元進--傳輸。TCP/IP軟體使得每台聯到網路上的電腦同其他電腦“看”起來一模一樣,事實上它隱藏了路由器和基本的網路體系結構並使其各方面看起來都像一個大網。如同聯入乙太網時需要確認一個48位元的乙太網位址一樣,聯入一個內部網也需要確認一個32位元的IP位址。我們將它用帶點的十進位數字表示,如128.10.2.3。給定一個遠端電腦的IP位址,在某個內部網或Internet上的本地電腦就可以像處在同一個物理網路中的兩台電腦那樣向遠端電腦發送資料。 TCP/IP提供了一個方案用來解決屬於同一個內部網而分屬不同物理網的兩台電腦之間怎樣交換資料的問題。這個方案包括許多部分,而TCP/IP協定集的每個成員則用來解決問題的某一部分。如TCP/IP協定集中最基本的協定-IP協定用來在內部網中交換資料並且執行一項重要的功能:路由選擇--選擇資料報從A主機到B主機將要經過的路徑以及利用合適的路由器完成不同網路之間的跨越(hop)。 TCP是一個更高層次的它允許運行在在不同主機上的應用程式相互交換資料流程。TCP將資料流程分成小段叫做TCP資料段(TCPsegments),並利用IP協議進行傳輸。在大多數情況下,每個TCP資料段裝在一個IP資料報中進行發送。但如需要的話,TCP將把資料段分成多個資料報,而IP資料報則與同一網路不同主機間傳輸位元流和位元組流的物理資料幀相容。由於IP並不能保證接收的資料報的順序相一致,TCP會在收信端裝配TCP資料段並形成一個不間斷的資料流程。FTP和Telnet就是兩個非常流行的依靠TCP的TCP/IP應用程式。 另一個重要的TCP/IP協定集的成員是用戶資料報協定(UDP),它同TCP相似但比TCP原始許多。TCP是一個可靠的協定,因為它有錯誤檢查和握手確認來保證資料完整的到達目的地。UDP是一個“不可靠”的協議,因為它不能保證資料報的接收順序同發送順序相同,甚至不能保證它們是否全部到達。如果有可靠性要求,則應用程式避免使用它。同許多TCP/IP工具同時提供的SNMP(簡單網路管理協定)就是一個使用UDP協議的應用例子。 其他TCP/IP協定在TCP/IP網路中工作在幕後,但同樣也發揮著重要作用。例如位址轉換協定(ARP)將IP位址轉換為物理網路位址如乙太網位址。而與其對應的反向位址轉換協議(RARP)做相反的工作,即將物理網路位址轉換為IP位址。網際控制報文協議(ICMP)則是一個支援性協議,它利用IP完成IP資料報在傳輸時的控制資訊和錯誤資訊的傳輸。例如,如果一個路由器不能向前發送一個IP資料報,它就會利用ICMP來告訴發送者這裏出現了問題。 網路設計者在解決網路體系結構時經常使用ISO/OSI( 國際標準化組織/開放系統互連)七層模型,該模型每 一層代表一定層次的網路功能。最下面是物理層,它 代表著進行資料轉輸的物理介質,換句話說,即網路 電纜。其上是資料連結層,它通過網路介面卡提供服 務。最上層是應用層,這裏運行著使用網路服務的應 用程式。 TCP/IP是同ISO/OSI模型等價的。當一個資料單元 從網路應用程式下流到網路介面卡,它通過了一列的TCP/IP 模組。這其中的每一步,資料單元都會同網路另一端 對等TCP/IP模組所需的資訊一起打成包。這樣當資料最 終傳到網卡時,它成了一個標準的乙太幀(假設物理 網路是乙太網)。而接收端的TCP/IP軟體通過剝去乙太網 幀並將資料向上傳輸過TCP/IP棧來為處於接收狀態的應 用程式重新恢復原始資料(一種最好的瞭解TCP/IP工作實 質的方法,是使用探測程式來觀察網路中的到處流動 的幀中被不同TCP/IP模組所加上的資訊)。 為了勾勒TCP/IP在現實網路世界中所扮演的角色, 請考慮當使用HTTP(超文本傳輸協定)的Web流覽器從連接 在Internet上的Web伺服器上獲取一頁HTML資料時所發生的情 況。為形成同Web伺服器的虛鏈路,流覽器使用一種被 抽象地稱為套介面(socket)的高層軟體。為了獲 取Web頁,它通過向套介面向套介面寫入HTTPGET命令來向Web 伺服器發出該指令。接下來套介面軟體使用TCP協定向 Web伺服器發出包含GET命令的位元組流和位元流,TCP將資料 分段並將各獨立段傳到IP模組,該模組將資料段轉換 成資料報併發送給Web伺服器。 如果流覽器和伺服器運--在不同物理網路的計 算機上(一般情況如此),資料報從一個網路傳到另一 個網路,直到抵達伺服器所在的那個網。最終,資料 被傳輸到目的地址並被重新裝配,這樣Web伺服器通過 讀自己的套介面來獲得資料主幹,並進而查看連續的 資料流程。對流覽器和伺服器來說,資料在這一端寫入 套介面而在另一端出現如同魔術一般,但這只是底 下發生的各種複雜的交互,它創造了資料經過網路無 縫傳輸的假像。 這就是TCP/IP所做的:將許多小網聯成一個大網。 並在這個大網也就是Internet上提供應用程式所需要的 相互通信的服務。 評論: 對於TCP/IP有許多可談的,但這裏僅講三個關鍵 點: •TCP/IP是一族用來把不同的物理網路聯在一 起構成網際網的協定。TCP/IP聯接獨立的網路形成一個 虛擬的網,在網內用來確認各種獨立的不是物理網路 位址,而是IP位址。 •TCP/IP使用多層體系結構,該結構清晰定義了 每個協定的責任。TCP和UDP向網路應用程式提供了高層 的資料傳輸服務,並都需要IP來傳輸資料包。IP有責任 為資料包到達目的地選擇合適的路由。 •在Internet主機上,兩個運行著的應用程式之 間傳送要通過主機的TCP/IP堆疊上下移動。在發送端TCP/IP 模組加在資料上的資訊將在接收端對應的TCP/IP模組上 濾掉,並將最終恢復原始資料。 如果你有興趣學習更多的TCP/IP知識,這裏有兩個 較高層次的資訊源RFC(RequestforComment)1180——叫做“TCP/IP Tutorial”的文檔,你可以從許多普及的RFC的Internet節點上 下載。另一個是InternetworkingwithTCP/IP的第一卷:Principles,Protocols,and Architectures,作者DouglasE.Comer(1995,Prentice-Hall)。作為該系三部 曲中的第一部分,許多人把看成是一本TCP/IP聖經。(原 文刊載於Vol.15No.20) 二、傳輸層的安全性 在Internet應用編程式中,通常使用廣義的進程間通信(IPC)機制來與不同層次的安全協定打交道。比較流行的兩個IPC編程介面是BSD Sockets和傳輸層介面(TLI),在Unix系統V命令裏可以找到。 在Internet中提供安全服務的首先一個想法便是強化它的IPC介面,如BSD Sockets等,具體做法包括雙端實體的認證,資料加密密鑰的交換等。Netscape通信公司遵循了這個思路,制定了建立在可靠的傳輸服務(如TCP/IP所提供)基礎上的安全套接層協議(SSL)。SSL版本3(SSL v3)於1995年12月制定。它主要包含以下兩個協議: SSL記錄協定 它涉及應用程式提供的資訊的分段、壓縮、資料認證和加密。SSL v3提供對資料認證用的MD5和SHA以及資料加密用的R4和DES等的支援,用來對資料進行認證和加密的密鑰可以通過SSL的握手協議來協商。 SSL握手協定 用來交換版本號、加密演算法、(相互)身份認證並交換密鑰。SSL v3 提供對Deffie-Hellman密鑰交換演算法、基於RSA的密鑰交換機制和另一種實現在 Fortezza chip上的密鑰交換機制的支持。 Netscape通信公司已經向公眾推出了SSL的參考實現(稱為SSLref)。另一免費的SSL實現叫做SSLeay。SSLref和SSLeay均可給任何TCP/IP應用提供SSL功能。Internet號碼分配當局(IANA)已經為具備SSL功能的應用分配了固定埠號,例如,帶SSL的 HTTP(https)被分配的埠號為443,帶SSL的SMTP(ssmtp)被分配的埠號為465,帶SSL的NNTP(snntp)被分配的埠號為563。 微軟推出了SSL2的改進版本稱為PCT(私人通信技術)。至少從它使用的記錄格式來看,SSL和PCT是十分相似的。它們的主要差別是它們在版本號欄位的最顯著位(The Most Significant Bit)上的取值有所不同: SSL該位取0,PCT該位取1。這樣區分之後,就可以對這兩個協定都給以支援。 1996年4月,IETF授權一個傳輸層安全(TLS)工作組著手制定一個傳輸層安全協議(TLSP),以便作為標準提案向IESG正式提交。TLSP將會在許多地方酷似SSL。 前面已介紹Internet層安全機制的主要優點是它的透明性,即安全服務的提供不要求應用層做任何改變。這對傳輸層來說是做不到的。原則上,任何TCP/IP應用,只要應用傳輸層安全協議,比如說SSL或PCT,就必定要進行若干修改以增加相應的功能,並使用(稍微)不同的IPC介面。於是,傳輸層安全機制的主要缺點就是要對傳輸層IPC介面和應用程式兩端都進行修改。可是,比起Internet層和應用層的安全機制來,這裏的修改還是相當小的。另一個缺點是,基於UDP的通信很難在傳輸層建立起安全機制來。同網路層安全機制相比,傳輸層安全機制的主要優點是它提供基於進程對進程的(而不是主機對主機的)安全服務。這一成就如果再加上應用級的安全服務,就可以再向前跨越一大步了。 三、應用層的安全性 必須牢記(且須仔細品味): 網路層(傳輸層)的安全協定允許為主機(進程)之間的資料通道增加安全屬性。本質上,這意味著真正的(或許再加上機密的)資料通道還是建立在主機(或進程)之間,但卻不可能區分在同一通道上傳輸的一個具體檔的安全性要求。比如說,如果一個主機與另一個主機之間建立起一條安全的IP通道,那麼所有在這條通道上傳輸的IP包就都要自動地被加密。同樣,如果一個進程和另一個進程之間通過傳輸層安全協議建立起了一條安全的資料通道,那麼兩個進程間傳輸的所有消息就都要自動地被加密。 如果確實想要區分一個具體檔的不同的安全性要求,那就必須借助于應用層的安全性。提供應用層的安全服務實際上是最靈活的處理單個檔安全性的手段。例如一個電子郵件系統可能需要對要發出的信件的個別段落實施資料簽名。較低層的協議提供的安全功能一般不會知道任何要發出的信件的段落結構,從而不可能知道該對哪一部分進行簽名。只有應用層是唯一能夠提供這種安全服務的層次。 一般來說,在應用層提供安全服務有幾種可能的做法,第一個想到的做法大概就是對每個應用(及應用協議)分別進行修改。一些重要的TCP/IP應用已經這樣做了。在RFC 1421至1424中,IETF規定了私用強化郵件(PEM)來為基於SMTP的電子郵件系統提供安全服務。由於種種理由,Internet業界採納PEM的步子還是太慢,一個主要的原因是PEM依賴於一個既存的、完全可操作的PKI(公鑰基礎結構)。PEM PKI是按層次組織的,由下述三個層次構成: 頂層為Internet安全政策登記機構(IPRA) 次層為安全政策證書頒發機構(PCA) 底層為證書頒發機構(CA) 建立一個符合PEM規範的PKI也是一個政治性的過程,因為它需要多方在一個共同點上達成信任。不幸的是,歷史表明,政治性的過程總是需要時間的,作為一個中間步驟,Phil Zimmermann開發了一個套裝軟體,叫做PGP(pretty Good Privacy)。PGP符合PEM的絕大多數規範,但不必要求PKI的存在。相反,它採用了分散式的信任模型,即由每個用戶自己決定該信任哪些其他用戶。因此,PGP不是去推廣一個全局的PKI,而是讓用戶自己建立自己的信任之網。這就立刻產生一個問題,就是分散式的信任模型下,密鑰廢除了怎麼辦。 S-HTTP是Web上使用的超文本傳輸協定(HTTP)的安全增強版本,由企業集成技術公司設計。S-HTTP提供了檔級的安全機制,因此每個檔都可以被設成私人/簽字狀態。用作加密及簽名的演算法可以由參與通信的收發雙方協商。S-HTTP提供了對多種單向散列(Hash)函數的支援,如: MD2,MD5及SHA; 對多種單鑰體制的支持,如:DES,三元DES,RC2,RC4,以及CDMF; 對數字簽名體制的支援,如: RSA和DSS。 目前還沒有Web安全性的公認標準。這樣的標準只能由WWW Consortium,IETF或其他有關的標準化組織來制定。而正式的標準化過程是漫長的,可能要拖上好幾年,直到所有的標準化組織都充分認識到Web安全的重要性。S-HTTP和SSL是從不同角度提供Web的安全性的。S-HTTP對單個檔作"私人/簽字"之區分,而SSL則把參與通信的相應進程之間的資料通道按"私用"和"已認證"進行監管。Terisa公司的SecureWeb工具套裝軟體可以用來為任何Web應用提供安全功能。該工具套裝軟體提供有 RSA資料安全公司的加密演算法庫,並提供對SSL和S-HTTP的全面支援。 另一個重要的應用是電子商務,尤其是信用卡交易。為使Internet上的信用卡交易安全起見,MasterCard公司(同IBM,Netscape,GTE和Cybercash一道) 制定了安全電子付費協定(SEPP),Visa國際公司和微軟(和其他一些公司一道)制定了安全交易技術(STT)協定。同時,MasterCard,Visa國際和微軟已經同意聯手推出Internet上的安全信用卡交易服務。他們發佈了相應的安全電子交易(SET)協定,其中規定了信用卡持卡人用其信用卡通過Internet進行付費的方法。這套機制的後臺有一個證書頒發的基礎結構,提供對X.509證書的支援。 上面提到的所有這些加安全功能的應用都會面臨一個主要的問題,就是每個這樣的應用都要單獨進行相應的修改。因此,如果能有一個統一的修改手段,那就好多了。通往這個方向的一個步驟就是赫爾辛基大學的Tatu Yloenen開發的安全shell(SSH)。SSH允許其用戶安全地登錄到遠端主機上,執行命令,傳輸檔。它實現了一個密鑰交換協定,以及主機及用戶端認證協定。SSH有當今流行的多種Unix系統平臺上的免費版本,也有由Data Fellows公司包裝上市的商品化版本。 把SSH的思路再往前推進一步,就到了認證和密鑰分配系統。本質上,認證和密鑰分配系統提供的是一個應用編程介面(API),它可以用來為任何網路應用程式提供安全服務,例如: 認證、資料機密性和完整性、訪問控制以及非否認服務。目前已經有一些實用的認證和密鑰分配系統,如: MIT的Kerberos(V4與V5),IBM的CryptoKnight和Netwrok Security Program,DEC的SPX,Karlsruhe大學的指數安全系統(TESS)等,都是得到廣泛採用的實例。甚至可以見到對有些認證和密鑰分配系統的修改和擴充。例如,SESAME和OSF DCE對Kerberos V5作了增加訪問控制服務的擴充,Yaksha對Kerberos V5作了增加非否認服務的擴充。 關於認證和密鑰分配系統的一個經常遇到的問題是關於它們在Internet上所受到的冷遇。一個原因是它仍要求對應用本身做出改動。考慮到這一點,對一個認證和密鑰分配系統來說,提供一個標準化的安全API就顯得格外重要。能做到這一點,開發人員就不必再為增加很少的安全功能而對整個應用程式大動手術了。因此,認證系統設計領域內最主要的進展之一就是制定了標準化的安全API,即通用安全服務API(GSS-API)。GSS-API(v1及v2)對於一個非安全專家的編程人員來說可能仍顯得過於技術化了些,但德州Austin大學的研究者們開發的安全網路編程(SNP),把介面做到了比GSS-API更高的層次,使同網路安全性有關的編程更加方便了。 局域網在網路層有什麼不安全的地方? NAI公司 供稿 不安全的地方 由於局域網中採用廣播方式,因此,若在某個廣播域中可以偵聽到所有的資訊包,駭客就對可以對資訊包進行分析,那麼本廣播域的資訊傳遞都會暴露在駭客面前。 網路分段 網路分段是保證安全的一項重要措施,同時也是一項基本措施,其指導思想在於將非法用戶與網路資源相互隔離,從而達到限制用戶非法訪問的目的。 網路分段可分為物理分段和邏輯分段兩種方式: 物理分段通常是指將網路從物理層和資料連結層(ISO/OSI模型中的第一層和第二層)上分為若干網段,各網段相互之間無法進行直接通訊。目前,許多交換機都有一定的訪問控制能力,可實現對網路的物理分段。邏輯分段則是指將整個系統在網路層(ISO/OSI模型中的第三層)上進行分段。例如,對於TCP/IP網路,可把網路分成若干IP子網,各子網間必須通過路由器、路由交換機、閘道或防火牆等設備進行連接,利用這些中間設備(含軟體、硬體)的安全機制來控制各子網間的訪問。在實際應用過程中,通常採取物理分段與邏輯分段相結合的方法來實現對網路系統的安全性控制。 VLAN的實現 虛擬網技術主要基於近年發展的局域網交換技術(ATM和乙太網交換)。交換技術將傳統的基於廣播的局域網技術發展為面向連接的技術。因此,網管系統有能力限制局域網通訊的範圍而無需通過開銷很大的路由器。 乙太網從本質上基於廣播機制,但應用了交換器和VLAN技術後,實際上轉變為點到點通訊,除非設置了監聽口,資訊交換也不會存在監聽和插入(改變)問題。 由以上運行機制帶來的網路安全的好處是顯而易見的: 資訊只到達應該到達的地點。因此、防止了大部分基於網路監聽的入侵手段。 通過虛擬網設置的訪問控制,使在虛擬網外的網路節點不能直接訪問虛擬網內節點。 但是,虛擬網技術也帶來了新的安全問題: 執行虛擬網交換的設備越來越複雜,從而成為被攻擊的對象。基於網路廣播原理的入侵監控技術在高速交換網路內需要特殊的設置。基於MAC的VLAN不能防止MAC欺騙攻擊。 採用基於MAC的VLAN劃分將面臨假冒MAC位址的攻擊。因此,VLAN的劃分最好基於交換機埠。但這要求整個網路桌面使用交換埠或每個交換埠所在的網段機器均屬於相同的VLAN。 VLAN之間的劃分原則 VLAN的劃分方式的目的是保證系統的安全性。因此,可以按照系統的安全性來劃分VLAN;可以將總部中的伺服器系統單獨劃作一個VLAN,如資料庫伺服器、電子郵件伺服器等。也可以按照機構的設置來劃分VLAN,如將領導所在的網路單獨作為一個Leader VLAN(LVLAN), 其他司局(或下級機構)分別作為一個VLAN,並且控制LVLAN與其他VLAN之間的單向資訊流向,即允許LVLAN查看其他VLAN的相關資訊,其他VLAN不能訪問LVLAN的資訊。VLAN之內的連接採用交換實現, VLAN與VLAN之間採用路由實現。由於路由控制的能力有限,不能實現LVLAN與其他VLAN之間的單向資訊流動,需要在LVLAN與其他VLAN之間設置一個Gauntlet防火牆作為安全隔離設備,控制VLAN與VLAN之間的資訊交流 □…… 共用軟體前景分析 - 返回頁首 - 近年來,隨著互聯網的迅速發展和普及,用戶應用水準的不斷提高, 以及對實用軟體的需求日益加大,商業軟體已難以滿足線民的多方面需求,於是各種共用軟體的出現逐漸開始“填補”商業軟體的市場“空白”。 共用軟體由於價廉物美,有些甚至是完全免費且附帶源代碼,所以用戶增長很快,部分共用軟體的用戶甚至超過了商業軟體。無疑,共用軟體的交流是促進科技轉化為生產力的一種途徑, 其中不乏有經過多年潛心研究的具有較高學術價值的科研成果, 筆者所見的一些商業軟體的開發思路都是從這些數目龐大的共用軟體中產生的。 然而,我們看到或聽到更多的是,一些軟體作者因為各種原因而無法進行“擴大再生產”的故事。許多優秀的共用軟體中途夭折,甚至作者本人因心灰意冷而離開了“共用軟體”的陣營。而一直以來,共用軟體作者和媒體宣傳者給國產共用軟體塗上了過多的艱苦奮鬥和慘澹的悲情色彩,大歎“付出沒有回報”的同時又以極其羡慕和嫉妒的目光注視著國外Winzip、ACDSee等著名的共用軟體,這些國外同行們憑著註冊費用就獲得了不菲的收入,甚至支撐了整個公司的運營。 全都擠到一座獨木橋上,焉能不一個個下馬就擒 隨便進入國內任何一個下載站點的國產共用軟體欄目,都可以看到這樣的一個事實:滿眼儘是EQmail收發軟體,搜索輔助軟體,視(音)頻播放軟體,財務和股票軟體:重複的無意義勞動太多!由於有了各種各樣的“視覺化”編程工具,以及互聯網上星羅棋佈的“控制項”和源代碼,使得編寫入門程式變得輕鬆容易起來。再加上,多年來激烈的競爭使題材與表現手法的創新變得很難,往往是某個好軟體剛走紅,馬上就會被淹沒在模仿者的“汪洋大海”之中,“撞車”現象比比皆是。全都擠到一座獨木橋上,焉能不一個個下馬就擒。而當用戶需要面臨許多選擇時,他們的選擇往往是不再選擇。 此是共用軟體沒有創新思想和市場觀念的一面。 一個成熟的市場是富有層次的市場。對於潛在的消費群體,應該根據其年齡、職業、收入、文化程度、社區環境等各種因素進行合理有效的細分,從而明確需求,正確地定位軟體內容和行銷手段,最終達到預期的商業目的,這就是現代市場行銷學理論所強調的市場細分。實際上,系統而細緻的細分工作是將市場這塊“蛋糕”做大、做好的前提。在此過程中,還要考慮到其他諸如地域特徵、購買力等因素。於是便很容易構建出一個多維的立體空間。在這樣廣闊的天地裏,相信每一個共用軟體作者都應該而且能夠找到適合自己的位置。 事實上,別人做普通的EQmail,你可以做專門用於hotmail等web免費郵箱用戶端EQmail收發,或專門用來投稿或聯繫VC的Mail等等。記得新加坡過去有個帶寵物的EQmail軟體就很是紅火了兩年。 原有的共用軟體作者在轉變思路之後,完全可以擺脫悲劇的陰影 筆者所認識的共用軟體作者中有一些還只是滿足於把軟體“做出來”,然後渴望被大的軟體下載站點收錄並評個X星級什麼的,其他的用戶諮詢、答疑和升級就都不管了,還掛出個“終結版”的大旗,大有舍我其誰的氣概。而有的人寫共用軟體也只是向大家表明:自己會以編程來招攬軟體發展任務。更有甚者,寫共用軟體只是為了最終找到一份滿意的工作。 世界第二大獨立軟體公司CA(Computer Associates International Inc.)的掌門人王嘉廉曾這樣說過:“中國有優秀的軟體人才,但中國缺少的是系統開發能力、軟體產品商品化的能力,以及在全球市場經銷軟體產品的經驗。” 王先生的話筆者是非常贊成的。但是,我們不能過高地期望軟體作者可以與大的軟體公司一樣完成集成和規模開發,也不能強迫以“自由”為根本特徵的共用軟體作者會走到一起來集體開發規模軟體。很多“集團開發”失敗的案例已經充分證明了這一點。我們只是希望原來的共用軟體作者可以擺脫過去“訴苦”、“委屈”、“悲哀”的悲劇陰影,而且會有越來越多的人加入到共用軟體的“歡樂大本營”中來。 共用軟體也是一種商品,它也需要進行策略性的市場推廣 事實上,共用軟體和商業軟體一樣都是一種商品,而並不在於收費多少或者免費。商品的“銷售”需要售前和售後服務,更需要進行策略性的市場推廣。 國外那些共用軟體能夠獲得巨大的成功,我想,如果他們僅僅滿足於溫飽,或許早就停止了開放的步伐。而事實上,他們通過市場運營做得越來越好,很多人都知道,zipmagic比起Winzip來可能還要好用,但絕對不如Winzip掙錢掙得多,它輸在哪里,不是輸在軟體的品質,而是市場的運作上。 我們就看共用軟體的推廣最基本的一個方面:“免費”。這裏的“免費”可以是開始的版本“免費”,或提供“免費”的限制功能版。“免費”的目的是使得軟體上市初始價格的無限最小化,這樣通過圈定特定的使用人群來獲得自己的市場領地和份額。 然而,免費也需要策略和最終目的,從開始免費之前就應首先考慮將來如何收費。筆者曾見到這樣一種現象:有些優秀的軟體進入“免費”的怪圈而不可自拔,最終作者本人不能得到他的收益又怨天尤人,卻未曾想自己的失敗之處和免費給他帶來的名譽與用戶。 當然,我們在就目前存在的問題來分析共用軟體的同時,也應看到未來的趨勢:不久,我們將面臨軟體行業的重新定位。軟體作為一種服務,被捆綁在其他的服務之上,如:網路遊戲軟體可能成為寬頻網路ISP所提供服務的一種,收費方式更加靈活,而不需要人們購買任何有形的東西即可得到這種服務。 面對如此多的阻礙與困難,站在今天的起點遙看中國共用軟體的前途,我只能用一句話來表達:路還很長。 □…… Windows 2000下的Raw Socket編程 - 返回頁首 - Windows2000在TCP/IP協定元件上做了很多改進,功能也有增強。比如在協議棧上的調整,增大了默認視窗大小,以及高延遲鏈結新演算法。同時在安全性上,可應用IPSec加強安全性,比NT下有不少的改進。 Microsoft TCP/IP 元件包含“核心協定”、“服務”及兩者之間的“介面”。傳輸驅動程式介面 (TDI) 與網路設備介面規範 (NDIS) 是公用的。 此外,還有許多用戶模型應用程式的更高級介面。最常用的介面是 Windows Sockets、遠端程序呼叫 (RPC) 和 NetBIOS。 Windows Sockets 是一個編程介面,它是在加州大學伯克利分校開發的套接字介面的基礎上定義的。它包括了一組擴展件,以充分利用 Microsoft Windows 消息驅動的特點。規範的 1.1 版是在 1993 年 1 月發行的,2.2.0 版在 1996 年 5 月發行。Windows 2000 支持 Winsock 2.2 版。在Winsock2中,支援多個傳輸協定的原始套接字,重疊I/O模型、服務品質控制等。 這裏介紹Windows Sockets的一些關於原始套接字(Raw Socket)的編程。同Winsock1相比,最明顯的就是支持了Raw Socket套接字類型,通過原始套接字,我們可以更加自如地控制Windows下的多種協定,而且能夠對網路底層的傳輸機制進行控制。 1、創建一個原始套接字,並設置IP頭選項。 SOCKET sock; sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP); 或者: s = WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED); 這裏,我們設置了SOCK_RAW標誌,表示我們聲明的是一個原始套接字類型。創建原始套接字後,IP頭就會包含在接收的資料中,如果我們設定 IP_HDRINCL 選項,那麼,就需要自己來構造IP頭。注意,如果設置IP_HDRINCL 選項,那麼必須具有 administrator許可權,要不就必須修改註冊表: HKEY_LOCAL_MACHINESystemCurrentControlSetServicesAfdParameter 修改鍵:DisableRawSecurity(類型為DWORD),把值修改為 1。如果沒有,就添加。 BOOL blnFlag=TRUE; setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&blnFlag, sizeof(blnFlag); 對於原始套接字在接收資料報的時候,要注意這麼幾點: 1、如果接收的資料報中協定類型和定義的原始套接字匹配,那麼,接收的所有資料就拷貝到套接字中。 2、如果綁定了本地位址,那麼只有接收資料IP頭中對應的遠端位址匹配,接收的資料就拷貝到套接字中。 3、如果定義的是外部位址,比如使用connect(),那麼,只有接收資料IP頭中對應的源位址匹配,接收的資料就拷貝到套接字中。 2、構造IP頭和TCP頭 這裏,提供IP頭和TCP頭的結構: // Standard TCP flags #define URG 0x20 #define ACK 0x10 #define PSH 0x08 #define RST 0x04 #define SYN 0x02 #define FIN 0x01 typedef struct _iphdr //定義IP首部 { unsigned char h_lenver; //4位首部長度 4位IP版本號 unsigned char tos; //8位元服務類型TOS unsigned short total_len; //16位元總長度(位元組) unsigned short ident; //16位元標識 unsigned short frag_and_flags; //3位元標誌位元 unsigned char ttl; //8位生存時間 TTL unsigned char proto; //8位元協議 (TCP, UDP 或其他) unsigned short checksum; //16位IP首部校驗和 unsigned int sourceIP; //32位源IP地址 unsigned int destIP; //32位元目的IP位址 }IP_HEADER; typedef struct psd_hdr //定義TCP偽首部 { unsigned long saddr; //源地址 unsigned long daddr; //目的地址 char mbz; char ptcl; //協議類型 unsigned short tcpl; //TCP長度 }PSD_HEADER; typedef struct _tcphdr //定義TCP首部 { USHORT th_sport; //16位源埠 USHORT th_dport; //16位元目的埠 unsigned int th_seq; //32位序列號 unsigned int th_ack; //32位確認號 unsigned char th_lenres; //4位首部長度/6位保留字 unsigned char th_flag; //6位元標誌位元 USHORT th_win; //16位元窗口大小 USHORT th_sum; //16位校驗和 USHORT th_urp; //16位元緊急資料偏移量 }TCP_HEADER; TCP偽首部並不是真正存在的,只是用於計算核對總和。校驗和函數: USHORT checksum(USHORT *buffer, int size) { unsigned long cksum=0; while (size > 1) { cksum = *buffer ; size -= sizeof(USHORT); } if (size) { cksum = *(UCHAR*)buffer; } cksum = (cksum >> 16) (cksum & 0xffff); cksum = (cksum >>16); return (USHORT)(~cksum); } 當需要自己填充IP頭部和TCP頭部的時候,就同時需要自己計算他們的核對總和。 3、發送原始套接字資料報 填充這些頭部稍微麻煩點,發送就相對簡單多了。只需要使用sendto()就OK。 sendto(sock, (char*)&tcpHeader, sizeof(tcpHeader), 0, (sockaddr*)&addr_in,sizeof(addr_in)); 下面是一個示例程式,可以作為SYN掃描的一部分。 #include |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |