個人主頁:兜里有顆棉花糖
歡迎 點贊?? 收藏? 留言? 加關(guān)注??本文由 兜里有顆棉花糖 原創(chuàng)
收錄于專欄【網(wǎng)絡(luò)編程】【Java系列】
本專欄旨在分享學(xué)習(xí)網(wǎng)絡(luò)編程的一點學(xué)習(xí)心得,歡迎大家在評論區(qū)交流討論??
一、ip地址
ip地址簡單來說就是用來描述網(wǎng)絡(luò)上一個設(shè)備的所在位置。
二、端口號
端口號用于區(qū)分一個主機(jī)上不同的應(yīng)用程序。
一個網(wǎng)絡(luò)程序在啟動的時候都需要綁定一個或多個端口號,后續(xù)的通信過程都需依賴端口來進(jìn)行展開的。
網(wǎng)絡(luò)協(xié)議是網(wǎng)絡(luò)通信(即網(wǎng)絡(luò)數(shù)據(jù)傳輸)經(jīng)過的所有網(wǎng)絡(luò)設(shè)備都必須共同遵從的一組約定、規(guī)則(協(xié)議就只是表示一種約定,然而這種約定可以是任意的),之所以有統(tǒng)一的協(xié)議標(biāo)準(zhǔn)以便大家可以相互通信。
三、協(xié)議分層
網(wǎng)絡(luò)通信是一個非常龐大的工作,其中會涉及到一系列非常繁瑣,非常細(xì)節(jié)的工作,靠一個協(xié)議解決所有問題說明這個協(xié)議非常龐大。因此我們就需要對協(xié)議進(jìn)行分類
(把功能差不多的協(xié)議放到一起)、分層
(上層協(xié)議調(diào)用下層協(xié)議,下次協(xié)議為上層協(xié)議提供支持,以避免跨層級所引起的混亂);另外上層協(xié)議不需要了解下層協(xié)議的細(xì)節(jié)(封裝),我們可以靈活的調(diào)整替換某層協(xié)議。
協(xié)議分層就是為這些協(xié)議明確層級關(guān)系,避免跨層之間的交互,降低耦合,提高整個系統(tǒng)的穩(wěn)定性。
協(xié)議分層有兩種主要的方式:一種方式是OSI七層網(wǎng)絡(luò)模型(目前只是在教科書中提到,在真實世界并沒有對其進(jìn)行應(yīng)用),另一種是TCP/IP五層網(wǎng)絡(luò)模型。
- 物理層:描述網(wǎng)絡(luò)通信中的一些基礎(chǔ)設(shè)施需要遵守的規(guī)范。(比如網(wǎng)口、網(wǎng)線是什么樣的)
- 數(shù)據(jù)鏈庫層:負(fù)責(zé)相鄰兩個節(jié)點的數(shù)據(jù)如何傳輸。
- 網(wǎng)絡(luò)層:負(fù)責(zé)地址管理和路由選擇。
- 傳輸層:管理兩個節(jié)點之間的數(shù)據(jù)傳輸,只關(guān)注起點和終點。
-
應(yīng)用層:簡單來說就是這個數(shù)據(jù)被用來干什么。
- 對于應(yīng)用程序來說:不同的應(yīng)用程序使用不同的協(xié)議(當(dāng)然也能是使用相同的協(xié)議)。
- 傳輸層協(xié)議和網(wǎng)絡(luò)層協(xié)議都是操作系統(tǒng)已經(jīng)內(nèi)置好的。
- 驅(qū)動程序都是硬件廠商提供的,驅(qū)動程序會和系統(tǒng)內(nèi)核進(jìn)行適配,系統(tǒng)就可以進(jìn)一步的通過驅(qū)動來操作硬件了。數(shù)據(jù)鏈路層和物理層一般就是由硬件和驅(qū)動程序搭配來進(jìn)行提供的。
四、封裝和分用
網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)幕玖鞒?/strong>總結(jié)起來就是:封裝和分用。
我們現(xiàn)在通過QQ發(fā)送消息為例來描述網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)幕玖鞒?。?strong>主機(jī)A通過QQ把消息發(fā)送給主機(jī)B:
-
應(yīng)用層方面:首先QQ這個應(yīng)用程序先從輸入框中獲取到輸入的信息,并將其構(gòu)成
應(yīng)用層數(shù)據(jù)報
(當(dāng)然這里是根據(jù)應(yīng)用層協(xié)議去進(jìn)行數(shù)據(jù)報構(gòu)造的,構(gòu)建的應(yīng)用層數(shù)據(jù)報的過程是按照一定的格式進(jìn)行字符串拼接的)。這里我們要知道不同的應(yīng)用程序使用的應(yīng)用層協(xié)議是不同的,而其中很多一部分的應(yīng)用程序會自定義應(yīng)用層協(xié)議。當(dāng)應(yīng)用層數(shù)據(jù)報準(zhǔn)備好之后,應(yīng)用程序就會調(diào)用傳輸層提供的接口,然后把上述的數(shù)據(jù)報交給傳輸層去進(jìn)行處理。 -
傳輸層方面:傳輸層的協(xié)議有很多,最主要的協(xié)議就是TCP和UDP。此處我們這里假設(shè)使用的協(xié)議是UDP。當(dāng)應(yīng)用層把應(yīng)用層的數(shù)據(jù)傳到了傳輸層之后,并交給UDP,UDP會把應(yīng)用層數(shù)據(jù)當(dāng)作一個字符串,并構(gòu)造出UDP數(shù)據(jù)報,然后把UDP數(shù)據(jù)報進(jìn)一步的交給網(wǎng)絡(luò)層。
-
網(wǎng)絡(luò)層方面:網(wǎng)絡(luò)層最主要的協(xié)議就是IP協(xié)議。IP協(xié)議會根據(jù)自己的格式來構(gòu)造出IP數(shù)據(jù)報。IP協(xié)議并不關(guān)心IP數(shù)據(jù)報的載荷是啥,只是單純的把IP數(shù)據(jù)報載荷當(dāng)作一個字符串,在這個基礎(chǔ)上拼接一個IP報頭以獲取更大的字符串。
注意,源ip和目的ip都是在ip報頭中,而源端口和目的端口都是在UDP報頭中
一次通信往往包括這5個信息:源IP、目的IP、源端口、目的端口、協(xié)議類型。此五點稱為網(wǎng)絡(luò)通信的五元組
。
之后對數(shù)據(jù)進(jìn)一步傳輸,即把數(shù)據(jù)傳輸?shù)綌?shù)據(jù)鏈路層。
數(shù)據(jù)鏈路層
:數(shù)據(jù)鏈路層比較重要的協(xié)議就是以太網(wǎng)協(xié)議。以太網(wǎng)(平時上網(wǎng)插入的一個網(wǎng)線,這根網(wǎng)線就遵守以太網(wǎng)協(xié)議)又會針對IP數(shù)據(jù)報進(jìn)行進(jìn)一步的封裝,即在IP數(shù)據(jù)報的基礎(chǔ)上加上數(shù)據(jù)頭
和數(shù)據(jù)尾
。以太網(wǎng)依然不關(guān)心載荷是什么,以太網(wǎng)只是把載荷當(dāng)作字符串,進(jìn)一步的拼接上枕幀頭幀尾以構(gòu)造成以太網(wǎng)數(shù)據(jù)幀
。至此,上述的數(shù)據(jù)還需要交給物理層。
物理層
:物理層這里就涉及到硬件設(shè)備了(比如網(wǎng)卡)。之前的以太網(wǎng)數(shù)據(jù)幀本質(zhì)上是二進(jìn)制的數(shù)據(jù),這個時候硬件設(shè)備就需要對上述的數(shù)據(jù)進(jìn)行轉(zhuǎn)換(由物理層的這些設(shè)備把上述的數(shù)據(jù)轉(zhuǎn)換稱光信號、電信號、電磁波等)
至此,主機(jī)A就完成了發(fā)送過程。即上述的過程是主機(jī)A,即發(fā)送消息方的情況。
現(xiàn)在來看接收方(即主機(jī)B)的情況:
物理層
:硬件設(shè)備(如網(wǎng)卡)接收到光信號、電信號、電磁波。需要把接收到的信號解調(diào)(調(diào)制:就是把我們要傳輸?shù)男畔⒎诺焦怆娦盘栔?/code>;
解調(diào):就是把光電信號中的信息提取出來
;還有一個叫做調(diào)制解調(diào)器【俗稱貓??】,調(diào)制解調(diào)器就是負(fù)責(zé)調(diào)制和解調(diào)的硬件設(shè)備:光貓??就是針對光信號進(jìn)行調(diào)制解調(diào)的
),解調(diào)之后我們就可以得到0101這樣的二進(jìn)制數(shù)據(jù)序列,這個序列就是以太網(wǎng)數(shù)據(jù)幀。此時我們經(jīng)過解調(diào)得到的信息就會交給上一層,即交給數(shù)據(jù)鏈路層。好了,下面來看數(shù)據(jù)鏈路層的方面。數(shù)據(jù)鏈路層
:數(shù)據(jù)鏈路層得到來自硬件設(shè)備解調(diào)出來的信息之后,數(shù)據(jù)鏈路層的以太網(wǎng)協(xié)議就會按照以太網(wǎng)數(shù)據(jù)幀的格式對信息進(jìn)行解析。解析之后,就來到了網(wǎng)絡(luò)層。下面來看網(wǎng)絡(luò)層。
網(wǎng)絡(luò)層
:ip協(xié)議會對從數(shù)據(jù)鏈路層那里得到的數(shù)據(jù)報進(jìn)行解析(去掉ip報頭,取出載荷部分的信息并將其交給傳輸層),好了現(xiàn)在就來到了傳輸層。
傳輸層
:傳輸層會根據(jù)ip報頭中的字段就知道當(dāng)前這個載荷是一個UDP數(shù)據(jù)報,并將該數(shù)據(jù)報交給UDP處理。然后UDP也會針對這個數(shù)據(jù)報進(jìn)行解析(即去掉報頭,取出載荷),然后進(jìn)一步交給應(yīng)用程序。好了,現(xiàn)在來到了應(yīng)用程序?qū)印?/strong>應(yīng)用程序?qū)?/code>:UDP報頭中有一個字段是目的端口,然后根據(jù)目的端口找到關(guān)聯(lián)的應(yīng)用程序,然后把數(shù)據(jù)交給應(yīng)用程序即可。此時QQ程序就會按照QQ的應(yīng)用層協(xié)議對數(shù)據(jù)進(jìn)行解析,進(jìn)一步把這里的數(shù)據(jù)顯示到界面上。更進(jìn)一步的此時我們的QQ頭像就一直進(jìn)行閃爍。
至此,主機(jī)A從上到下依次添加報頭的過程稱為封裝。主機(jī)B從下到上依次解析報頭的過程稱之為分用。每次網(wǎng)絡(luò)數(shù)據(jù)的傳輸都會經(jīng)過封裝和分用這樣的過程。
我們可以簡單理解:封裝就是在打包快遞,而分用就是在拆快遞
。封裝和分用相互配合,就可以完成數(shù)據(jù)的傳輸。上面的描述是針對消息發(fā)送方和消息接收方的進(jìn)行分析的。
然后主機(jī)A和主機(jī)B之間還會有很多交換機(jī)和路由器進(jìn)行轉(zhuǎn)發(fā)。
消息轉(zhuǎn)發(fā)到某個設(shè)備(即中間過程的交換機(jī)和路由器)時,每個設(shè)備的處理流程和上面封裝分用是一樣的
。如果是交換機(jī)的話,交換機(jī)封裝和分用到數(shù)據(jù)鏈路層即可。交換機(jī)解析出以太網(wǎng)數(shù)據(jù)幀之后,就會進(jìn)一步獲取到幀頭中的mac地址(交換機(jī)通過在以太網(wǎng)數(shù)據(jù)幀中查找目標(biāo)MAC地址來實現(xiàn)數(shù)據(jù)的轉(zhuǎn)發(fā)),然后根據(jù)mac地址查詢到交換機(jī)內(nèi)部的轉(zhuǎn)發(fā)表,然后接下來決定數(shù)據(jù)從哪個網(wǎng)口發(fā)出,在發(fā)送之前又會把以太網(wǎng)數(shù)據(jù)幀封裝好。
(我們舉個栗子來更好的理解交換機(jī)這里,比如我們拿到一個快遞之后,打開快遞盒子并查看其中的標(biāo)簽以便我們可以知道這個快遞發(fā)往哪里,之后我們得知快遞發(fā)往哪里之后我們把這個快遞盒子重新封裝起來即可)
路由器則是封裝分用到網(wǎng)絡(luò)層即可。即先從物理層中解析出以太網(wǎng)數(shù)據(jù)幀(以太網(wǎng)數(shù)據(jù)幀是計算機(jī)網(wǎng)絡(luò)中物理層和數(shù)據(jù)鏈路層之間的數(shù)據(jù)傳輸單位;計算機(jī)設(shè)備之間的通信都是通過以太網(wǎng)數(shù)據(jù)幀進(jìn)行的),然后再去交給網(wǎng)絡(luò)層(即交給ip協(xié)議)解析出ip數(shù)據(jù)包,進(jìn)一步獲取到ip報頭,然后根據(jù)ip報頭來進(jìn)一步規(guī)劃接下來的路線(不要忘記網(wǎng)絡(luò)層的任務(wù)就是規(guī)劃路線,而數(shù)據(jù)鏈路層的任務(wù)就是當(dāng)路線確定好了之后再來確定我們應(yīng)該怎么走;由此可以看到數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層是相互配合的),確定好路線之后,接下來又會把數(shù)據(jù)進(jìn)行重新封裝然后轉(zhuǎn)發(fā)。注意
:上述的交換機(jī)路由器只是經(jīng)典的交換機(jī)路由器,而現(xiàn)在的交換機(jī)路由器可以做到更多的事情,比如有的現(xiàn)代的交換機(jī)路由器很有可能封裝分用到應(yīng)用層
。文章來源:http://www.zghlxwxcb.cn/news/detail-761357.html
五、總結(jié)
- TCP/IP五層協(xié)議:應(yīng)用層(對應(yīng)應(yīng)用程序)、傳輸層(兩點之間的傳輸)、網(wǎng)絡(luò)層(規(guī)劃路線)、數(shù)據(jù)鏈路層(負(fù)責(zé)兩個相鄰節(jié)點之間的傳輸),物理層(描述硬件設(shè)備),其中傳輸層會為應(yīng)用層提供API,我們?nèi)绻帉懸粋€具體的網(wǎng)絡(luò)程序,此時就會經(jīng)常使用到傳輸層的API。
- 封裝和分用:從上到下依次添加報頭的過程稱為封裝。從下到上依次解析報頭的過程稱之為分用。
本文到這里就結(jié)束了,希望友友們可以支持一下一鍵三連哈。嗯,就到這里吧,再見啦?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-761357.html
到了這里,關(guān)于【網(wǎng)絡(luò)編程】網(wǎng)絡(luò)通信基礎(chǔ)——簡述TCP/IP協(xié)議的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!