柚子快報邀請碼778899分享:網(wǎng)絡(luò)協(xié)議 Linux
柚子快報邀請碼778899分享:網(wǎng)絡(luò)協(xié)議 Linux
網(wǎng)絡(luò)協(xié)議 數(shù)據(jù)傳輸
發(fā)明計(jì)算機(jī)的目的是為了計(jì)算數(shù)據(jù),結(jié)果有可能自己用,也有可能交給其他人使用,所以就需要多臺計(jì)算機(jī)之間可以互相通信。按照通信距離,計(jì)算機(jī)網(wǎng)絡(luò)大體分為:局域網(wǎng)(LAN)和廣域網(wǎng)(WAN)。如果兩臺計(jì)算機(jī)距離較近,那么直接用一根網(wǎng)線相連即可完成通信。但如果兩臺計(jì)算機(jī)之間的距離較遠(yuǎn),那么在通信的過程中就無法避免的產(chǎn)生如下問題:
一臺計(jì)算機(jī)如何找到另一臺計(jì)算機(jī)數(shù)據(jù)如何發(fā)送,如果有多條路徑,怎么選擇路徑數(shù)據(jù)在傳輸?shù)倪^程中是否會出現(xiàn)丟失
兩臺計(jì)算機(jī)之間通信的關(guān)鍵就要解決上述問題,怎么解決呢?協(xié)議的定制就是為了解決通信過程中遇到的一系列問題。
一.網(wǎng)絡(luò)協(xié)議
1.1 什么是協(xié)議
網(wǎng)絡(luò)協(xié)議為計(jì)算機(jī)網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)交換而建立的規(guī)則、標(biāo)準(zhǔn)或約定的集合。說白了,協(xié)議就是通信雙方的約定,建立協(xié)議是為了減少后期的溝通成本,提高通信效率,解決通信問題。比如購房時簽訂了協(xié)議,有了這份協(xié)議在發(fā)生糾紛時就很容易解決。
在Linux中,協(xié)議就是一個c程序(軟件)。
1.2 協(xié)議分層
怎樣定制協(xié)議才能做到效率最大化呢?眾所周知,在計(jì)算機(jī)科學(xué)領(lǐng)域的任何問題都可以通過增加一個間接的中間層來解決。我們將在計(jì)算機(jī)通信中遇到的問題分類,每一類問題對應(yīng)一層協(xié)議,不同協(xié)議按照順序分為上下層關(guān)系,上層使用下層提供的接口來訪問下層。每一層只需要關(guān)注自己同層的功能;當(dāng)一層協(xié)議出現(xiàn)問題時,不會影響其他層協(xié)議。這樣就做到了高內(nèi)聚低耦合。類比打電話:用戶只認(rèn)為和同層用戶進(jìn)行通信,不管用戶用的什么語言(中文,英語),通信雙方都能聽懂,而手機(jī)也認(rèn)為它和對面的那臺手機(jī)通信,當(dāng)手機(jī)換位電腦,仍然不會影響上層用戶的通信,這就是用戶層和下層功能上的解耦。
1.3 OSI七層協(xié)議模型
七層模型,亦稱OSI(Open System Interconnection)參考模型,是參考模型是國際標(biāo)準(zhǔn)化組織(ISO)制定的一個用于計(jì)算機(jī)或通信系統(tǒng)間互聯(lián)的標(biāo)準(zhǔn)體系。它是一個七層的、抽象的模型,不僅包括一系列抽象的術(shù)語或概念,也包括具體的協(xié)議。由于OSI七層協(xié)議模型比較復(fù)雜,TCP/IP協(xié)議模型在此基礎(chǔ)上誕生。
1.4 TCP/IP協(xié)議模型
TCP/IP(Transmission Control Protocol/Internet Protocol,傳輸控制協(xié)議/網(wǎng)際協(xié)議)是指能夠在多個不同網(wǎng)絡(luò)間實(shí)現(xiàn)信息傳輸?shù)膮f(xié)議簇。TCP/IP協(xié)議不僅僅指的是TCP 和IP兩個協(xié)議,而是指一個由FTP、SMTP、TCP、UDP、IP等協(xié)議構(gòu)成的協(xié)議簇, 只是因?yàn)樵赥CP/IP協(xié)議中TCP協(xié)議和IP協(xié)議最具代表性,所以被稱為TCP/IP協(xié)議。
TCP/IP協(xié)議中的應(yīng)用層里面包含了OSI七層協(xié)議模型中的應(yīng)用層、表示層、會話層上層使用下層提供的接口
應(yīng)用層:負(fù)責(zé)應(yīng)用程序間溝通,如簡單電子郵件傳輸(SMTP)、文件傳輸協(xié)(FTP)、網(wǎng)絡(luò)遠(yuǎn)程訪問協(xié)議(Telnet)等. 我們的網(wǎng)絡(luò)編程主要就是針對應(yīng)用層傳輸層:負(fù)責(zé)兩臺主機(jī)之間的數(shù)據(jù)傳輸. 如傳輸控制協(xié)議 (TCP), 能夠確保數(shù)據(jù)可靠的從源主機(jī)發(fā)送到目標(biāo)主機(jī)網(wǎng)絡(luò)層:負(fù)責(zé)地址管理和路由選擇. 例如在IP協(xié)議中, 通過IP地址來標(biāo)識一臺主機(jī), 并通過路由表的方式規(guī)劃出兩臺主機(jī)之間的數(shù)據(jù)傳輸?shù)木€路(路由). 路由器(Router)工作在網(wǎng)路層數(shù)據(jù)鏈路層:負(fù)責(zé)設(shè)備之間的數(shù)據(jù)幀的傳送和識別. 例如網(wǎng)卡設(shè)備的驅(qū)動、幀同步(就是說從網(wǎng)線上檢測到什么信號算作新幀的開始)、沖突檢測(如果檢測到?jīng)_突就自動重發(fā))、數(shù)據(jù)差錯校驗(yàn)等工作. 有以太網(wǎng)、令牌環(huán)網(wǎng), 無線LAN等標(biāo)準(zhǔn). 交換機(jī)(Switch)工作在數(shù)據(jù)鏈路層物理層:負(fù)責(zé)光/電信號的傳遞方式. 比如現(xiàn)在以太網(wǎng)通用的網(wǎng)線(雙絞線)、早期以太網(wǎng)采用的的同軸電纜(現(xiàn)在主要用于有線電視)、光纖, 現(xiàn)在的wifi無線網(wǎng)使用電磁波等都屬于物理層的概念。物理層的能力決定了最大傳輸速率、傳輸距離、抗干擾性等. 集線器(Hub)工作在物理層
1.5 軟硬件體系結(jié)構(gòu)與TCP/IP
TCP/IP協(xié)議模型在計(jì)算機(jī)系統(tǒng)中的位置,如下圖:應(yīng)用層在用戶層實(shí)現(xiàn),傳輸層和網(wǎng)絡(luò)層在操作系統(tǒng)層實(shí)現(xiàn),數(shù)據(jù)鏈路層在驅(qū)動層實(shí)現(xiàn),物理層在硬件層實(shí)現(xiàn)。數(shù)據(jù)從網(wǎng)絡(luò)中發(fā)來,由網(wǎng)卡接收,然后逐層向上傳遞到應(yīng)用層,由應(yīng)用程序使用數(shù)據(jù)處理任務(wù)。在Linux中**一切皆文件,**因此網(wǎng)卡也可以看作是文件,雖然我們還沒有見到網(wǎng)絡(luò)的接口,但我們可以預(yù)知,應(yīng)用層對于網(wǎng)絡(luò)的訪問,必定要創(chuàng)建文件描述符,然后通過文件描述符讀寫數(shù)據(jù)。那么為什么網(wǎng)絡(luò)單獨(dú)創(chuàng)建了一系列系統(tǒng)調(diào)用接口, 而不是掛接到文件管理呢?前面提到許多操作系統(tǒng)有可能在實(shí)現(xiàn)系統(tǒng)部分有所差異,但是在實(shí)現(xiàn)網(wǎng)絡(luò)部分,它們一定是一樣的,所以操作系統(tǒng)單獨(dú)為網(wǎng)絡(luò)設(shè)計(jì)了一系列系統(tǒng)調(diào)用接口。注意:這里的一致性體現(xiàn)在操作系統(tǒng)層,對于數(shù)據(jù)鏈路層和物理層,取決于硬件廠商。
二.數(shù)據(jù)傳輸
在計(jì)算機(jī)中一切服務(wù)都是以進(jìn)程的方式運(yùn)行的,兩臺計(jì)算機(jī)之間互相通信,本質(zhì)就是兩臺計(jì)算機(jī)上的進(jìn)程在通信。
發(fā)送進(jìn)程:用戶輸入數(shù)據(jù),數(shù)據(jù)自頂向下,逐層傳遞到物理層(網(wǎng)卡),經(jīng)由網(wǎng)卡發(fā)送到網(wǎng)絡(luò)中,待接收進(jìn)程接收接收進(jìn)程:識別到該消息是給自己的,然后數(shù)據(jù)逐層向上傳遞到應(yīng)用層,最后交付給用戶。
2.1 局域網(wǎng)中數(shù)據(jù)的傳輸
有效載荷(數(shù)據(jù))每到一層都要封裝對應(yīng)的協(xié)議報頭,然后向下交付,以待對端接收。數(shù)據(jù)從用戶A出發(fā),逐層向下封裝,然后傳到用戶B的數(shù)據(jù)鏈路層。每層根據(jù)自己的協(xié)議報頭,將報文解包并且將有效載荷向上傳遞給指定協(xié)議。局域網(wǎng)通信原理:以太網(wǎng)一個局域網(wǎng)中可能有多臺計(jì)算機(jī),當(dāng)一臺計(jì)算機(jī)發(fā)送消息時,所有計(jì)算機(jī)都能收到這條消息。當(dāng)發(fā)送方的有效載荷到達(dá)數(shù)據(jù)鏈路層時,數(shù)據(jù)鏈路層的協(xié)議會添加協(xié)議報頭,這個報頭中有目的MAC地址,如果接收方的數(shù)據(jù)鏈路層檢測到該MAC地址不是自己,就會丟棄該數(shù)據(jù)。
抓包工具的原理就是任何數(shù)據(jù)都接收。
一個局域網(wǎng)中,任何時刻都可能有多臺計(jì)算機(jī)發(fā)送消息,這時候多個消息就會形成碰撞,導(dǎo)致消息異常。因此,數(shù)據(jù)鏈路層要保證每個時刻都只有一個人發(fā)消息。
MAC地址
MAC地址用來識別數(shù)據(jù)鏈路層中相連的節(jié)點(diǎn);長度為48位, 及6個字節(jié). 一般用16進(jìn)制數(shù)字加上冒號的形式來表示(例如: 08:00:27:03:fb:19)在網(wǎng)卡出廠時就確定了, 不能修改. mac地址通常是唯一的(虛擬機(jī)中的mac地址不是真實(shí)的mac地址, 可能會沖突; 也有些網(wǎng)卡支持用戶配置mac地址).
2.2 跨一臺路由器的網(wǎng)絡(luò)中數(shù)據(jù)傳輸
路由器:工作在網(wǎng)絡(luò)層的設(shè)備,具備網(wǎng)絡(luò)層以下的所有功能??梢詫⒙酚善骺醋饕粋€主機(jī)(節(jié)點(diǎn))。
在互聯(lián)網(wǎng)中,公網(wǎng)IP地址可以唯一標(biāo)定一個主機(jī)。在網(wǎng)絡(luò)通信中,必須要知道對端IP地址。
IP協(xié)議有兩個版本, IPv4和IPv6。我們主要討論IPv4地址
IP地址是在IP協(xié)議中, 用來標(biāo)識網(wǎng)絡(luò)中不同主機(jī)的地址;對于IPv4來說, IP地址是一個4字節(jié), 32位的整數(shù);我們通常也使用 “點(diǎn)分十進(jìn)制” 的字符串表示IP地址, 例如 192.168.0.1 ; 用點(diǎn)分割的每一個數(shù)字表示一個字節(jié), 范圍是 0 - 255;
當(dāng)發(fā)送方封裝的數(shù)據(jù)到達(dá)網(wǎng)絡(luò)層時,會在網(wǎng)絡(luò)層的路由表中檢測當(dāng)前局域網(wǎng)內(nèi)有無目的IP地址,若沒有,則會在數(shù)據(jù)鏈路層的報頭中,添加路由器的MAC地址,將該數(shù)據(jù)發(fā)送到路由器中,經(jīng)由路由器轉(zhuǎn)發(fā)到其他局域網(wǎng)內(nèi)??梢钥吹?,在不同的局域網(wǎng)中,兩臺主機(jī)仍然可以通信,這是因?yàn)榫W(wǎng)絡(luò)層屏蔽了下層的差異。
柚子快報邀請碼778899分享:網(wǎng)絡(luò)協(xié)議 Linux
精彩鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。