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

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

深入淺出計算機間通信原理

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

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

  1.單工通信:

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

 



圖一  一個小孩對著罐子說話而另一個小孩在當聽眾 
 
  2.半雙工通信:

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




圖二  "對講機"式問答 

  3.全雙工通信:

  全雙工通信定義:
通信允許數據在兩個方向上同時傳輸,它在能力上相當于兩個單工通信方式的結合.全雙工通信和半雙工通信的本質區別是半雙工通信雙方只共用一條線路實現雙向通信,但全雙工通信卻利用兩條線路,一條作發送數據用,另一條作接收數據用.
 




圖三  有線固定電話的模型 


二  芯片間通信 

  1.
串口通信:

  機和主機之間的通信,實質上就是兩顆芯片之間來回傳輸數據..
 


 
圖四  串行接口實物圖
 
  串口通信是通過全雙工通信進行的按位傳輸的通信.它的優點是可以長距離傳輸數據(通過太長的數據鏈路時信號是會減小的,但一般我們利用信號放大來實現更遠的數據傳輸),占用線路少(發送線路,接收線路,地線[主要是為了抗干擾]).不過串口通信比并口通信稍微慢些.一般我們使用RS-232 號傳輸標準來規范數據傳輸.
 



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

  *RS-232 協議設計:
 



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

三  通信協議
 
  1.以太網 傳輸協議:

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



圖七  集線器實物圖(這年頭找張沒有水印的圖片還真少啊..)
 
  下面就是多臺計算機共享網絡線路的拓撲圖.

 



圖八  總線型數據傳輸鏈路 
 
  線路倒是共享了,作為在線路中的某臺計算機是怎么知道線路中的數據到底是發送到自己還是發送到其它計算機的呢?為此人們制定了以太網數據傳輸協議,下圖是傳輸數據結構.
 




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

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

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

圖十  ARP /RARP 數據包結構 

  2.IP 協議:

  由于以太網協議只適用于局域網,而且以太網數據不能
轉遞消息硬件發送,所以人們制定了IP (Internet Protocol ,因特網協議)協議.有了它,只要計算機連接到因特網那它都可以利用IP 地址(就像手機號碼) 來實現通信(就像手機利用GSM 協議打電話).下面就是IP 協議數據包結構:


圖十一  IP 協議頭部數據包結構

  源IP 地址和目的IP 地址的意思和以太網數據包結構中的源地址和目的地址作用相同.
(這里略去了其它TCP 特性,因為它們與本文無關)

  讀者們先來看看下面的網絡拓撲圖:

 

圖十二  網絡門禁系統的網絡
拓撲圖  

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

  3.TCP 協議:

  TCP 協議作為現在廣泛使用的協議,它有著許多網絡通信協議所沒有的特性(比如:重傳).TCP 協議是基于IP 協議上開發的.下面先來討論TCP 的數據包結構:




圖十三  TCP 
協議頭部數據結構 

  TCP 協議并沒有指定發送方/接收方的地址,因為它是以IP 協議作為基礎的協議,所以IP 協議的地址也可以說是TCP 協議的地址.在TCP 協議頭部數據結構里,有一個新名詞叫"端口"
,它的用意是為了標識不同的程序接收不同的數據包,比如:80 端口發送/接收HTTP 協議數據包,21 端口實現TELNET 協議 等.TCP 協議的傳輸機制是比較特殊的,它首先需要兩臺主機之間建立通信連接,然后才可以傳輸數據,最后數據傳輸完成的時候還必須要對這個連接進行關閉.先看看下面是TCP 的通信流程圖:
 



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

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

  兩臺主機之間的數據傳輸結束了,那就要關閉連接.當一方主動關閉連接時,它將會發送FIN 數據包來通告對方.對方接收FIN 數據包后就會返回FIN_ACK 數據包來確認.(編者注:凡是已經主動發送過FIN 數據包的主機都不能夠再發送任何數據,但可以接收數據)只有雙方都各自都完成了發送FIN 數據包,那么TCP 連接也就關閉了.這就是TCP 的四次握手過程.

  發送數據和這些差不多,有興趣的讀者可以看看<<TCP/IP 協議詳解>> 或者給LCatro 留個言.
 

  4.小總結: 

  數據包的結構搞亂了?請看看下圖吧..
 




圖十四  網絡數據包結構

  由于我們在以太網下利用以太網協議發送數據,所以我們的要發送到目的主機的數據就包含在以太網數據包的數據里面.對于這個數據,實際上是IP 數據包,然而IP 數據包里面的數據其實是TCP 數據包,TCP 數據包里面的數據就是我們要發送的信息.所以讀者們結合上圖來理解網絡數據包結構(右邊)就容易了..

  至于左邊的結構圖的意思是網絡模型,它代表了哪個協議所在哪一個網絡模型層的級別.


四  網絡適配器(網卡)原理:

  1.什么是網絡適配器:

  
網絡適配器的意義在于協助計算機處理器來實現數據的傳輸.
 
  下面是實物圖片,這個
網絡適配器是臺式計算機使用的.
 



圖十五  
網絡適配器實物圖 

  由于現代計算機發展迅速,導致網絡服務器數據傳輸速度有些時候并不能滿足日益增長的需求.為此,雙端口
網絡適配器誕生了,也即是說同一個網絡適配器可以連接兩條網線.如果讀者想更深入了解請到:http://www.doc88.com/p-374664665354.html (HP CN1000E雙端口聚合網絡適配器 - 產品簡介)
 



圖十六  
雙端口聚合網絡適配器

  *網絡適配器的普通模式和混雜模式:

  
一般情況下,我們都使用網絡適配器的普通模式.所謂普通模式,其實是讓網絡適配器只接收發送到自己的數據包.但混雜模式卻與此相反,凡是網絡適配器接收到數據包就傳遞給處理器,無論這個數據包是不是發送該主機的.

  *關于
網絡適配器的混雜模式

  由于數據的傳輸都是按照一定的標準的,那么只要有多臺主機在同一以太網下,其中一臺主機就可以利用混雜模式來獲取其它計算機發送/接收的數據包.(請回顧下:"
圖八  總線型數據傳輸鏈路",在總線下傳輸的數據各個主機都可以接收到)所以這就是局域網下監聽其它計算機的原理.同樣地,我們也可以利用此原理去盜取用戶帳號和密碼等敏感信息.但在盜取成功之前還需要一個前提:數據的解密.
 
五  Windows 驅動層:

  1.WinSock 函數庫:

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

  2.網絡適配器遞交數據需要經過的驅動:

  在看
內核網絡驅動程序結構之前,我們首先要知道:

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

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

  3.HAL 是硬件抽象層(詳細請見:http://baike.baidu.com/view/1166796.htm HAL - 百度百科).當驅動程序的I/O 請求數據結構傳輸到此時,接下來就是處理器通過總線來控制外圍硬件. 




圖十七   Windows 系統內核網絡驅動程序結構

  在普通程序調用WinSock.DLL 發送TCP 連接請求時,WinSock.DLL 會自動填寫好該請求數據包的IP 及TCP 數據包頭部結構.然后向下層驅動程序傳遞,直到TCP/IP 驅動程序.TCP/IP 驅動程序再轉發到NDIS (
Network Driver Interface Specification ,網絡適配器驅動程序),最后通過HAL 實現把TCP 連接請求數據包從處理器發送到網絡適配器.接下來網絡適配器會通過網線發送到以太網.接收數據與此相反,略之.

六  在一次瀏覽www.baidu.com 中系統工作的過程

  至此,相信讀者們已經對于硬件間數據傳輸,網絡協議,Windows 
系統內核網絡驅動程序結構 都有了一定的了解.那LCatro 就和大家分析下瀏覽百度首頁的過程吧.
 

 

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

  


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


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

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

  思考題:請你聯系該文章所講述到的知識認真地想一想系統是怎么樣去一步步實現的呢?



  與主題無關的相關知識:

  *程序啟動過程:

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

  *VB 程序運行細節:

  由于VB 程序在設計窗口界面的時候完全使開發者避免怎么樣用代碼把控件一個個創建.讀者們可以聯系下Win32 窗口程序的開發.首先,在WinMain() (即:Win32 應用程序入口點) 的時候程序就開始注冊->創建窗口了.在創建窗口完成后(注意,此時窗口只是空白的!),Windows 系統會向該窗口發送WM_PRINT 消息通告窗口開始畫控件.

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

  *內核處理按鍵過程:

  在我們輸入完成網址后按下鍵盤的Enter 鍵,鍵盤會主動向處理器引發中斷事件.由于計算機系統中中斷種類太多,而且對于不同的中斷有不同的處理方法,于是人們把各個不同的中斷處理程序的入口地址儲存在中斷程序入口表.這是鍵盤所引發的中斷,那處理器接收到這個中斷的時候立即跳出當前正在運行的程序,轉而去運行鍵盤中斷程序,當鍵盤中斷程序執行結束后,處理會繼續執行原先的暫停運行的代碼.

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

關閉窗口

相關文章

主站蜘蛛池模板: 一区二区三区四区免费在线观看 | 国产精品久久久久久久久久久久 | 国产网站在线免费观看 | 成人免费视频网站在线观看 | 日本爱爱视频 | 99视频久 | 亚洲国产精品久久久久婷婷老年 | 久在草 | 色姑娘av| 天天干天天干 | 欧美区日韩区 | a黄视频 | 精品毛片视频 | 日本精品久久久一区二区三区 | 日韩成年人视频在线 | 免费在线成人 | 精品在线一区 | 日韩免费一区 | 亚洲国产精品久久人人爱 | 黄色一级大片在线观看 | 国产亚洲第一页 | 欧美日韩一区不卡 | 97精品国产一区二区三区 | 日韩午夜在线播放 | 一区二区三区高清 | 欧美日韩国产中文字幕 | 久久草在线视频 | 成人激情视频在线播放 | 久久久久久国产精品 | 日韩欧美不卡 | 日韩一区在线观看视频 | 91小视频在线 | 91爱爱·com | 中文字幕国产精品 | 亚洲成在线观看 | 成人免费片 | 日本精品视频在线 | 91精品国产92 | 日韩欧美一区二区三区免费看 | 欧美一区二区三区在线观看视频 | 亚洲免费网站 |