親們,無論您是否閱讀完該文章,LC 懇請(qǐng)您們告訴他這文章寫的哪兒好哪兒不好, 會(huì)有禮物送哦.. -- LCatro 一 單工/半雙工/全雙工 通信的概念 1.單工通信: 單工通信定義:信息在兩點(diǎn)之間只能單方向發(fā)送的工作方式.它的意思是指:假設(shè)A 和B 通信,只能由一方向另一方發(fā)送數(shù)據(jù)而不能接收來自另一方發(fā)送來的數(shù)據(jù).就像小朋友們玩的聽筒,在兩個(gè)杯子之間系上一條線再拉緊,這就可以對(duì)著杯子說話而另一邊能夠聽到聲音. 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ù). 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ù).. 串口通信是通過全雙工通信進(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ì): 對(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)] 下面就是多臺(tái)計(jì)算機(jī)共享網(wǎng)絡(luò)線路的拓?fù)鋱D. 線路倒是共享了,作為在線路中的某臺(tái)計(jì)算機(jī)是怎么知道線路中的數(shù)據(jù)到底是發(fā)送到自己還是發(fā)送到其它計(jì)算機(jī)的呢?為此人們制定了以太網(wǎng)數(shù)據(jù)傳輸協(xié)議,下圖是傳輸數(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ā)送了. 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: 在每一個(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é)議并沒有指定發(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 的通信流程圖: 對(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)看看下圖吧.. 由于我們?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ī)使用的. 由于現(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ò)適配器的普通模式.所謂普通模式,其實(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í),接下來就是處理器通過總線來控制外圍硬件. 在普通程序調(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)境)
|
|