久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

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

作者:LCatro   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年12月14日   【字體:
親們,無論您是否閱讀完該文章,LC 懇請您們告訴他這文章寫的哪兒好哪兒不好, 會有禮物送哦..        --  LCatro

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

  1.單工通信:

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

 



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

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




圖二  "對講機(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)是可以長距離傳輸數(shù)據(jù)(通過太長的數(shù)據(jù)鏈路時(shí)信號是會減小的,但一般我們利用信號放大來實(shí)現(xiàn)更遠(yuǎn)的數(shù)據(jù)傳輸),占用線路少(發(fā)送線路,接收線路,地線[主要是為了抗干擾]).不過串口通信比并口通信稍微慢些.一般我們使用RS-232 號傳輸標(biāo)準(zhǔn)來規(guī)范數(shù)據(jù)傳輸.
 



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

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



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

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

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



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

 



圖八  總線型數(shù)據(jù)傳輸鏈路 
 
  線路倒是共享了,作為在線路中的某臺計(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ù)是由哪臺計(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ù)包,它會把數(shù)據(jù)包中的目的地址和自己的網(wǎng)絡(luò)適配器作對比,相同的話則表明這個(gè)數(shù)據(jù)是傳遞到我的,若不相同則丟棄數(shù)據(jù)包.這也就解釋了同集線器總線下監(jiān)聽其它主機(jī)發(fā)送/接收網(wǎng)絡(luò)信息的原理.
 
  以太網(wǎng)數(shù)據(jù)包有許多不同的類型,上面是在集線器下常用的三個(gè)類型:IP 數(shù)據(jù)傳輸[0x0800],ARP 請求/應(yīng)答[0x0806],RARP 請求/應(yīng)答[0x8035].

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

  RARP 請求/應(yīng)答:假如我們只知道同集線器下的某臺計(jì)算機(jī)的IP 地址并想發(fā)送數(shù)據(jù)給它但又沒有該計(jì)算機(jī)的網(wǎng)絡(luò)適配器的MAC 地址那怎么辦呢?那就需要向總線廣播RARP (
反向地址轉(zhuǎn)換協(xié)議)請求,此時(shí)以太網(wǎng)數(shù)據(jù)結(jié)構(gòu)中的目的地址置為FFFFFFFFFFFF (即:-1),RARP 數(shù)據(jù)包結(jié)構(gòu)(見圖十三)中的目的IP 地址則置為需要查詢的IP 地址.接下來,當(dāng)總線下的某臺計(jì)算機(jī)的網(wǎng)絡(luò)適配器接收到后就會把該IP 和自己的對比,假若查詢的是自己的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ī)號碼) 來實(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)會根據(jù)實(shí)際情況把IP 協(xié)議頭部數(shù)據(jù)包的各個(gè)數(shù)據(jù)填充好,然后通過以太網(wǎng)指定發(fā)送到交換機(jī).交換機(jī)會再把我們的數(shù)據(jù)包轉(zhuǎn)發(fā)到因特網(wǎng)上,接下來這個(gè)數(shù)據(jù)包會到達(dá)上海分廠的交換機(jī), 最后上海分廠的交換機(jī)通過以太網(wǎng)發(fā)送數(shù)據(jù)包到管理電腦及卡證中心主機(jī).
 
  以IP 協(xié)議為基礎(chǔ),我們還可以利用TCP 和UDP 的傳輸數(shù)據(jù)方式來實(shí)現(xiàn)數(shù)據(jù)的傳輸.一般地,TCP 會提供"無差別","可靠的" 的數(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ù)據(jù)包,比如:80 端口發(fā)送/接收HTTP 協(xié)議數(shù)據(jù)包,21 端口實(shí)現(xiàn)TELNET 協(xié)議 等.TCP 協(xié)議的傳輸機(jī)制是比較特殊的,它首先需要兩臺主機(jī)之間建立通信連接,然后才可以傳輸數(shù)據(jù),最后數(shù)據(jù)傳輸完成的時(shí)候還必須要對這個(gè)連接進(jìn)行關(guān)閉.先看看下面是TCP 的通信流程圖:
 



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

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

  兩臺主機(jī)之間的數(shù)據(jù)傳輸結(jié)束了,那就要關(guān)閉連接.當(dāng)一方主動關(guān)閉連接時(shí),它將會發(fā)送FIN 數(shù)據(jù)包來通告對方.對方接收FIN 數(shù)據(jù)包后就會返回FIN_ACK 數(shù)據(jù)包來確認(rèn).(編者注:凡是已經(jī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)搞亂了?請看看下圖吧..
 




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

  由于我們在以太網(wǎng)下利用以太網(wǎng)協(xié)議發(fā)送數(shù)據(jù),所以我們的要發(fā)送到目的主機(jī)的數(shù)據(jù)就包含在以太網(wǎng)數(shù)據(jù)包的數(shù)據(jù)里面.對于這個(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ò)模型層的級別.


四  網(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ò)適配器是臺式計(jì)算機(jī)使用的.
 



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

  由于現(xiàn)代計(jì)算機(jī)發(fā)展迅速,導(dǎo)致網(wǎng)絡(luò)服務(wù)器數(shù)據(jù)傳輸速度有些時(shí)候并不能滿足日益增長的需求.為此,雙端口
網(wǎng)絡(luò)適配器誕生了,也即是說同一個(gè)網(wǎng)絡(luò)適配器可以連接兩條網(wǎng)線.如果讀者想更深入了解請到:http://www.doc88.com/p-374664665354.html (HP CN1000E雙端口聚合網(wǎng)絡(luò)適配器 - 產(chǎ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)的,那么只要有多臺主機(jī)在同一以太網(wǎng)下,其中一臺主機(jī)就可以利用混雜模式來獲取其它計(jì)算機(jī)發(fā)送/接收的數(shù)據(jù)包.(請回顧下:"
圖八  總線型數(shù)據(jù)傳輸鏈路",在總線下傳輸?shù)臄?shù)據(jù)各個(gè)主機(jī)都可以接收到)所以這就是局域網(wǎng)下監(jiān)聽其它計(jì)算機(jī)的原理.同樣地,我們也可以利用此原理去盜取用戶帳號和密碼等敏感信息.但在盜取成功之前還需要一個(gè)前提:數(shù)據(jù)的解密.
 
五  Windows 驅(qū)動層:

  1.WinSock 函數(shù)庫:

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

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

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

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

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

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




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

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

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

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

 

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

  


圖十八  使用程序
瀏覽百度首頁


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

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

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



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

  *程序啟動過程:

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

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

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

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

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

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 中文字幕第一页在线 | 成人av免费播放 | 欧美成人精品激情在线观看 | 在线日韩欧美 | 草久在线| 亚洲91| 精品九九九| 欧美视频一区二区三区 | 日韩色综合 | 久草青青草 | 欧美日韩中文字幕在线播放 | 国产在线观看一区二区 | 久国产视频 | 91xx在线观看 | 亚洲欧美中文日韩在线v日本 | 伊人伊成久久人综合网站 | 欧产日产国产精品国产 | 日操夜操 | 欧美日韩在线综合 | 婷婷色国产偷v国产偷v小说 | 成人在线小视频 | 99精品国自产在线 | av免费成人 | 欧美中文字幕一区二区 | 欧美另类视频在线 | 国产激情亚洲 | 插插宗合网 | 久久久久久久一区二区三区 | 精品一区二区三区在线观看国产 | 国产aⅴ爽av久久久久久久 | 狠狠操狠狠操 | 国产婷婷精品av在线 | 欧美13videosex性极品 | 羞羞的视频在线 | 午夜噜噜噜 | 激情小说综合网 | 午夜在线视频 | 91在线视频免费观看 | av网站免费在线观看 | 精品91| 亚洲一区二区三区久久 |