亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

TCPIP完整的一套基礎介紹

2019-11-17 05:15:32
字體:
來源:轉載
供稿:網友

  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技術后,實際上轉變為點到點通訊,除非設置了監聽口,信息交換也不會存在監聽和插入(改變)問題。

由以上運行機制帶來的網絡安全的好處是顯而易見的:
信息只到達應該到達的地點。因此、防止了大部分基于網絡監聽的入侵手段。
通過虛擬網設置的訪問控制,使在虛擬網外的網絡節點不能直接訪問虛擬網內節點。

但是,虛擬網技術也帶來了新的安全問題:
執行虛擬網交換的設備越來越復雜,從而成為被攻擊的對象?;诰W絡廣播原理的入侵監控技術在高速交換網絡內需要非凡的設置?;贛AC的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等聞名的共享軟件,這些國外同行們憑著注冊費用就獲得了不菲的收入,甚至支撐了整個公司的運營。

全都擠到一座獨木橋上,焉能不一個個下馬就擒

隨便進入國內任何一個下載站點的國產共享軟件欄目,都可以看到這樣的一個事實:滿眼盡是Email收發軟件,搜索輔助軟件,視(音)頻播放軟件,財務和股票軟件:重復的無意義勞動太多!由于有了各種各樣的“可視化”編程工具,以及互聯網上星羅棋布的“控件”和源代碼,使得編寫入門程序變得輕松輕易起來。再加上,多年來激烈的競爭使題材與表現手法的創新變得很難,往往是某個好軟件剛走紅,馬上就會被沉沒在模擬者的“汪洋大海”之中,“撞車”現象比比皆是。全都擠到一座獨木橋上,焉能不一個個下馬就擒。而當用戶需要面臨許多選擇時,他們的選擇往往是不再選擇。

此是共享軟件沒有創新思想和市場觀念的一面。

一個成熟的市場是富有層次的市場。對于潛在的消費群體,應該根據其年齡、職業、收入、文化程度、社區環境等各種因素進行合理有效的細分,從而明確需求,正確地定位軟件內容和營銷手段,最終達到預期的商業目的,這就是現代市場營銷學理論所強調的市場細分。實際上,系統而細致的細分工作是將市場這塊“蛋糕”做大、做好的前提。在此過程中,還要考慮到其他諸如地域特征、購買力等因素。于是便很輕易構建出一個多維的立體空間。在這樣廣闊的天地里,相信每一個共享軟件作者都應該而且能夠找到適合自己的位置。


事實上,別人做普通的Email,你可以做專門用于hotmail等web免費郵箱客戶端Email收發,或專門用來投稿或聯系VC的Mail等等。記得新加坡過去有個帶寵物的Email軟件就很是紅火了兩年。

原有的共享軟件作者在轉變思路之后,完全可以擺脫悲劇的陰影

筆者所熟悉的共享軟件作者中有一些還只是滿足于把軟件“做出來”,然后渴望被大的軟件下載站點收錄并評個X星級什么的,其他的用戶咨詢、答疑和升級就都不管了,還掛出個“終結版”的大旗,大有舍我其誰的氣概。而有的人寫共享軟件也只是向大家表明:自己會以編程來招攬軟件開發任務。更有甚者,寫共享軟件只是為了最終找到一份滿足的工作。

世界第二大獨立軟件公司CA(Computer Associates International Inc.)的掌門人王嘉廉曾這樣說過:“中國有優秀的軟件人才,但中國缺少的是系統開發能力、軟件產品商品化的能力,以及在全球市場經銷軟件產品的經驗?!?br />
王先生的話筆者是非常贊成的。但是,我們不能過高地期望軟件作者可以與大的軟件公司一樣完成集成和規模開發,也不能強迫以“自由”為根本特征的共享軟件作者會走到一起來集體開發規模軟件。很多“集團開發”失敗的案例已經充分證實了這一點。我們只是希望原來的共享軟件作者可以擺脫過去“訴苦”、“委屈”、“悲哀”的悲劇陰影,而且會有越來越多的人加入到共享軟件的“歡樂大本營”中來。

共享軟件也是一種商品,它也需要進行策略性的市場推廣

事實上,共享軟件和商業軟件一樣都是一種商品,而并不在于收費多少或者免費。商品的“銷售”需要售前和售后服務,更需要進行策略性的市場推廣。

國外那些共享軟件能夠獲得巨大的成功,我想,假如他們僅僅滿足于溫飽,或許早就停止了開放的步伐。而事實上,他們通過市場運營做得越來越好,很多人都知道,zipmagic比起Winzip來可能還要好用,但絕對不如Winzip掙錢掙得多,它輸在哪里,不是輸在軟件的品質,而是市場的運作上。

我們就看共享軟件的推廣最基本的一個方面:“免費”。這里的“免費”可以是開始的版本“免費”,或提供“免費”的限制功能版?!懊赓M”的目的是使得軟件上市初始價格的無限最小化,這樣通過圈定特定的使用人群來獲得自己的市場領地和份額。

然而,免費也需要策略和最終目的,從開始免費之前就應首先考慮將來如何收費。筆者曾見到這樣一種現象:有些優秀的軟件進入“免費”的怪圈而不可自拔,最終作者本人不能得到他的收益又怨天尤人,卻未曾想自己的失敗之處和免費給他帶來的名譽與用戶。

當然,我們在就目前存在的問題來分析共享軟件的同時,也應看到未來的趨勢:不久,我們將面臨軟件行業的重新定位。軟件作為一種服務,被捆綁在其他的服務之上,如:網絡游戲軟件可能成為寬帶網絡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 <stdio.h>
#include <winsock2.h>
#include <ws2tcpip.h>

#define SOURCE_PORT 7234
#define MAX_RECEIVEBYTE 255

typedef struct ip_hdr //定義IP首部
{
unsigned char h_verlen; //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地址
}IPHEADER;

typedef struct tsd_hdr //定義TCP偽首部
{
unsigned long saddr; //源地址
unsigned long daddr; //目的地址
char mbz;
char ptcl; //協議類型
unsigned short tcpl; //TCP長度
}PSDHEADER;

typedef struct tcp_hdr //定義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位緊急數據偏移量
}TCPHEADER;

//CheckSum:計算校驗和的子函數
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);
}

void useage()
{
printf("******************************************
");
printf("TCPPing
");
printf(" Written by Refdom
");
printf(" Email: refdom@263.net
");
printf("Useage: TCPPing.exe Target_ip Target_port
");
printf("*******************************************
");
}

int main(int argc, char* argv[])
{
WSADATA WSAData;
SOCKET sock;
SOCKADDR_IN addr_in;
IPHEADER ipHeader;
TCPHEADER tcpHeader;
PSDHEADER psdHeader;

char szSendBuf[60]={0};
BOOL flag;
int rect,nTimeOver;

useage();

if (argc!= 3)
{ return false; }

if (WSAStartup(MAKEWORD(2,2), &WSAData)!=0)
{
printf("WSAStartup Error!
");
return false;
}

if ((sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED))==INVALID_SOCKET)
{
printf("Socket Setup Error!
");
return false;
}
flag=true;
if (setsockopt(sock,IPPROTO_IP, IP_HDRINCL,(char *)&flag,sizeof(flag))==SOCKET_ERROR)
{
printf("setsockopt IP_HDRINCL error!
");
return false;
}

nTimeOver=1000;
if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char*)&nTimeOver, sizeof(nTimeOver))==SOCKET_ERROR)
{
printf("setsockopt SO_SNDTIMEO error!
");
return false;
}
addr_in.sin_family=AF_INET;

addr_in.sin_port=htons(atoi(argv[2]));
addr_in.sin_addr.S_un.S_addr=inet_addr(argv[1]);

//
//
//填充IP首部
ipHeader.h_verlen=(4<<4 sizeof(ipHeader)/sizeof(unsigned long));
// ipHeader.tos=0;
ipHeader.total_len=htons(sizeof(ipHeader)+sizeof(tcpHeader));
ipHeader.ident=1;
ipHeader.frag_and_flags=0;
ipHeader.ttl=128;
ipHeader.proto=IPPROTO_TCP;
ipHeader.checksum=0;
ipHeader.sourceIP=inet_addr("本地地址");
ipHeader.destIP=inet_addr(argv[1]);

//填充TCP首部
tcpHeader.th_dport=htons(atoi(argv[2]));
tcpHeader.th_sport=htons(SOURCE_PORT); //源端口號
tcpHeader.th_seq=htonl(0x12345678);
tcpHeader.th_ack=0;
tcpHeader.th_lenres=(sizeof(tcpHeader)/4<<40);
tcpHeader.th_flag=2; //修改這里來實現不同的標志位探測,2是SYN,1是FIN,16是ACK探測 等等
tcpHeader.th_win=htons(512);
tcpHeader.th_urp=0;
tcpHeader.th_sum=0;

psdHeader.saddr=ipHeader.sourceIP;
psdHeader.daddr=ipHeader.destIP;
psdHeader.mbz=0;
psdHeader.ptcl=IPPROTO_TCP;
psdHeader.tcpl=htons(sizeof(tcpHeader));

//計算校驗和
memcpy(szSendBuf, &psdHeader, sizeof(psdHeader));
memcpy(szSendBuf+sizeof(psdHeader), &tcpHeader, sizeof(tcpHeader));
tcpHeader.th_sum=checksum((USHORT *)szSendBuf,sizeof(psdHeader)+sizeof(tcpHeader));

memcpy(szSendBuf, &ipHeader, sizeof(ipHeader));
memcpy(szSendBuf+sizeof(ipHeader), &tcpHeader, sizeof(tcpHeader));
memset(szSendBuf+sizeof(ipHeader)+sizeof(tcpHeader), 0, 4);
ipHeader.checksum=checksum((USHORT *)szSendBuf, sizeof(ipHeader)+sizeof(tcpHeader));

memcpy(szSendBuf, &ipHeader, sizeof(ipHeader));

rect=sendto(sock, szSendBuf, sizeof(ipHeader)+sizeof(tcpHeader),
0, (struct sockaddr*)&addr_in, sizeof(addr_in));
if (rect==SOCKET_ERROR)
{
printf("send error!:%d
",WSAGetLastError());
return false;
}
else
printf("send ok!
");

closesocket(sock);
WSACleanup();

return 0;
}

4、接收數據
和發送原始套接字數據相比,接收就比較麻煩了。因為在WIN我們不能用recv()來接收raw socket上的數據,這是因為,所有的IP包都是先遞交給系統核心,然后再傳輸到用戶程序,當發送一個raws socket包的時候(比如syn),核心并不知道,也沒有這個數據被發送或者連接建立的記錄,因此,當遠端主機回應的時候,系統核心就把這些包都全部丟掉,從而到不了應用程序上。所以,就不能簡單地使用接收函數來接收這些數據報。

要達到接收數據的目的,就必須采用嗅探,接收所有通過的數據包,然后進行篩選,留下符合我們需要的??梢栽俣x一個原始套接字,用來完成接收數據的任務,需要設置SIO_RCVALL,表示接收所有的數據。

SOCKET sniffersock;
sniffsock = WSASocket(AF_INET, SOCK_RAW, IPPROTO_IP, NULL, 0, WSA_FLAG_OVERLAPPED);

DWORD lpvBuffer = 1;
DWORD lpcbBytesReturned = 0 ;
WSAIoctl(sniffersock, SIO_RCVALL, &lpvBuffer, sizeof(lpvBuffer), NULL, 0, & lpcbBytesReturned, NULL, NULL);

創建一個用于接收數據的原始套接字,我們可以用接收函數來接收數據包了。然后在使用一個過濾函數達到篩選的目的,接收我們需要的數據包。
在 http://www.xici.net/board/doc.asp?id=5891453&sub=15 提供了一個完整的發送和接收的程序,可以參考。


------------------------------------------------------------
reference:
1、《MS Windows 2000 TCP-IP Implementation Details》
2、ziss《Raw Sockets in Windows 2000/XP》
3、MSDN Platform SDK:《Windows Sockets 2》
 
□…… C語言初學者的困惑--如何由dos向windows轉變
- + 返回頁首 + -
  很多人學C語言很長一段時間了,還不知C究竟能干什么,以為學習c語言沒什么用,純粹是為了應付學校的考試.更有人說"學C語言?別做如此愚蠢的行為了!趕緊學C++吧!"這種看法是不對的,不應該把c跟c++之間劃起絕對的界限,過分看重c++而把c貶得一無是處,這是很片面的.C++功能雖然強大,但它究竟是c的"超集",在c++里有哪一處找不到c的影子呢?沒有c的支持,c++只能是無本之木。

  一般情況下,c++編程方式編寫的程序源代碼量小,但編譯后的代碼量較大,運行的速度略低,不過開發時的工作量和工作難度較小;而c編程方式編寫的源代碼量較大,但可執行的效率高.假如一些對速度要求高,尤其是對硬件操作較多的程序,大多數還是用c編程方式開發的(用C又比用匯編簡單,易于實現).另外,學Win32 C程序設計還有助于更深入地了解Windows 的內幕和Win32 API。

  任何的編程語言都是一種工具,學習語言的目是要使用它來編寫出實際需要的軟件來,而軟件作為一個用戶程序,運行時要依靠操作系統,大多數人使用什么操作系統,我們就要編寫出基于哪一種平臺上的程序來.這樣,軟件才會有更大的市場。

  現在市面上出現的有關c語言方面的書大多是教授DOS下的c,上機實習也是在Turbo C 2.0(簡稱Tc)環境下轉來轉去.編程環境的單調總使人感到不爽.這也沒辦法,dos 下的c是最簡單的,初學者當然要從最簡單的入門啦.連比較有名的計算機專家譚浩強編的書也都是贊成從dos下的c學起的.再說,一個剛剛入門的人想在windows 這樣的多進程,多線程的操作系統下用c編程,那似乎又不太現實.(那要了解在windows下,一個win32程序大體上是怎樣執行的.要對系統有比較多的了解才行,一個初學者暫時還不具備那么多的知識)但我們的腳步又不能夠只停留在dos里,應該積極地從dos向windows轉變.在dos的時代,我們可以對dos下的編程迷戀,但現在都是windows橫行霸道的時代了,我們就應用c語言編寫windows平臺上的程序,因時而變,學以致用.是時代使然!假如現在還是dos雄霸天下的話,那我就不會寫這篇狗屁不通的文章來遺笑大方了,不被臭雞蛋扔死才怪呢!

  "變法"是大勢所趨的了,要害是怎么變,不單單是學習c語言的人如此,就連學c++的人都這樣,筆者曾經在QQ上碰到一個學了c++將近一年的小伙,居然問我,他想編一個windows窗口,該怎么下手,假如學一門語言用了一年時間,只是學了一點語法知識,卻沒有編過一道程序,那實在是一種悲哀.下面我談談從dos向windows轉變的一些個人見解,(這純屬個人觀點,僅供參考,假如您已是高手,完全不必要在此浪費時間):

  一.拓寬視野,改變偏見

  別老以為c只是dos特有的東西,一提到c語言就認為c只能在dos下編程.其實,這是被tc束縛了意識,我們在學校里平時就只在dos的tc里面用c編程,很少用到"圖形模式",整天面對?quot;烏黑黑"的屏幕,也難怪有些人一看到一個用c語言描繪出來的像windows的窗口便以為是c++的手筆.其實,作為一種語言,可以在任何一種平臺上編程,只是接口不同而已,只要找到適合該平臺的編程工具即可,c語言當然也能在windows下大放異彩.眼界放寬點,改變偏見,必有出色發現.





  二.選擇優秀的編程工具.

  “有好的工具,做起事來就事半功倍”.在dos下我們常用tc或bc(borland c).在windows下可以用c++builder 或者visual c++ 來編程,最好用visual c++ 究竟是微軟的東西嘛!微軟一天不垮臺,編程者的飯碗就不會掉的啦 ^_^ .再說,windows操作系統是微軟出的,其內幕微軟是最清楚不過的了,在應用程序接口上,相信vc也是做得最好的.不過用vc++6來編c程序會恨煩的,大家要有心理預備.同時可以選擇多種編程工具,例如匯編,可以加強對windows的了解,是成為高手的好方法。

  三.加強對windows的了解.

  可以說編一個程序,就是用一種語言的語法形式將數據結構和表面的執行過程描述出來.在不同的操作系統下,其程序的執行過程是不同的.我們應該對windows的系統機制最起碼有個大體的了解,才有可能編寫windows的程序.dos是單進程單線程的系統,進程從頭到尾的順序執行,而windows是多進程、多線程的操作系統,是基于事件的,消息驅動的操作系統.明白這些是在windows下編程必不可少的,多學學它,你會發現windows 和 dos有很多的不同之處。

  四.采取靈活多變的學習方法.

  在不同的時期,學習不同的東西?可是有些人學習像word,Excel這類操作性極強的辦公軟件時,總是先看書,看到尾巴忘了頭,到上機時卻不知所措.這種學習方式是被動的,看這些軟件操作的書,里面說的都是具體的操作,不親手又怎能接受新知識?


  五.多進行比較.

  dos和windows有許多共同和不同的地方,假如是從dos學過來的話,在學習過程中不妨多進行比較,把不同的地方記下,相同的地方可以跳過,這可以快速地了解系統的不同之處,迅速地學到東西!

  學習程序設計,我主張"實踐->理論->再實踐"的方式,在編程的初期,不管你會不會寫程序,都應先實踐,(這里的實踐是指編程工具操作方面的實踐),學會操作編程工具.也許有些人會說:"廢話!沒有理論,又怎么實踐?"不錯,當你坐在一臺電腦面前不知所措時,你就會想方設法使自己學會操作它,主動看書,看聯機幫助,請教別人,忙得個"不亦樂乎",這不是變"被動"為"主動"了嗎? 邊學習邊操作,以實踐來帶動理論的學習,接著達到"理論與實踐同步",就可闖過第一關,學會了編程工具的基本操作,可以為以后上機實踐打下鋪墊.

  光學會操作像vc這類的工具還不行,工具是死的,人才是活的,不會編程只能是空操作,你還會說:"廢話!沒有理論,怎么實踐?"的,這時就要學習編程的真功夫了,也就是我說的第二階段--學"理論"階段,深入研究前輩們的著作,吸取前人的聰明精華為我所用,扎扎實實打好編程內功,功夫到家了就應該"再實踐",將學到的東西運用于實際,編寫出我們需要的軟件來.學以致用嘛,呵呵~~這種方式總比"先學好語法的條條框框,再上機實踐"的效果好得多啦.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美巨猛xxxx猛交黑人97人| 亚洲国产精品久久| 日韩亚洲国产中文字幕| 国产精品久久久久久av| 欧美在线观看网站| 久久成人人人人精品欧| 欧美日韩国产综合视频在线观看中文| 成人午夜在线视频一区| 亚洲性夜色噜噜噜7777| 亚洲丁香久久久| 国产日韩欧美一二三区| 成人午夜小视频| 欧美性videos高清精品| 国产九九精品视频| 亚洲一区二区三| 日韩电影中文字幕av| 色琪琪综合男人的天堂aⅴ视频| 色婷婷久久一区二区| 国产欧美va欧美va香蕉在| 欧美一级bbbbb性bbbb喷潮片| 国产亚洲一区二区在线| 久久久久日韩精品久久久男男| 欧美成人精品在线播放| 亚洲欧美视频在线| 91香蕉嫩草神马影院在线观看| 国内偷自视频区视频综合| 亚洲女性裸体视频| 4p变态网欧美系列| 欧美成人午夜免费视在线看片| 中文字幕日韩欧美| 欧美日韩国产中文精品字幕自在自线| 最近2019中文字幕一页二页| 中国日韩欧美久久久久久久久| 亚洲第一精品夜夜躁人人爽| 好吊成人免视频| 不卡中文字幕av| 欧美性在线观看| 久久久久久久久亚洲| 国产精品免费在线免费| 91九色国产社区在线观看| 国产91在线高潮白浆在线观看| 国产精品精品视频| 国产精品亚洲综合天堂夜夜| 国产精品老女人视频| 欧美一区二区大胆人体摄影专业网站| 亚洲色图色老头| 91在线播放国产| 精品亚洲男同gayvideo网站| 国产精品福利网站| 亚洲欧美制服另类日韩| 欧美疯狂性受xxxxx另类| 亚洲综合最新在线| 国产福利成人在线| 国产精品高潮呻吟久久av黑人| 黄色91在线观看| 欧美极品欧美精品欧美视频| 欧美大荫蒂xxx| 亚洲成人av资源网| 欧美性xxxx极品hd欧美风情| 最近的2019中文字幕免费一页| 国产精品无av码在线观看| 欧美极品少妇xxxxⅹ喷水| 日本高清+成人网在线观看| 伊人伊成久久人综合网小说| 国产性猛交xxxx免费看久久| 日韩欧美国产免费播放| 亚洲精品成人久久| 精品视频在线播放免| 日韩电影在线观看中文字幕| 欧美色另类天堂2015| 国产精品入口免费视频一| 精品无人国产偷自产在线| 91网站在线免费观看| 国产精品久久精品| 91精品国产91久久久久久最新| 成人精品网站在线观看| 欧美日韩国产精品一区二区不卡中文| 久久精品久久久久| 国模吧一区二区三区| 亚洲一区免费网站| 国产美女精彩久久| 亚洲午夜精品久久久久久久久久久久| 久久精品国产91精品亚洲| 亚洲精品国偷自产在线99热| 亚洲男人天堂古典| 国产啪精品视频网站| 中文字幕欧美日韩在线| www.午夜精品| 亚洲精品资源在线| 成人免费在线视频网址| 一夜七次郎国产精品亚洲| 2019中文字幕免费视频| 国产精品一区二区三区免费视频| 欧美交受高潮1| 韩国19禁主播vip福利视频| 亚洲精品电影网站| 岛国av午夜精品| 亚洲影院污污.| 岛国视频午夜一区免费在线观看| 国产免费一区二区三区香蕉精| 日韩精品小视频| 欧美激情在线有限公司| 欧美激情第三页| 国产精品一二三视频| 日韩午夜在线视频| 中文字幕亚洲国产| 日韩精品中文字幕视频在线| 色久欧美在线视频观看| 2018中文字幕一区二区三区| 久久天天躁日日躁| 亚洲精品美女视频| 国产一区二区三区四区福利| 色婷婷久久av| 91精品啪aⅴ在线观看国产| 91国内在线视频| 亚洲精品综合久久中文字幕| 国产999精品视频| 久久精品国产成人| 久久综合久久88| 日韩欧美有码在线| 久久成人亚洲精品| 国产成人一区二区在线| 成人精品视频久久久久| 久久久精品中文字幕| 欧美疯狂性受xxxxx另类| 精品国产一区二区三区四区在线观看| 欧美精品成人91久久久久久久| 日韩成人在线视频观看| 日韩欧美国产一区二区| 国语自产精品视频在线看一大j8| 亚洲jizzjizz日本少妇| 亚洲九九九在线观看| 亚洲精品二三区| 久久久久久网站| 成人黄色大片在线免费观看| 精品视频在线播放| 久久久久久久久国产| 国模精品视频一区二区| 国产精品成人一区二区| 午夜精品一区二区三区视频免费看| 亚洲深夜福利网站| 91国内在线视频| 亚洲综合一区二区不卡| 亚洲国产精品人人爽夜夜爽| 97涩涩爰在线观看亚洲| 成人黄色av免费在线观看| 午夜精品福利在线观看| 久久国产精品久久久| 亚洲最大福利视频网| 亚洲一区二区中文| 国产成人小视频在线观看| 国产精品美女久久| 中文字幕亚洲情99在线| 自拍偷拍亚洲在线| 亚洲欧美精品伊人久久| 日韩大胆人体377p| 日韩经典中文字幕| 91精品免费视频| 亚洲欧美日韩高清| 国产激情视频一区| 91精品国产91久久久久久不卡| 亚洲级视频在线观看免费1级| 中文字幕一区二区精品| 一本色道久久88综合亚洲精品ⅰ|