日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

深入淺出計(jì)算機(jī)間通信原理

 共同成長(zhǎng)888 2015-07-18
親們,無論您是否閱讀完該文章,LC 懇請(qǐng)您們告訴他這文章寫的哪兒好哪兒不好, 會(huì)有禮物送哦..        --  LCatro

一  單工/半雙工/全雙工 通信的概念

  1.單工通信:

  單工通信定義:
信息在兩點(diǎn)之間只能單方向發(fā)送的工作方式.它的意思是指:假設(shè)A 和B 通信,只能由一方向另一方發(fā)送數(shù)據(jù)而不能接收來自另一方發(fā)送來的數(shù)據(jù).就像小朋友們玩的聽筒,在兩個(gè)杯子之間系上一條線再拉緊,這就可以對(duì)著杯子說話而另一邊能夠聽到聲音.

 



圖一  一個(gè)小孩對(duì)著罐子說話而另一個(gè)小孩在當(dāng)聽眾 
 
  2.半雙工通信:

  半雙工通信定義:
信息在兩點(diǎn)之間能夠在兩個(gè)方向上進(jìn)行發(fā)送,但不能同時(shí)發(fā)送的工作方式.這就表示發(fā)送/接收數(shù)據(jù) 是有先后順序的,比如:A 向B 發(fā)送數(shù)據(jù)請(qǐng)求后A 只能接收來自B 發(fā)送來的回傳數(shù)據(jù),但A 接收完來自B 發(fā)送來的會(huì)傳數(shù)據(jù)后又可以立即向B 發(fā)送數(shù)據(jù)請(qǐng)求,而且B 也可以向A 發(fā)送數(shù)據(jù).




圖二  "對(duì)講機(jī)"式問答 

  3.全雙工通信:

  全雙工通信定義:
通信允許數(shù)據(jù)在兩個(gè)方向上同時(shí)傳輸,它在能力上相當(dāng)于兩個(gè)單工通信方式的結(jié)合.全雙工通信和半雙工通信的本質(zhì)區(qū)別是半雙工通信雙方只共用一條線路實(shí)現(xiàn)雙向通信,但全雙工通信卻利用兩條線路,一條作發(fā)送數(shù)據(jù)用,另一條作接收數(shù)據(jù)用.
 




圖三  有線固定電話的模型 


二  芯片間通信 

  1.
串口通信:

  機(jī)和主機(jī)之間的通信,實(shí)質(zhì)上就是兩顆芯片之間來回傳輸數(shù)據(jù)..
 


 
圖四  串行接口實(shí)物圖
 
  串口通信是通過全雙工通信進(jìn)行的按位傳輸的通信.它的優(yōu)點(diǎn)是可以長(zhǎng)距離傳輸數(shù)據(jù)(通過太長(zhǎng)的數(shù)據(jù)鏈路時(shí)信號(hào)是會(huì)減小的,但一般我們利用信號(hào)放大來實(shí)現(xiàn)更遠(yuǎn)的數(shù)據(jù)傳輸),占用線路少(發(fā)送線路,接收線路,地線[主要是為了抗干擾]).不過串口通信比并口通信稍微慢些.一般我們使用RS-232 號(hào)傳輸標(biāo)準(zhǔn)來規(guī)范數(shù)據(jù)傳輸.
 



圖五  串口針腳順序圖
 
  對(duì)于DB 9腳的串口接口定義:2號(hào)線路  接收數(shù)據(jù)(RxD),3
號(hào)線路  發(fā)送數(shù)據(jù)(TxD),5號(hào)線路  信號(hào)地(GND) [其用意就是屏蔽掉外界的電磁干擾]

  *RS-232 協(xié)議設(shè)計(jì):
 



圖六  89S51 系列單片機(jī)與PC 間的通信
 
  對(duì)于某些沒有輸出RS-232 信號(hào)的芯片,設(shè)計(jì)者常用MAX 232 (芯片通信輸出的TTL 電平轉(zhuǎn)換到
RS-232 信號(hào)的器件) 來把PC 和該芯片相聯(lián).在圖六中,89S51 首先通過TxD 發(fā)送數(shù)據(jù)到MAX 232 T1IN,然后MAX 232 在它的內(nèi)部把TTL 電平信號(hào)轉(zhuǎn)換為RS-232 信號(hào),最后MAX 232 通過T1OUT 發(fā)送到PC 的COM 接口,此時(shí)PC 就接收到了我們發(fā)送來的數(shù)據(jù)(反過來就是接收數(shù)據(jù):COM TxD ->R1IN ->R1OUT ).關(guān)于單片機(jī)方面的知識(shí)可以上www.查閱.寫得比較容易理解.
 

三  通信協(xié)議
 
  1.以太網(wǎng) 傳輸協(xié)議:

  以太網(wǎng)定義:
當(dāng)前廣泛使用,采用共享總線型傳輸媒體方式的局域網(wǎng).過去的年代,多臺(tái)計(jì)算機(jī)要想利用一個(gè)Moden 上網(wǎng)的話,就需要添加一塊集線器(HUB ) 來把這些計(jì)算機(jī)并聯(lián)起來.[PS:集線器和交換機(jī)(SWITCH) 相比,集線器會(huì)把總網(wǎng)絡(luò)數(shù)據(jù)傳輸速率平均分配到每臺(tái)計(jì)算機(jī),但交換機(jī)卻不會(huì),這和硬件設(shè)計(jì)有關(guān)]
 



圖七  集線器實(shí)物圖(這年頭找張沒有水印的圖片還真少啊..)
 
  下面就是多臺(tái)計(jì)算機(jī)共享網(wǎng)絡(luò)線路的拓?fù)鋱D.

 



圖八  總線型數(shù)據(jù)傳輸鏈路 
 
  線路倒是共享了,作為在線路中的某臺(tái)計(jì)算機(jī)是怎么知道線路中的數(shù)據(jù)到底是發(fā)送到自己還是發(fā)送到其它計(jì)算機(jī)的呢?為此人們制定了以太網(wǎng)數(shù)據(jù)傳輸協(xié)議,下圖是傳輸數(shù)據(jù)結(jié)構(gòu).
 




圖九  以太網(wǎng)數(shù)據(jù)傳輸結(jié)構(gòu) 
 
  目的地址 指的是該數(shù)據(jù)是由哪臺(tái)計(jì)算機(jī)接收.源地址 就是這個(gè)數(shù)據(jù)是從哪兒發(fā)送的.打個(gè)比方:比如A 主機(jī)需要發(fā)送數(shù)據(jù)到廣域網(wǎng),那這個(gè)目的地址就填寫集線器的網(wǎng)絡(luò)適配器的地址(這個(gè)地址就做MAC 
地址,它是網(wǎng)絡(luò)適配器所擁有的唯一地址). 當(dāng)集線器接收到數(shù)據(jù)并轉(zhuǎn)發(fā)B 主機(jī)時(shí),總線上所有主機(jī)都可以接收都這個(gè)數(shù)據(jù)包,假設(shè)A 主機(jī)接收到這個(gè)數(shù)據(jù)包,它會(huì)把數(shù)據(jù)包中的目的地址和自己的網(wǎng)絡(luò)適配器作對(duì)比,相同的話則表明這個(gè)數(shù)據(jù)是傳遞到我的,若不相同則丟棄數(shù)據(jù)包.這也就解釋了同集線器總線下監(jiān)聽其它主機(jī)發(fā)送/接收網(wǎng)絡(luò)信息的原理.
 
  以太網(wǎng)數(shù)據(jù)包有許多不同的類型,上面是在集線器下常用的三個(gè)類型:IP 數(shù)據(jù)傳輸[0x0800],ARP 請(qǐng)求/應(yīng)答[0x0806],RARP 請(qǐng)求/應(yīng)答[0x8035].

  ARP 請(qǐng)求/應(yīng)答:它的用處是利用某個(gè)網(wǎng)絡(luò)適配器的地址在總線中發(fā)起詢問,然后得到要查詢的網(wǎng)絡(luò)適配器的IP 地址.由于在計(jì)算機(jī)需要依靠集線器或交換機(jī)或路由器來傳遞消息之前,它一定要利用ARP 請(qǐng)求告訴集線器等轉(zhuǎn)遞消息硬件本機(jī)的網(wǎng)絡(luò)適配器的MAC 地址[PS:也可以利用RIP (
路由信息協(xié)議)協(xié)議來向轉(zhuǎn)遞消息硬件獲取IP地址(發(fā)送網(wǎng)絡(luò)適配器的MAC 地址獲取IP 地址)].在轉(zhuǎn)遞消息硬件接收到這個(gè)請(qǐng)求后會(huì)在ARP 緩存表(對(duì)應(yīng)著計(jì)算機(jī)的IP地址和網(wǎng)絡(luò)適配器的MAC 地址)中查找,若無該MAC 地址,則在ARP 緩存表更新該MAC 地址,然后發(fā)送ARP 應(yīng)答數(shù)據(jù)包,那么當(dāng)轉(zhuǎn)遞消息硬件接收到消息后就可以根據(jù)數(shù)據(jù)中的IP 地址在ARP 緩存表尋找MAC 地址然后就在總線上發(fā)送.假如接收到一個(gè)數(shù)據(jù)包的的IP 地址在ARP 緩存表中找不到的話,那轉(zhuǎn)遞消息硬件將會(huì)丟棄該數(shù)據(jù)包并向源IP 地址發(fā)送ICMP 數(shù)據(jù)不可到達(dá)的數(shù)據(jù)包.注意,轉(zhuǎn)遞消息硬件一般是三十分鐘刷新一次ARP 緩存表的.

  RARP 請(qǐng)求/應(yīng)答:假如我們只知道同集線器下的某臺(tái)計(jì)算機(jī)的IP 地址并想發(fā)送數(shù)據(jù)給它但又沒有該計(jì)算機(jī)的網(wǎng)絡(luò)適配器的MAC 地址那怎么辦呢?那就需要向總線廣播RARP (
反向地址轉(zhuǎn)換協(xié)議)請(qǐng)求,此時(shí)以太網(wǎng)數(shù)據(jù)結(jié)構(gòu)中的目的地址置為FFFFFFFFFFFF (即:-1),RARP 數(shù)據(jù)包結(jié)構(gòu)(見圖十三)中的目的IP 地址則置為需要查詢的IP 地址.接下來,當(dāng)總線下的某臺(tái)計(jì)算機(jī)的網(wǎng)絡(luò)適配器接收到后就會(huì)把該IP 和自己的對(duì)比,假若查詢的是自己的IP 地址,那就返回包含這個(gè)網(wǎng)絡(luò)適配器的IP 地址和MAC 地址的RARP 應(yīng)答,最后查詢主機(jī)接收到該數(shù)據(jù)包后就更新本機(jī)的ARP 緩存表,然后就可以進(jìn)行IP 層的數(shù)據(jù)發(fā)送了.
 

圖十  ARP /RARP 數(shù)據(jù)包結(jié)構(gòu) 

  2.IP 協(xié)議:

  由于以太網(wǎng)協(xié)議只適用于局域網(wǎng),而且以太網(wǎng)數(shù)據(jù)不能
轉(zhuǎn)遞消息硬件發(fā)送,所以人們制定了IP (Internet Protocol ,因特網(wǎng)協(xié)議)協(xié)議.有了它,只要計(jì)算機(jī)連接到因特網(wǎng)那它都可以利用IP 地址(就像手機(jī)號(hào)碼) 來實(shí)現(xiàn)通信(就像手機(jī)利用GSM 協(xié)議打電話).下面就是IP 協(xié)議數(shù)據(jù)包結(jié)構(gòu):


圖十一  IP 協(xié)議頭部數(shù)據(jù)包結(jié)構(gòu)

  源IP 地址和目的IP 地址的意思和以太網(wǎng)數(shù)據(jù)包結(jié)構(gòu)中的源地址和目的地址作用相同.
(這里略去了其它TCP 特性,因?yàn)樗鼈兣c本文無關(guān))

  讀者們先來看看下面的網(wǎng)絡(luò)拓?fù)鋱D:

 

圖十二  網(wǎng)絡(luò)門禁系統(tǒng)的網(wǎng)絡(luò)
拓?fù)鋱D  

  在每一個(gè)門禁控制系統(tǒng)里面都有主控制器.而這些主控制器利用以太網(wǎng)通過交換機(jī)來實(shí)現(xiàn)把數(shù)據(jù)傳遞到因特網(wǎng)(Internet )上.由于以太網(wǎng)傳輸協(xié)議只能使用在同一以太網(wǎng)下,所以這些數(shù)據(jù)是不可能傳遞到這個(gè)區(qū)域的外面的.你可以這樣想一下:廣州分廠的其中一個(gè)門禁控制系統(tǒng)的主控制器向它所屬的以太網(wǎng)發(fā)送一條信息給上海分廠的管理電腦及卡證中心主機(jī)顯然是不行的.而IP 協(xié)議卻不同,IP (Internet Protocol ) 協(xié)議適合所有只要連接到因特網(wǎng)而且還擁有其獨(dú)立的IP 地址的主機(jī).所以,當(dāng)
廣州分廠的其中一個(gè)門禁控制系統(tǒng)要和上海分廠的管理電腦及卡證中心主機(jī)實(shí)現(xiàn)數(shù)據(jù)交換那就必須要知道該主機(jī)的IP 地址.有了它,系統(tǒng)會(huì)根據(jù)實(shí)際情況把IP 協(xié)議頭部數(shù)據(jù)包的各個(gè)數(shù)據(jù)填充好,然后通過以太網(wǎng)指定發(fā)送到交換機(jī).交換機(jī)會(huì)再把我們的數(shù)據(jù)包轉(zhuǎn)發(fā)到因特網(wǎng)上,接下來這個(gè)數(shù)據(jù)包會(huì)到達(dá)上海分廠的交換機(jī), 最后上海分廠的交換機(jī)通過以太網(wǎng)發(fā)送數(shù)據(jù)包到管理電腦及卡證中心主機(jī).
 
  以IP 協(xié)議為基礎(chǔ),我們還可以利用TCP 和UDP 的傳輸數(shù)據(jù)方式來實(shí)現(xiàn)數(shù)據(jù)的傳輸.一般地,TCP 會(huì)提供"無差別","可靠的" 的數(shù)據(jù)傳輸服務(wù).
 

  3.TCP 協(xié)議:

  TCP 協(xié)議作為現(xiàn)在廣泛使用的協(xié)議,它有著許多網(wǎng)絡(luò)通信協(xié)議所沒有的特性(比如:重傳).TCP 協(xié)議是基于IP 協(xié)議上開發(fā)的.下面先來討論TCP 的數(shù)據(jù)包結(jié)構(gòu):




圖十三  TCP 
協(xié)議頭部數(shù)據(jù)結(jié)構(gòu) 

  TCP 協(xié)議并沒有指定發(fā)送方/接收方的地址,因?yàn)樗且訧P 協(xié)議作為基礎(chǔ)的協(xié)議,所以IP 協(xié)議的地址也可以說是TCP 協(xié)議的地址.在TCP 協(xié)議頭部數(shù)據(jù)結(jié)構(gòu)里,有一個(gè)新名詞叫"端口"
,它的用意是為了標(biāo)識(shí)不同的程序接收不同的數(shù)據(jù)包,比如:80 端口發(fā)送/接收HTTP 協(xié)議數(shù)據(jù)包,21 端口實(shí)現(xiàn)TELNET 協(xié)議 等.TCP 協(xié)議的傳輸機(jī)制是比較特殊的,它首先需要兩臺(tái)主機(jī)之間建立通信連接,然后才可以傳輸數(shù)據(jù),最后數(shù)據(jù)傳輸完成的時(shí)候還必須要對(duì)這個(gè)連接進(jìn)行關(guān)閉.先看看下面是TCP 的通信流程圖:
 



圖十三  TCP 協(xié)議通信連接與關(guān)閉連接時(shí)數(shù)據(jù)包傳送情況(由于源圖被畫了很多紅圈,沒辦法啊只能搶救成這樣,原諒LC 吧) 
 
   對(duì)于上面的數(shù)據(jù)包交換我們可以分為兩部分來分析:前三個(gè)數(shù)據(jù)包表示的意思是建立TCP 連接,后四個(gè)數(shù)據(jù)包的意思是關(guān)閉TCP 連接.

  在TCP 建立連接的時(shí)候,主動(dòng)建立的一方將會(huì)發(fā)送SYN_SENT 類型的TCP 數(shù)據(jù)包到目的主機(jī),目的主機(jī)處理完成這個(gè)連接請(qǐng)求后立即返回SYN_ACK 類型的TCP 數(shù)據(jù)包(
編者注:無論目的主機(jī)是否愿意和它建立連接,要想實(shí)現(xiàn)這個(gè)結(jié)構(gòu)那就必須忽略防火墻等的外界影響條件),最后在主動(dòng)建立的一方接收到該SYN_ACK 數(shù)據(jù)包后返回ACK 數(shù)據(jù)包,它也就代表了TCP 連接真正建立成功.這就是TCP 三次握手過程.

  兩臺(tái)主機(jī)之間的數(shù)據(jù)傳輸結(jié)束了,那就要關(guān)閉連接.當(dāng)一方主動(dòng)關(guān)閉連接時(shí),它將會(huì)發(fā)送FIN 數(shù)據(jù)包來通告對(duì)方.對(duì)方接收FIN 數(shù)據(jù)包后就會(huì)返回FIN_ACK 數(shù)據(jù)包來確認(rèn).(編者注:凡是已經(jīng)主動(dòng)發(fā)送過FIN 數(shù)據(jù)包的主機(jī)都不能夠再發(fā)送任何數(shù)據(jù),但可以接收數(shù)據(jù))只有雙方都各自都完成了發(fā)送FIN 數(shù)據(jù)包,那么TCP 連接也就關(guān)閉了.這就是TCP 的四次握手過程.

  發(fā)送數(shù)據(jù)和這些差不多,有興趣的讀者可以看看<<TCP/IP 協(xié)議詳解>> 或者給LCatro 留個(gè)言.
 

  4.小總結(jié): 

  數(shù)據(jù)包的結(jié)構(gòu)搞亂了?請(qǐng)看看下圖吧..
 




圖十四  網(wǎng)絡(luò)數(shù)據(jù)包結(jié)構(gòu)

  由于我們?cè)谝蕴W(wǎng)下利用以太網(wǎng)協(xié)議發(fā)送數(shù)據(jù),所以我們的要發(fā)送到目的主機(jī)的數(shù)據(jù)就包含在以太網(wǎng)數(shù)據(jù)包的數(shù)據(jù)里面.對(duì)于這個(gè)數(shù)據(jù),實(shí)際上是IP 數(shù)據(jù)包,然而IP 數(shù)據(jù)包里面的數(shù)據(jù)其實(shí)是TCP 數(shù)據(jù)包,TCP 數(shù)據(jù)包里面的數(shù)據(jù)就是我們要發(fā)送的信息.所以讀者們結(jié)合上圖來理解網(wǎng)絡(luò)數(shù)據(jù)包結(jié)構(gòu)(右邊)就容易了..

  至于左邊的結(jié)構(gòu)圖的意思是網(wǎng)絡(luò)模型,它代表了哪個(gè)協(xié)議所在哪一個(gè)網(wǎng)絡(luò)模型層的級(jí)別.


四  網(wǎng)絡(luò)適配器(網(wǎng)卡)原理:

  1.什么是網(wǎng)絡(luò)適配器:

  
網(wǎng)絡(luò)適配器的意義在于協(xié)助計(jì)算機(jī)處理器來實(shí)現(xiàn)數(shù)據(jù)的傳輸.
 
  下面是實(shí)物圖片,這個(gè)
網(wǎng)絡(luò)適配器是臺(tái)式計(jì)算機(jī)使用的.
 



圖十五  
網(wǎng)絡(luò)適配器實(shí)物圖 

  由于現(xiàn)代計(jì)算機(jī)發(fā)展迅速,導(dǎo)致網(wǎng)絡(luò)服務(wù)器數(shù)據(jù)傳輸速度有些時(shí)候并不能滿足日益增長(zhǎng)的需求.為此,雙端口
網(wǎng)絡(luò)適配器誕生了,也即是說同一個(gè)網(wǎng)絡(luò)適配器可以連接兩條網(wǎng)線.如果讀者想更深入了解請(qǐng)到:http://www.doc88.com/p-374664665354.html (HP CN1000E雙端口聚合網(wǎng)絡(luò)適配器 - 產(chǎn)品簡(jiǎn)介)
 



圖十六  
雙端口聚合網(wǎng)絡(luò)適配器

  *網(wǎng)絡(luò)適配器的普通模式和混雜模式:

  
一般情況下,我們都使用網(wǎng)絡(luò)適配器的普通模式.所謂普通模式,其實(shí)是讓網(wǎng)絡(luò)適配器只接收發(fā)送到自己的數(shù)據(jù)包.但混雜模式卻與此相反,凡是網(wǎng)絡(luò)適配器接收到數(shù)據(jù)包就傳遞給處理器,無論這個(gè)數(shù)據(jù)包是不是發(fā)送該主機(jī)的.

  *關(guān)于
網(wǎng)絡(luò)適配器的混雜模式

  由于數(shù)據(jù)的傳輸都是按照一定的標(biāo)準(zhǔn)的,那么只要有多臺(tái)主機(jī)在同一以太網(wǎng)下,其中一臺(tái)主機(jī)就可以利用混雜模式來獲取其它計(jì)算機(jī)發(fā)送/接收的數(shù)據(jù)包.(請(qǐng)回顧下:"
圖八  總線型數(shù)據(jù)傳輸鏈路",在總線下傳輸?shù)臄?shù)據(jù)各個(gè)主機(jī)都可以接收到)所以這就是局域網(wǎng)下監(jiān)聽其它計(jì)算機(jī)的原理.同樣地,我們也可以利用此原理去盜取用戶賬號(hào)和密碼等敏感信息.但在盜取成功之前還需要一個(gè)前提:數(shù)據(jù)的解密.
 
五  Windows 驅(qū)動(dòng)層:

  1.WinSock 函數(shù)庫(kù):

  WinSock 是Windows 自帶的與網(wǎng)絡(luò)交互的運(yùn)行庫(kù).在此,程序員們利用一些相關(guān)的接口就可以實(shí)現(xiàn)端口綁定,TCP 連接,關(guān)閉,發(fā)送,接收數(shù)據(jù)等功能.請(qǐng)注意,WinSock 只是網(wǎng)絡(luò)接口,更準(zhǔn)確地來講就是DLL 文件(
Dynamic Link Library ,動(dòng)態(tài)鏈接庫(kù).它是用來儲(chǔ)存代碼或者資源數(shù)據(jù)的文件,詳情請(qǐng)看:http://baike.baidu.com/view/887.htm?fromId=4373 動(dòng)態(tài)鏈接庫(kù) - 百度百科).所以WinSock 也只是通過調(diào)用驅(qū)動(dòng)程序(驅(qū)動(dòng)程序的用意是讓處理器控制外圍硬件)的方式來編寫接口.接下來,你將會(huì)看到從網(wǎng)絡(luò)適配器接收的數(shù)據(jù)需要經(jīng)過多少個(gè)驅(qū)動(dòng)才可以到達(dá)WinSock.DLL .

  2.網(wǎng)絡(luò)適配器遞交數(shù)據(jù)需要經(jīng)過的驅(qū)動(dòng):

  在看
內(nèi)核網(wǎng)絡(luò)驅(qū)動(dòng)程序結(jié)構(gòu)之前,我們首先要知道:

  1.WinSock.DLL 其實(shí)是在TDI (
Transport Driver Interface ,傳輸驅(qū)動(dòng)程序接口.它的用意是把從上往下/從下往上 傳遞的驅(qū)動(dòng)程序I/O 請(qǐng)求數(shù)據(jù)結(jié)構(gòu)逐級(jí)搬運(yùn).在數(shù)據(jù)搬運(yùn)的過程中,中間驅(qū)動(dòng)程序可以對(duì)這些數(shù)據(jù)進(jìn)行過濾)層上的.

  2.Protocol Driver ,協(xié)議驅(qū)動(dòng)程序.每個(gè)協(xié)議驅(qū)動(dòng)程序都代表著不同的網(wǎng)絡(luò)協(xié)議(編者注:Winpcap 和NDISUIO 不是網(wǎng)絡(luò)協(xié)議驅(qū)動(dòng)程序.前者是Windows 網(wǎng)絡(luò)底層抓包驅(qū)動(dòng)程序.后者是控制NDIS 驅(qū)動(dòng)程序I/O 的驅(qū)動(dòng)程序)

  3.HAL 是硬件抽象層(詳細(xì)請(qǐng)見:http://baike.baidu.com/view/1166796.htm HAL - 百度百科).當(dāng)驅(qū)動(dòng)程序的I/O 請(qǐng)求數(shù)據(jù)結(jié)構(gòu)傳輸?shù)酱藭r(shí),接下來就是處理器通過總線來控制外圍硬件. 




圖十七   Windows 系統(tǒng)內(nèi)核網(wǎng)絡(luò)驅(qū)動(dòng)程序結(jié)構(gòu)

  在普通程序調(diào)用WinSock.DLL 發(fā)送TCP 連接請(qǐng)求時(shí),WinSock.DLL 會(huì)自動(dòng)填寫好該請(qǐng)求數(shù)據(jù)包的IP 及TCP 數(shù)據(jù)包頭部結(jié)構(gòu).然后向下層驅(qū)動(dòng)程序傳遞,直到TCP/IP 驅(qū)動(dòng)程序.TCP/IP 驅(qū)動(dòng)程序再轉(zhuǎn)發(fā)到NDIS (
Network Driver Interface Specification ,網(wǎng)絡(luò)適配器驅(qū)動(dòng)程序),最后通過HAL 實(shí)現(xiàn)把TCP 連接請(qǐng)求數(shù)據(jù)包從處理器發(fā)送到網(wǎng)絡(luò)適配器.接下來網(wǎng)絡(luò)適配器會(huì)通過網(wǎng)線發(fā)送到以太網(wǎng).接收數(shù)據(jù)與此相反,略之.

六  在一次瀏覽www.baidu.com 中系統(tǒng)工作的過程

  至此,相信讀者們已經(jīng)對(duì)于硬件間數(shù)據(jù)傳輸,網(wǎng)絡(luò)協(xié)議,Windows 
系統(tǒng)內(nèi)核網(wǎng)絡(luò)驅(qū)動(dòng)程序結(jié)構(gòu) 都有了一定的了解.那LCatro 就和大家分析下瀏覽百度首頁(yè)的過程吧.
 

 

  假設(shè)我們剛剛把電腦啟動(dòng)完成,然后立即瀏覽百度首頁(yè).(這樣做的用意是提供一個(gè)DNS 緩存表為空的環(huán)境)
 

  


圖十八  使用程序
瀏覽百度首頁(yè)


  在我們輸入www.baidu.com (編者注:www.baidu.com 準(zhǔn)備地來說是網(wǎng)站的域名) 使瀏覽器訪問的時(shí)候,它會(huì)先把域名轉(zhuǎn)換到IP 地址(即:解析,用gethostbyname() 函數(shù)實(shí)現(xiàn)) .此時(shí)WinSock 會(huì)從本地的DNS (用于解析域名和IP 地址的協(xié)議)緩存表(在本機(jī)里面的一張專門存放域名和對(duì)應(yīng)的IP 地址的數(shù)據(jù)塊) 中尋找www.baidu.com 的IP 地址.由于主機(jī)是剛剛啟動(dòng)的,所以DNS 緩存表還是一片空白.WinSock 從DNS 緩存表中找不到對(duì)應(yīng)的IP 地址,于是就向DNS 服務(wù)器發(fā)送查詢域名請(qǐng)求(即:DNS 指針查詢).DNS 服務(wù)器接收到該請(qǐng)求后會(huì)在本地查詢?cè)撚蛎?假如該DNS 服務(wù)器沒有該域名和對(duì)應(yīng)的IP 地址的話,那該DNS 服務(wù)器便會(huì)向比它更高級(jí)的DNS 服務(wù)器提交查詢,一直到查詢結(jié)果得到為止.成功則返回查詢成功數(shù)據(jù)包,如果還是查詢不到的話DNS 服務(wù)器會(huì)返回查詢失敗數(shù)據(jù)包.  [該過程為域名轉(zhuǎn)換到IP 過程,用專業(yè)的語(yǔ)言來說就是:域名解析過程]

  有了IP 地址,瀏覽器就向它發(fā)送TCP 連接請(qǐng)求,接下來就是三次握手過程.連接成功建立后,瀏覽器會(huì)向百度的服務(wù)器發(fā)送獲取http://www.baidu.com/index.html (編者注:www.baidu.com/index.html 的意思是百度首頁(yè)的index 索引網(wǎng)頁(yè)的.HTML 文件(網(wǎng)頁(yè)代碼文件))的源代碼.隨后,百度服務(wù)器返回索引網(wǎng)頁(yè)的源代碼,并且主動(dòng)關(guān)閉TCP 連接.最后瀏覽器便根據(jù)這里面的源代碼逐一顯示在程序的網(wǎng)頁(yè)瀏覽控件上.

  思考題:請(qǐng)你聯(lián)系該文章所講述到的知識(shí)認(rèn)真地想一想系統(tǒng)是怎么樣去一步步實(shí)現(xiàn)的呢?



  與主題無關(guān)的相關(guān)知識(shí):

  *程序啟動(dòng)過程:

  在我們雙擊程序時(shí),Explorer.exe 會(huì)調(diào)用CreateProcess() 運(yùn)行該程序.CreateProcess() 立即讀取程序文件(即: .EXE 文件) 的PE (PreInstallation Environment ,預(yù)安裝環(huán)境.這個(gè)是Windows 特有的程序結(jié)構(gòu),它的用意是告訴Windows 系統(tǒng)在運(yùn)行程序之前需要先做哪些東西.詳細(xì)請(qǐng)見:http://baike.baidu.com/view/3326.htm?fromId=8358 Windows PE 結(jié)構(gòu) - 百度百科) 結(jié)構(gòu),Windows 系統(tǒng)會(huì)根據(jù).EXE 的需求先做一些相關(guān)的工作,比如:程序需要加載到哪一個(gè)內(nèi)存位置?程序代碼的入口點(diǎn)在哪兒?系統(tǒng)加載完成后,就將這個(gè)程序從硬盤中把程序文件映射到內(nèi)存中 (內(nèi)存映射).接下來CreateProcess() 會(huì)給該程序分配堆棧,最后再創(chuàng)建線程來執(zhí)行該程序.假如我們運(yùn)行的是.INK 文件(即:快捷方式),Explorer.exe 會(huì)解析.INK 文件,從中獲取到目的程序的運(yùn)行路徑.

  *VB 程序運(yùn)行細(xì)節(jié):

  由于VB 程序在設(shè)計(jì)窗口界面的時(shí)候完全使開發(fā)者避免怎么樣用代碼把控件一個(gè)個(gè)創(chuàng)建.讀者們可以聯(lián)系下Win32 窗口程序的開發(fā).首先,在WinMain() (即:Win32 應(yīng)用程序入口點(diǎn)) 的時(shí)候程序就開始注冊(cè)->創(chuàng)建窗口了.在創(chuàng)建窗口完成后(注意,此時(shí)窗口只是空白的!),Windows 系統(tǒng)會(huì)向該窗口發(fā)送WM_PRINT 消息通告窗口開始畫控件.

  Q:既然說剛剛創(chuàng)建窗口的時(shí)候是空白的,那為什么我們沒有先看到空白的窗口再看到程序一步步在窗口上面畫控件呢?
  A:因?yàn)樘幚砥鲌?zhí)行代碼的速度太快了,所以它在繪畫的過程中只使用了非常短的時(shí)間,以至于人類的眼晴不能接收到這些圖像.

  *內(nèi)核處理按鍵過程:

  在我們輸入完成網(wǎng)址后按下鍵盤的Enter 鍵,鍵盤會(huì)主動(dòng)向處理器引發(fā)中斷事件.由于計(jì)算機(jī)系統(tǒng)中中斷種類太多,而且對(duì)于不同的中斷有不同的處理方法,于是人們把各個(gè)不同的中斷處理程序的入口地址儲(chǔ)存在中斷程序入口表.這是鍵盤所引發(fā)的中斷,那處理器接收到這個(gè)中斷的時(shí)候立即跳出當(dāng)前正在運(yùn)行的程序,轉(zhuǎn)而去運(yùn)行鍵盤中斷程序,當(dāng)鍵盤中斷程序執(zhí)行結(jié)束后,處理會(huì)繼續(xù)執(zhí)行原先的暫停運(yùn)行的代碼.

  這個(gè)被按下的按鍵在處理器里面是用ASCII 碼來保存的,并且它也會(huì)從最底層驅(qū)動(dòng)一直上傳到應(yīng)用程序.應(yīng)用程序是通過系統(tǒng)發(fā)來的WM_KEYDOWN 消息然后來獲取按下的鍵值的.
 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多