<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 深入淺出計算機間通信原理

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

          作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏

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

          發(fā)送數(shù)據(jù)和這些差不多,有興趣的讀者可以看看<> 或者給LCatro 留個言.

          4.小總結(jié):

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




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

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

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

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

          網(wǎng)絡(luò)適配器的意義在于協(xié)助計算機處理器來實現(xiàn)數(shù)據(jù)的傳輸.

          下面是實物圖片,這個網(wǎng)絡(luò)適配器是臺式計算機使用的.



          圖十五 網(wǎng)絡(luò)適配器實物圖
          由于現(xiàn)代計算機發(fā)展迅速,導(dǎo)致網(wǎng)絡(luò)服務(wù)器數(shù)據(jù)傳輸速度有些時候并不能滿足日益增長的需求.為此,雙端口網(wǎng)絡(luò)適配器誕生了,也即是說同一個網(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ò)適配器的普通模式.所謂普通模式,其實是讓網(wǎng)絡(luò)適配器只接收發(fā)送到自己的數(shù)據(jù)包.但混雜模式卻與此相反,凡是網(wǎng)絡(luò)適配器接收到數(shù)據(jù)包就傳遞給處理器,無論這個數(shù)據(jù)包是不是發(fā)送該主機的.

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

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

          五 Windows 驅(qū)動層:

          1.WinSock 函數(shù)庫:

          WinSock 是Windows 自帶的與網(wǎng)絡(luò)交互的運行庫.在此,程序員們利用一些相關(guān)的接口就可以實現(xiàn)端口綁定,TCP 連接,關(guān)閉,發(fā)送,接收數(shù)據(jù)等功能.請注意,WinSock 只是網(wǎng)絡(luò)接口,更準確地來講就是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)過多少個驅(qū)動才可以到達WinSock.DLL .

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

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

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

          2.Protocol Driver ,協(xié)議驅(qū)動程序.每個協(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 是硬件抽象層(詳細請見:http://baike.baidu.com/view/1166796.htmHAL - 百度百科).當(dāng)驅(qū)動程序的I/O 請求數(shù)據(jù)結(jié)構(gòu)傳輸?shù)酱藭r,接下來就是處理器通過總線來控制外圍硬件.




          圖十七 Windows 系統(tǒng)內(nèi)核網(wǎng)絡(luò)驅(qū)動程序結(jié)構(gòu)
          在普通程序調(diào)用WinSock.DLL 發(fā)送TCP 連接請求時,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 實現(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è)我們剛剛把電腦啟動完成,然后立即瀏覽百度首頁.(這樣做的用意是提供一個DNS 緩存表為空的環(huán)境)

          本文引用地址:http://www.ex-cimer.com/article/201612/324240.htm



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


          在我們輸入www.baidu.com (編者注:www.baidu.com 準備地來說是網(wǎng)站的域名) 使瀏覽器訪問的時候,它會先把域名轉(zhuǎn)換到IP 地址(即:解析,用gethostbyname() 函數(shù)實現(xiàn)) .此時WinSock 會從本地的DNS (用于解析域名和IP 地址的協(xié)議)緩存表(在本機里面的一張專門存放域名和對應(yīng)的IP 地址的數(shù)據(jù)塊)中尋找www.baidu.com 的IP 地址.由于主機是剛剛啟動的,所以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)系該文章所講述到的知識認真地想一想系統(tǒng)是怎么樣去一步步實現(xiàn)的呢?



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

          *程序啟動過程:

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

          *VB 程序運行細節(jié):

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

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

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

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

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


          上一頁 1 2 3 下一頁

          關(guān)鍵詞: 計算機間通信原

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();