計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)——網(wǎng)絡(luò)分層和IP地址

計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)——網(wǎng)絡(luò)分層和IP地址

協(xié)議

在因特網(wǎng)中,凡是涉及兩個(gè)或者多個(gè)遠(yuǎn)程通信實(shí)體的所有活動(dòng)都首協(xié)議的制約。
一個(gè)協(xié)議定義了在兩個(gè)或多個(gè)通信實(shí)體之間交換的報(bào)文格式和次序,以及報(bào)文發(fā)送、接受一條報(bào)文或其他事件所采取的動(dòng)作。

簡(jiǎn)單而說(shuō),協(xié)議就像人類之間通信的語(yǔ)言,它就像機(jī)器之間通信的方式和語(yǔ)言。

協(xié)議三要素
  • 語(yǔ)法:就是一段內(nèi)容要符合一定的規(guī)則和格式
  • 語(yǔ)義:就是這一段內(nèi)容要代表某種意義
  • 順序:就是先干啥,后干啥
網(wǎng)絡(luò)分層

我們知道,網(wǎng)絡(luò)是有分層的,可是為什么要分層呢?因?yàn)椋莻€(gè)復(fù)雜的程序都要分層。
我們可以這樣來(lái)想,想象網(wǎng)絡(luò)包就是一段Buffer,或者一塊內(nèi)存,它是有格式的,同時(shí)有一個(gè)可以跑在電腦,跑在服務(wù)器,跑在交換機(jī),跑在路由器上的程序,程序可以處理這個(gè)網(wǎng)絡(luò)包,我們知道,一臺(tái)機(jī)器一般有很多個(gè)網(wǎng)口,從某一個(gè)網(wǎng)口拿進(jìn)來(lái)一個(gè)網(wǎng)絡(luò)包,程序處理后,再出另外一個(gè)口出去。說(shuō)了簡(jiǎn)單,可是網(wǎng)絡(luò)包很復(fù)雜,程序也很復(fù)雜。
復(fù)雜的程序都要分層,這是程序設(shè)計(jì)的要求。讓每一層專注做本層的事情。

而且,網(wǎng)絡(luò)每一層協(xié)議負(fù)責(zé)的工作都是不一樣的,也就對(duì)應(yīng)了有不同的設(shè)備來(lái)處理

fenceng.png

OSI七層模型:

  • 物理層:包含了多種與物理介質(zhì)相關(guān)的協(xié)議,這些物理介質(zhì)用以支撐TCP/IP通信。以二進(jìn)制數(shù)據(jù)形式在物理媒體上傳輸數(shù)據(jù)。
  • 數(shù)據(jù)鏈路層:包含了控制物理層的協(xié)議:如何訪問(wèn)和共享介質(zhì),怎樣標(biāo)識(shí)介質(zhì)上的設(shè)備,以及在介質(zhì)上發(fā)送數(shù)據(jù)之前如何完成數(shù)據(jù)成幀。典型的數(shù)據(jù)鏈路協(xié)議有IEEE802.3/以太網(wǎng),幀中繼,ATM以及SONET
  • 網(wǎng)絡(luò)層:主要負(fù)責(zé)定義數(shù)據(jù)包格式和地址格式,為經(jīng)過(guò)邏輯網(wǎng)絡(luò)路徑的數(shù)據(jù)進(jìn)行路由選擇,IP,ICMP,RIP,OSPF等
  • 傳輸層:指定了控制網(wǎng)絡(luò)層的協(xié)議。這就像數(shù)據(jù)鏈路層控制物理層一樣,傳輸層和數(shù)據(jù)鏈路層都定義了流控和差錯(cuò)機(jī)制。二者不同在于,數(shù)據(jù)鏈路層協(xié)議強(qiáng)調(diào)控制數(shù)據(jù)鏈路上的流量,即連接兩臺(tái)設(shè)備的物理介質(zhì)上的流量;而傳輸層控制邏輯鏈路上的流量,即兩臺(tái)設(shè)備的端到端的連接,這種邏輯連接可能跨越一連串?dāng)?shù)據(jù)鏈路。
  • 會(huì)話層:解除或提供兩進(jìn)程之間建立、維護(hù)和結(jié)束會(huì)話連接的功能;提供交互會(huì)話的管理功能,如三種數(shù)據(jù)流方向的控制,即一路交互、兩路交替和兩路同時(shí)會(huì)話模式。沒(méi)有協(xié)議
  • 表示層:數(shù)據(jù)格式化,代碼轉(zhuǎn)換,數(shù)據(jù)加密。沒(méi)有協(xié)議
  • 應(yīng)用層:最常用的服務(wù)是向用戶提供訪問(wèn)網(wǎng)絡(luò)的接口:文件傳輸,電子郵件,虛擬終端等。HTTP,F(xiàn)TP等

現(xiàn)在,我們常用的是TCP/IP四層模型:

  • 物理層:中繼器,集線器,雙絞線都工作在物理層
  • 網(wǎng)絡(luò)層:IP,ICMP,ARP,等等
  • 傳輸層:TCP,UDP
  • 應(yīng)用層:HTTP,TFTP,F(xiàn)TP等等

知道了這些之后,我們前面有提到程序,程序來(lái)處理網(wǎng)絡(luò)包,那么程序是如何工作的呢?

InetProgram.jpg

當(dāng)我點(diǎn)擊一個(gè)網(wǎng)頁(yè)想要瀏覽的時(shí)候,首先會(huì)發(fā)送HTTP請(qǐng)求,發(fā)送請(qǐng)求,在網(wǎng)絡(luò)上跑的肯定也是報(bào)文嘛,這個(gè)時(shí)候,報(bào)文會(huì)加上HTTP頭和HTTP正文,然后往傳輸層發(fā)送,因?yàn)檫@里是瀏覽網(wǎng)頁(yè),傳輸層上會(huì)加上tcp頭和端口號(hào),然后發(fā)往網(wǎng)絡(luò)層,在這一層,報(bào)文會(huì)加上IP頭,里面含有目標(biāo)IP地址,然后發(fā)往物理層,在物理層,會(huì)加上MAC頭,里面含有目標(biāo)MAC或者網(wǎng)關(guān)MAC還有源MAC地址。

之后這個(gè)包就在網(wǎng)絡(luò)中傳輸。

當(dāng)一個(gè)網(wǎng)絡(luò)包從一個(gè)網(wǎng)口經(jīng)過(guò)的時(shí)候,首先看看看要不要請(qǐng)進(jìn)來(lái),處理一下。
拿進(jìn)來(lái)以后,就交給一段程序進(jìn)行處理。
首先,會(huì)摘掉MAC頭,看一下是否和這個(gè)網(wǎng)口的MAC地址相符,如果不是,就丟棄,不處理。如果MAC地址和網(wǎng)口的相符,就說(shuō)明是發(fā)給它的,于是它就會(huì)繼續(xù)摘掉IP頭,看看到底是發(fā)送給自己的,還是希望自己轉(zhuǎn)發(fā)出去的。

如果目標(biāo)IP地址不是自己的,那么就是轉(zhuǎn)發(fā)出去的;如果IP地址是自己的,那么就是發(fā)給自己的,就會(huì)進(jìn)行下一層的處理,我們這里是TCP的,所以會(huì)摘掉TCP頭,這個(gè)時(shí)候,就需要查看TCP的頭,看這是一個(gè)發(fā)起,還是一個(gè)應(yīng)答,又或者是一個(gè)正常的數(shù)據(jù)包,然后分別由不同的邏輯進(jìn)行處理。

如果是發(fā)起或者應(yīng)答,接下來(lái)可能要發(fā)送一個(gè)回復(fù)包;如果是一個(gè)正常的數(shù)據(jù)包,就需要交給上層進(jìn)行處理,這個(gè)時(shí)候會(huì)交給一個(gè)應(yīng)用來(lái)進(jìn)行處理,可是交給哪個(gè)應(yīng)用呢?這個(gè)時(shí)候,TCP的頭里面就有端口號(hào),不同的應(yīng)用監(jiān)聽不同的端口號(hào)。如果發(fā)現(xiàn)瀏覽器應(yīng)用在監(jiān)聽這個(gè)端口,那么程序就會(huì)把包發(fā)給瀏覽器,交給瀏覽器處理。

瀏覽器自然是解析HTML,顯示頁(yè)面出來(lái)。

要記住一點(diǎn):只要是在網(wǎng)絡(luò)上跑的包,都是完整的。可以有下層沒(méi)上層,絕對(duì)不可能有上層沒(méi)下層。

IP地址

IP地址是一個(gè)網(wǎng)卡在網(wǎng)絡(luò)中的通訊地址,相當(dāng)于我們現(xiàn)實(shí)世界的門牌號(hào)碼。

IP地址分類

IP地址分為5類

ip.jpg

對(duì)于A,B,C類來(lái)說(shuō),主要分為兩部分:網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)

abcIp.jpg

我們可以看到,C類地址的最大主機(jī)數(shù)太少了,而A類又很多,會(huì)造成浪費(fèi),于是出現(xiàn)了一個(gè)協(xié)議:無(wú)類型域間選路(CIDR)
它將32為的IP地址分為兩部分,前一部分是網(wǎng)絡(luò)號(hào),后面是主機(jī)號(hào)
如:10.100.122.2/24 ,這個(gè)IP地址后面有一個(gè)斜杠,斜杠后面有一個(gè)數(shù)字24,這個(gè)24就代表這個(gè)IP地址前24位是網(wǎng)絡(luò)號(hào),后8為是主機(jī)號(hào)。與此對(duì)應(yīng)的子網(wǎng)掩碼是255.255.255.0。在10.100.122.XXX這個(gè)網(wǎng)絡(luò)段中,有一個(gè)IP地址比較特殊:10.100.122.255,這個(gè)是廣播地址,如果發(fā)送一個(gè)包,包的目標(biāo)IP是它,那么在10.100.122.xxx這個(gè)網(wǎng)絡(luò)段的所有主機(jī)都能接收到這個(gè)包。

當(dāng)我發(fā)送一個(gè)包的時(shí)候,必須在同一網(wǎng)段下,才能接收到。
如:192.168.1.1/24 發(fā)一個(gè)包給 192.168.1.121/26 ,是不可以的。

MAC地址

MAC地址是一個(gè)網(wǎng)卡的物理地址,用十六進(jìn)制,6個(gè)byte表示。MAC地址是全局唯一的,不會(huì)有兩個(gè)網(wǎng)卡有相同的MAC地址。

那么我們?yōu)槭裁床挥肕AC地址進(jìn)行通信呢?

因?yàn)镸AC地址更像是一個(gè)人的身份證,是一個(gè)標(biāo)識(shí),它沒(méi)有遠(yuǎn)程定位的功能。一個(gè)網(wǎng)絡(luò)包從源到目標(biāo),中間會(huì)經(jīng)過(guò)很多路由器等,MAC地址的通信范圍很小,局限在一個(gè)子網(wǎng)里面,找到MAC地址,就考喊,也就是廣播,當(dāng)一個(gè)網(wǎng)絡(luò)包要經(jīng)過(guò)很多子網(wǎng)的時(shí)候,MAC地址就不能通信了。

MAC頭和IP頭

ipMac.jpg

在MAC頭里面,先是目標(biāo)MAC地址,然后是源MAC地址,然后有一個(gè)協(xié)議類型,用來(lái)說(shuō)明里面是IP協(xié)議。

IP頭里面:
版本:IPv4還是IPv6
TTL:最大生存時(shí)間,當(dāng)一個(gè)網(wǎng)絡(luò)包在網(wǎng)絡(luò)上轉(zhuǎn)發(fā)時(shí),每到下一跳是,這個(gè)值會(huì)加1,當(dāng)達(dá)到255時(shí),說(shuō)明包不可達(dá),包被丟棄。這也一定程度上避免網(wǎng)絡(luò)風(fēng)暴。
協(xié)議:說(shuō)明是TCP協(xié)議還是UDP協(xié)議

本文參考:

net.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容