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

          新聞中心

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

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

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


          三 通信協(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 三次握手過程.

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

          評(píng)論


          技術(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); })();