4、網(wǎng)絡(luò)層IP
數(shù)據(jù)包的傳輸主要經(jīng)過應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、鏈路層。承接應(yīng)用層HTTP、傳輸層TCP講解,應(yīng)用層數(shù)據(jù)被傳輸層包裹后接下來就需要被網(wǎng)絡(luò)層包裹了,網(wǎng)絡(luò)層的核心任務(wù)就是實(shí)現(xiàn)主機(jī)與主機(jī)之間的通信。講解IP層之前需鋪墊眾多基礎(chǔ)知識(shí)。
4.1IP基礎(chǔ)知識(shí)
4.1.1IP定義
現(xiàn)實(shí)生活人能找到人是因?yàn)橹辣舜说脑敿?xì)地址,在網(wǎng)絡(luò)中要通訊就要知道對(duì)方的IP地址,IPv4是由32位二進(jìn)制數(shù)據(jù)來表示的,每4位算一組并換算成10進(jìn)制數(shù)據(jù),組與組之間通過.
分割。
IPv4
4.1.2IP分類
為了便于尋址和層次化的構(gòu)造網(wǎng)絡(luò),IP地址被分為A、B、C、D、E五類。
IP分類
A、B、C三類IP中是有網(wǎng)絡(luò)號(hào)跟主機(jī)號(hào)共同組成的,我們常說的IP地址=網(wǎng)絡(luò)地址+主機(jī)地址
。A、B、C三類IP都有若干位固定值表示不同類型,并且網(wǎng)絡(luò)號(hào)全為0的情況下網(wǎng)絡(luò)不可用
,網(wǎng)絡(luò)地址的主機(jī)位全部變成1被提前標(biāo)記為是廣播地址
,全部被標(biāo)記為0表示是主機(jī)地址
,即是這個(gè)網(wǎng)絡(luò)中的所有主機(jī)的地址。
廣播地址
BroadcastAddress廣播地址指同時(shí)向該局域網(wǎng)上所有的主機(jī)發(fā)送報(bào)文,如136.78.255.255就是B類地址中的一個(gè)廣播地址,你將信息送到此地址,就是將信息送給網(wǎng)絡(luò)號(hào)為136.78的所有主機(jī)。
在本網(wǎng)絡(luò)內(nèi)廣播的叫做本地廣播,這個(gè)廣播地址發(fā)出的IP包會(huì)被路由器屏蔽。
在不同網(wǎng)絡(luò)之間的廣播叫做直接廣播。
主機(jī)地址
在一個(gè)網(wǎng)絡(luò)段中主機(jī)號(hào)全為0代表這個(gè)網(wǎng)絡(luò)段本身,稱之為網(wǎng)絡(luò)號(hào)。這個(gè)地址是不可以分配給主機(jī)的。
多播
D類網(wǎng)段中的
多播
用于將包發(fā)送給特定組內(nèi)的所有主機(jī)。主機(jī)之間一對(duì)一的通訊模式叫
單播
,主機(jī)之間一對(duì)所”的通訊模式叫廣播
,主機(jī)之間一對(duì)一組的通訊模式叫多播
。
4.1.3子網(wǎng)掩碼
SubnetMask又叫網(wǎng)絡(luò)掩碼、地址掩碼,子網(wǎng)掩碼只有一個(gè)作用,就是將某個(gè)IP地址劃分成網(wǎng)絡(luò)地址
和主機(jī)地址
。
子網(wǎng)掩碼是一個(gè)32位地址,用于屏蔽IP地址的一部分以區(qū)別網(wǎng)絡(luò)標(biāo)識(shí)和主機(jī)標(biāo)識(shí),并說明該IP地址是在局域網(wǎng)上,還是在遠(yuǎn)程網(wǎng)上。
子網(wǎng)掩碼的主機(jī)號(hào)部分全部為0,非主機(jī)號(hào)部分全部為1。
子網(wǎng)掩碼不能單獨(dú)存在,它必須結(jié)合IP地址一起使用。
通過子網(wǎng)掩碼,就可以判斷兩個(gè)IP在不在一個(gè)局域網(wǎng)內(nèi)部。
子網(wǎng)掩碼可以看出有多少位是網(wǎng)絡(luò)號(hào),有多少位是主機(jī)號(hào)。
用子網(wǎng)掩碼可以得到網(wǎng)絡(luò)地址跟主機(jī)地址。
將ip地址與子網(wǎng)掩碼轉(zhuǎn)換成二進(jìn)制。
將二進(jìn)制形式的ip地址與子網(wǎng)掩碼做’與’運(yùn)算,將答案化為十進(jìn)制便得到網(wǎng)絡(luò)地址。
將二進(jìn)制形式的子網(wǎng)掩碼取反
。
將取反
后的子網(wǎng)掩碼與ip地址做與
運(yùn)算,將答案化為十進(jìn)制便得到主機(jī)地址。
子網(wǎng)掩碼一般分為兩類,第一類是系統(tǒng)自帶的:
A類地址子網(wǎng)掩碼是255.0.0.0。
B類地址子網(wǎng)掩碼是255.255.0.0。
C類地址子網(wǎng)掩碼是255.255.255.0。
第二類就是自定義子網(wǎng)掩碼,將一個(gè)網(wǎng)絡(luò)劃分為幾個(gè)子網(wǎng),需要每一段使用不同的網(wǎng)絡(luò)號(hào)或子網(wǎng)號(hào),實(shí)際上我們可以認(rèn)為是將主機(jī)號(hào)分為兩個(gè)部分:子網(wǎng)號(hào)、子網(wǎng)主機(jī)號(hào)。形式如下:
未做子網(wǎng)劃分的ip地址:網(wǎng)絡(luò)號(hào)+主機(jī)號(hào)
做子網(wǎng)劃分后的ip地址:網(wǎng)絡(luò)號(hào)+子網(wǎng)號(hào)+子網(wǎng)主機(jī)號(hào)
也就是說ip地址在化分子網(wǎng)后,以前的主機(jī)號(hào)位置的一部分給了子網(wǎng)號(hào),余下的是子網(wǎng)主機(jī)號(hào)。
4.1.4無分類地址
IP分類劃分的優(yōu)點(diǎn):
簡單明了、根據(jù)前面幾位固定值即可判斷。
IP分類劃分的缺點(diǎn):
生活中你會(huì)發(fā)現(xiàn)C類地址包含最大主機(jī)數(shù)有點(diǎn)少,而B類又有點(diǎn)大,分配IP無法很好的跟現(xiàn)實(shí)網(wǎng)絡(luò)需求匹配。
相同的一個(gè)網(wǎng)絡(luò)下是沒有地址層次的,比如公司用了B類地址,而你的生產(chǎn)、測(cè)試、開發(fā)三個(gè)環(huán)節(jié)要?jiǎng)澐植煌牡刂穼哟?。這無法實(shí)現(xiàn)。
既然IP分類會(huì)導(dǎo)致有這么多不便,人們后面提出了無分類地址的方案,該方案會(huì)將32比特的IP地址劃分為兩部分,前面是網(wǎng)絡(luò)號(hào),后面是主機(jī)號(hào)。
比如10.100.34.33/24,這種地址表示形式就是CIDR,/24表示前24位是網(wǎng)絡(luò)號(hào),剩余的8位是主機(jī)號(hào)。此時(shí)具有如下信息:
子網(wǎng)掩碼:255.255.255.0
網(wǎng)絡(luò)號(hào):10.100.34.0
可用地址范圍:10.100.34.0~10.100.34.255
廣播地址:10.100.34.255
4.1.5私網(wǎng)IP、公網(wǎng)IP
內(nèi)網(wǎng)跟外網(wǎng)
私網(wǎng)IP:一般是在局域網(wǎng)內(nèi)使用,不同局域網(wǎng)可能有相同的私網(wǎng)IP地址。在電腦想訪問外網(wǎng)上網(wǎng)時(shí),必須使用公網(wǎng),私網(wǎng)是不被允許的。
公網(wǎng)IP:公網(wǎng)IP世界只有一個(gè),訪問互聯(lián)網(wǎng)需要公網(wǎng)IP作為身份的標(biāo)識(shí),公網(wǎng)IP是由InterNIC因特網(wǎng)信息中心負(fù)責(zé)。這些IP地址分配給注冊(cè)并向InterNIC提出申請(qǐng)的組織機(jī)構(gòu)。通過它直接訪問因特網(wǎng)。
4.2IP層+ MAC層基礎(chǔ)信息
4.2.1ARP、RARP
經(jīng)過TCP處理數(shù)據(jù)后,接下來就會(huì)通過主機(jī)的路由表或路由器的路由表來確定IP數(shù)據(jù)包下一跳到哪兒。這里需注意,數(shù)據(jù)傳輸的最底層是鏈路層,鏈路層是根據(jù)MAC
地址傳輸?shù)模詥栴}變成了如何通過目標(biāo)IP獲得下一跳的MAC
地址。
AddressResolutionProtocol 協(xié)議是地址解析協(xié)議,ARP是通過解析IP地址得到MAC地址,ARP協(xié)議的主要工作就是建立、查詢、更新、刪除ARP表項(xiàng)。
ARP協(xié)議引入了ARP緩存表的概念,每臺(tái)主機(jī)或路由器在維護(hù)著一個(gè)ARP緩存表,這個(gè)表包含IP地址到MAC地址的映射關(guān)系,表中記錄了對(duì),稱之為ARP表項(xiàng),ARP表項(xiàng)里的數(shù)據(jù)一般都是含有TTL屬性的,默認(rèn)10分鐘??赏ㄟ^arp-a
查看服務(wù)器ARP緩存表信息。
ARP的工作流程:
主機(jī)會(huì)通過廣播發(fā)送ARP請(qǐng)求包,該包中包含了想要知道的MAC地址的主機(jī)IP地址。
同一局域網(wǎng)內(nèi)的所有主機(jī)都會(huì)接收到這個(gè)請(qǐng)求,如果目標(biāo)IP地址與接收到ARP請(qǐng)求的主機(jī)自身IP地址吻合就會(huì)返回一個(gè)ARP應(yīng)答,告訴目標(biāo)MAC地址,接著把數(shù)據(jù)傳送過去。
如果目標(biāo)IP跟起始IP不在同一局域網(wǎng)內(nèi),會(huì)跳躍到路由器,先查詢路由表,找到目標(biāo)MAC則返回,找不到則路由器會(huì)接著往下跳,每跳一次就會(huì)請(qǐng)求MAC地址,然后將數(shù)據(jù)發(fā)送到目標(biāo)MAC地址的主機(jī)上。就這樣通過跳一跳
的方式最終把數(shù)據(jù)發(fā)送到目標(biāo)機(jī)器。
操作系統(tǒng)通常會(huì)把第一次通過ARP獲取的MAC地址緩存起來,以便下次直接從緩存中找到對(duì)應(yīng)IP地址的MAC地址。
同時(shí)你會(huì)發(fā)現(xiàn)在整個(gè)數(shù)據(jù)傳輸期間,源IP和目標(biāo)IP始終是不變的,一直變化的是MAC地址,因?yàn)殒溌穼有枰狹AC地址在以太網(wǎng)內(nèi)進(jìn)行兩個(gè)設(shè)備之間的包傳輸。
RARP
的功能正好跟ARP相反,它是已知MAC地址求IP地址。比如打印機(jī)等小設(shè)備會(huì)通過MAC獲得IP地址,RARP的工作流程大致如下:
主機(jī)發(fā)送一個(gè)本地的RARP廣播,能夠到達(dá)局域網(wǎng)上的所有設(shè)備,在此廣播包中,聲明自己的MAC地址并且請(qǐng)求任何收到此請(qǐng)求的RARP服務(wù)器分配一個(gè)IP地址。
本地網(wǎng)段上的RARP服務(wù)器收到此請(qǐng)求后,檢查其RARP列表,查找該MAC地址對(duì)應(yīng)的IP地址;
如果存在,RARP服務(wù)器就給源主機(jī)發(fā)送一個(gè)響應(yīng)數(shù)據(jù)包并將此IP地址提供給對(duì)方主機(jī)使用。如果不存在,RARP服務(wù)器對(duì)此不做任何的響應(yīng)。
源主機(jī)收到從RARP服務(wù)器的響應(yīng)信息,就利用得到的IP地址進(jìn)行通訊,如果一直沒有收到RARP服務(wù)器的響應(yīng)信息,表示初始化失敗。
4.2.1網(wǎng)卡MAC
ARP要找MAC,而MAC是在網(wǎng)卡上的。NetworkInterfaceCard
網(wǎng)卡工作在鏈路層組件,是局域網(wǎng)中連接計(jì)算機(jī)和傳輸介質(zhì)的接口,網(wǎng)線插到網(wǎng)卡上,網(wǎng)卡插在電腦的主板上。起到連接你上網(wǎng)的作用。
網(wǎng)卡上的重要組成單元MAC,MediaAccessControl地址是6字節(jié)數(shù)據(jù)燒錄在網(wǎng)卡上的,MAC地址跟人的身份證號(hào)一樣具有全球唯一性。網(wǎng)卡上面還裝有處理器和存儲(chǔ)器,包括RAM和ROM,網(wǎng)卡具有如下作用:
數(shù)據(jù)的封裝跟解封。
鏈路管理,自動(dòng)處理錯(cuò)誤幀數(shù)據(jù)。
編碼與譯碼,數(shù)據(jù)加工發(fā)到網(wǎng)絡(luò),接受網(wǎng)絡(luò)數(shù)據(jù)解析。
IP層拿到MAC地址后,接下來需要網(wǎng)卡將數(shù)字信號(hào)轉(zhuǎn)換為電信號(hào)
,網(wǎng)卡一般通過網(wǎng)卡驅(qū)動(dòng)程序工作。這里大致說下網(wǎng)卡工作流程:
網(wǎng)卡從IP層拿到數(shù)據(jù)后會(huì)復(fù)制數(shù)據(jù)到網(wǎng)卡緩存區(qū)。
在數(shù)據(jù)頭部添加報(bào)頭跟起始幀分界符用來表示包的起始位置,尾部添加用于檢測(cè)包是否有損壞的幀校驗(yàn)序列。
- 物理層數(shù)據(jù)幀
最后網(wǎng)卡將最終的電信號(hào)發(fā)出。
4.2.3IP跟MAC關(guān)系
數(shù)據(jù)傳輸真實(shí)流程
主機(jī)H1網(wǎng)絡(luò)層數(shù)據(jù)報(bào)通過ARP協(xié)議將數(shù)據(jù)交給數(shù)據(jù)鏈路層的MAC1,然后數(shù)據(jù)被封裝成幀發(fā)送到MAC2,
路由器R1通過MAC2收到MAC幀后,向網(wǎng)絡(luò)層傳輸并且解封去掉MAC幀的首部,獲得干凈數(shù)據(jù),然后再通過MAC2發(fā)送到MAC3,
路由器R2通過MAC3收到MAC幀后,向網(wǎng)絡(luò)層傳輸并且解封去掉MAC幀的首部,獲得干凈數(shù)據(jù),然后再通過MAC3發(fā)送到MAC4,
然后目標(biāo)路由器收到信息包后不斷拆解,最終把數(shù)據(jù)發(fā)送到H2。
發(fā)送時(shí)數(shù)據(jù)從高層下到底層然后才到通信鏈路上傳輸,使用IP地址的IP數(shù)據(jù)報(bào)一旦交給數(shù)據(jù)鏈路層就加上MAC地址封裝成MAC幀,在實(shí)際的傳送過程中,使用的源地址和目的地址都是MAC地址。
有人可能問既然MAC有唯一性,為什么不直接用MAC要用IP呢?Mac地址種類繁多,海量分布。IP地址就像是門牌號(hào),Mac地址就像身份證號(hào)。如果只知道身份證號(hào)就只能在全世界查找,如果知道IP地址,那就跟知道了這個(gè)人在世界上詳細(xì)地址一樣,逐層追蹤即可,查找起來會(huì)快很多。
IP層屏蔽了下層很復(fù)雜的細(xì)節(jié),讓用戶在抽象的網(wǎng)絡(luò)層上討論問題,讓用戶使用統(tǒng)一的、抽象的IP地址研究主機(jī)和主機(jī)或主機(jī)和路由器之間的通信。通俗一點(diǎn)來說就是有了IP地址,就只通過路由器找到目的主機(jī),屏蔽了下層網(wǎng)絡(luò)的異構(gòu)型,由MAC地址完成下層的實(shí)際轉(zhuǎn)發(fā)。
4.2.4網(wǎng)關(guān)、貓
網(wǎng)關(guān)作用
網(wǎng)關(guān)
從一個(gè)房間走到另一個(gè)房間,必然要經(jīng)過一扇門。同樣從一個(gè)網(wǎng)絡(luò)向另一個(gè)網(wǎng)絡(luò)發(fā)送信息,也必須經(jīng)過一道關(guān)口,網(wǎng)關(guān)顧名思義是一個(gè)網(wǎng)絡(luò)連接到另一個(gè)網(wǎng)絡(luò)的關(guān)口,也就是網(wǎng)絡(luò)關(guān)卡。
網(wǎng)關(guān)Gateway這個(gè)概念是邏輯層面的,網(wǎng)關(guān)一個(gè)大概念,不具體特指一類產(chǎn)品,只要連接兩個(gè)不同的網(wǎng)絡(luò)的設(shè)備都可以叫網(wǎng)關(guān),可以是局域網(wǎng)也可以是廣域網(wǎng)。
網(wǎng)關(guān)實(shí)質(zhì)上是一個(gè)網(wǎng)絡(luò)通向其他網(wǎng)絡(luò)的IP地址,不同網(wǎng)段通過網(wǎng)關(guān)通信。
是一種計(jì)算機(jī)硬件,俗稱貓
,它的作用是將電腦想要發(fā)送的信息數(shù)字信號(hào)轉(zhuǎn)換成網(wǎng)線中的電流脈沖模擬信號(hào)從而使信息在網(wǎng)線中傳輸。一般在早期通過電話線上完時(shí)候需要用到貓,最大速度一般不超過56kps,現(xiàn)在幾乎很少使用了。
調(diào)制調(diào)解器
4.2.5交換機(jī)、集線器
數(shù)據(jù)經(jīng)過網(wǎng)卡操作到達(dá)交換機(jī)Switch,交換機(jī)工作在MAC層,也被為二層網(wǎng)絡(luò)設(shè)備。
作用:交換機(jī)是用來連接多個(gè)終端(電腦、手機(jī)、打印機(jī)),然后幫各個(gè)終端來轉(zhuǎn)發(fā)數(shù)據(jù)的,適合局域網(wǎng)內(nèi)互聯(lián)。
原理:交換機(jī)的轉(zhuǎn)發(fā)原理是記錄下每個(gè)終端的MAC地址,以及這個(gè)MAC地址對(duì)應(yīng)哪個(gè)接口。然后信息來的時(shí)候查表導(dǎo)航即可。這里需注意交換機(jī)是沒有MAC地址的。
- MAC
如果查找MAC地址表發(fā)現(xiàn)找不到所需信息,此時(shí)交換機(jī)會(huì)以
廣播
的形式把包轉(zhuǎn)發(fā)到除源端口外的所有端口上,然后目標(biāo)端口會(huì)自動(dòng)接收數(shù)據(jù),非目標(biāo)自動(dòng)屏蔽垃圾數(shù)據(jù)。這里需注意有個(gè)特殊的MAC跟IP地址屬于廣播地址。以下兩個(gè)屬于廣播地址:
MAC= FF:FF:FF:FF:FF:FF
IP=255.255.255.255
集線器hub:
一個(gè)口收到的信號(hào),原封不動(dòng)的發(fā)送給所有其他的口,由其他的口上的設(shè)備自己決定是否接收信號(hào)。有點(diǎn)類似廣播,但是比廣播更純粹。
4.2.6路由器
數(shù)據(jù)經(jīng)過交換機(jī)如果發(fā)現(xiàn)要訪問的IP不在局域網(wǎng)內(nèi)就要找路由器了,路由器Router一般特指能夠?qū)崿F(xiàn)路由尋找和轉(zhuǎn)發(fā)的特定類產(chǎn)品,路由器很顯然能夠?qū)崿F(xiàn)網(wǎng)關(guān)的功能。一般說來,路由器作為不同網(wǎng)絡(luò)之間互相連接的樞紐,路由器系統(tǒng)構(gòu)成了基于TCP/IP的國際互聯(lián)網(wǎng)絡(luò)Internet的主體脈絡(luò),也可以說,路由器構(gòu)成了Internet的骨架。
路由器根據(jù)接收到數(shù)據(jù)包中的網(wǎng)絡(luò)層地址以及路由器內(nèi)部維護(hù)的路由表決定輸出端口以及下一跳地址,并且重寫鏈路層數(shù)據(jù)包頭實(shí)現(xiàn)轉(zhuǎn)發(fā)數(shù)據(jù)包,路由器一般提供如下功能:
網(wǎng)絡(luò)互連:實(shí)現(xiàn)不同網(wǎng)絡(luò)互相通信。
路徑選擇:為經(jīng)過路由器的每個(gè)數(shù)據(jù)幀尋找一條最佳傳輸路徑進(jìn)行傳輸。
數(shù)據(jù)處理:提供分組過濾轉(zhuǎn)發(fā)、優(yōu)先級(jí)、防火墻等功能。
網(wǎng)絡(luò)管理:提供配置管理、性能管理、流量控制等功能。
路由器做了2個(gè)普通交換機(jī)做不了的事:
不同網(wǎng)段互連:每個(gè)主機(jī)有自己的ip地址,ip地址又是分網(wǎng)段的,要實(shí)現(xiàn)不同網(wǎng)段的互連,必須用到路由器。各地的玩家,ip地址一定是不同網(wǎng)段的。
網(wǎng)絡(luò)地址轉(zhuǎn)換:主機(jī)在企業(yè)內(nèi)部或者網(wǎng)吧內(nèi)部,使用的都是私網(wǎng)ip地址,私網(wǎng)ip地址無法進(jìn)入互聯(lián)網(wǎng),想進(jìn)入互聯(lián)網(wǎng),必須轉(zhuǎn)成公網(wǎng)ip。ip地址的轉(zhuǎn)換也是由路由器來做的。
路由器是基于IP設(shè)計(jì)的,俗稱三層網(wǎng)絡(luò)設(shè)備,路由器的每個(gè)端口都有MAC地址跟IP地址,路由器會(huì)檢查數(shù)據(jù)幀目標(biāo)地址字段中的數(shù)據(jù)鏈路標(biāo)識(shí)。如果它包含了路由器接口標(biāo)識(shí)符或廣播標(biāo)識(shí)符,那么路由器將從幀中剝離出數(shù)據(jù)包并傳遞給網(wǎng)絡(luò)層。
當(dāng)路由器收到電信號(hào)后也會(huì)轉(zhuǎn)化為數(shù)字信號(hào)然后進(jìn)行FCS校驗(yàn),如果發(fā)現(xiàn)發(fā)送方的MAC地址是給自己的則接受該幀,否則丟失該幀。
根據(jù)目標(biāo)IP及RoutingTable路由表
決定信息如何轉(zhuǎn)發(fā)。路由表中保存著子網(wǎng)的標(biāo)志信息、網(wǎng)上路由器的個(gè)數(shù)和下一個(gè)路由器的名字等內(nèi)容。路徑表可以是由系統(tǒng)管理員固定設(shè)置好的,也可以由系統(tǒng)動(dòng)態(tài)修改,可以由路由器自動(dòng)調(diào)整,也可以由主機(jī)控制。Linux服務(wù)器一般用route-n 查詢系統(tǒng)當(dāng)前路由表。
路由規(guī)則
descIP逐個(gè)跟路由表中每行的Netmask按位與運(yùn)算,獲的目標(biāo)IP,看跟哪一行的Destination相等。
找到目標(biāo)行,利用Gateway及對(duì)應(yīng)網(wǎng)卡Iface進(jìn)行。
Gateway不為空:說明仍然需要利用Gateway繼續(xù)上面的路由傳輸。
Gateway為空:說明找到IP包頭里的目標(biāo)地址了,到達(dá)終點(diǎn)。
進(jìn)行ARP請(qǐng)求,先從路由緩存嘗試轉(zhuǎn)換,然后再發(fā)送ARP請(qǐng)求。進(jìn)行頭部MAC地址的替換。
進(jìn)行數(shù)字信號(hào)到電信號(hào)的轉(zhuǎn)換,然后將數(shù)據(jù)發(fā)出。
經(jīng)過交換機(jī)到達(dá)下個(gè)路由器,周而復(fù)始,直到到達(dá)目標(biāo)地址。
最后一行Destination和Netmask都是0.0.0.0,表示是默認(rèn)網(wǎng)關(guān),如果其他所有條目都無法匹配,就會(huì)自動(dòng)匹配這一行。并且后續(xù)就把包發(fā)給Gateway。
4.2.7DHCP
DynamicHostConfigurationProtocol動(dòng)態(tài)主機(jī)配置協(xié)議是一個(gè)局域網(wǎng)的網(wǎng)絡(luò)協(xié)議,這是一個(gè)應(yīng)用層協(xié)議。當(dāng)我們將客戶主機(jī)ip地址設(shè)置為動(dòng)態(tài)獲取方式時(shí),DHCP服務(wù)器就會(huì)根據(jù)DHCP協(xié)議給客戶端分配IP,不用用戶自己去設(shè)置IP地址跟子網(wǎng)掩碼,然后客戶機(jī)能夠利用這個(gè)IP上網(wǎng)。
UDP獲取IP流程
簡單說下DHCP交互流程:
因?yàn)榭蛻舳藳]有IP地址,所以全程使用UDP
廣播的形式發(fā)送DHCPDiscover包。
服務(wù)器收到后會(huì)返回DHCPOffer包,比如IP地址、子網(wǎng)掩碼、默認(rèn)網(wǎng)關(guān)、IP地址租期等。
客戶端從眾多回復(fù)信息中選一個(gè)進(jìn)行配置,向選中的服務(wù)器發(fā)送DHCPRequest包請(qǐng)求分配IP。
服務(wù)器收到Request包后,用DHCPACK報(bào)文對(duì)請(qǐng)求報(bào)文進(jìn)行響應(yīng),應(yīng)答所要求的參數(shù)。
這里需注意UDP廣播只在局域網(wǎng),那難道一個(gè)局域網(wǎng)就要有個(gè)DHCP服務(wù)器嗎?系統(tǒng)為此引入了DHCP中繼代理
,對(duì)不同網(wǎng)段的IP地址分配也可以由一個(gè)DHCP服務(wù)器統(tǒng)一進(jìn)行管理。
DHCP通常被應(yīng)用在大型的局域網(wǎng)絡(luò)環(huán)境中,主要作用是集中的管理、分配IP地址,使網(wǎng)絡(luò)環(huán)境中的主機(jī)動(dòng)態(tài)的獲得IP地址、Gateway地址、DNS服務(wù)器地址等信息,并能夠提升地址的使用率。
4.2.8NAT
NAT
私網(wǎng)IP的服務(wù)器想要上網(wǎng)的時(shí)候需要轉(zhuǎn)換成公網(wǎng)IP才能跟外界通訊,而 NetworkAddressTranslation
網(wǎng)絡(luò)地址轉(zhuǎn)換就是負(fù)責(zé)干這事的。但需注意NAT只是實(shí)現(xiàn)了IP轉(zhuǎn)換,所以還是沒有解決IPv4擴(kuò)容的問題。NAPT可以實(shí)現(xiàn)IP地址+端口一起進(jìn)行轉(zhuǎn)換。這就可以實(shí)現(xiàn)不同電腦公用一個(gè)公網(wǎng)IP,這種轉(zhuǎn)換技術(shù)叫網(wǎng)絡(luò)地址與端口轉(zhuǎn)換。
這個(gè)轉(zhuǎn)換用到的是NAPT路由器的轉(zhuǎn)換表,現(xiàn)在路由器上一般會(huì)自動(dòng)生成跟維護(hù)這個(gè)表。
缺點(diǎn):
通信過程中NAT路由器重啟,則TCP連接要重置。
NAT表的生產(chǎn)跟轉(zhuǎn)換都需生成跟維護(hù)的。
公網(wǎng)的IP無法主動(dòng)跟NAT內(nèi)部服務(wù)器建立連接,因?yàn)镹APT表沒記錄。
解決方法:
NAT穿透技術(shù):該技術(shù)可以讓網(wǎng)絡(luò)程序主動(dòng)發(fā)現(xiàn)自己位于NAT設(shè)備上,主動(dòng)獲得NAT設(shè)備公網(wǎng)IP,然后建立NAPT表。
上IPv6:128位二進(jìn)制絕對(duì)夠地球上的終端使用。
4.2.9ICMP
InternetControlMessageProtocol
互聯(lián)網(wǎng)控制報(bào)文協(xié)議。它是TCP/IP協(xié)議簇的一個(gè)子協(xié)議,用于在IP主機(jī)、路由器之間傳遞控制消息??刂葡⑹侵妇W(wǎng)絡(luò)通不通、主機(jī)是否可達(dá)、路由是否可用等網(wǎng)絡(luò)本身的消息。日常你ping網(wǎng)絡(luò)通不通底層基礎(chǔ)就是ICMP。
ICMP提供一致易懂的出錯(cuò)報(bào)告信息。發(fā)送的出錯(cuò)報(bào)文返回到發(fā)送原數(shù)據(jù)的設(shè)備,發(fā)送設(shè)備隨后可根據(jù)ICMP報(bào)文確定發(fā)生錯(cuò)誤的類型,并確定如何才能更好地重發(fā)失敗的數(shù)據(jù)包。但是ICMP唯一的功能是報(bào)告問題而不是糾正錯(cuò)誤,糾正錯(cuò)誤的任務(wù)由發(fā)送方完成。
ICMP
ICMP一般分為兩類:
查詢報(bào)文類型:用于診斷的查詢消息。
差錯(cuò)報(bào)文類型:通知出錯(cuò)原因的錯(cuò)誤消息。
IPv4中ICMP僅作為一個(gè)輔助作用支持IPv4。也就是說,在IPv4時(shí)期,即使沒有ICMP,仍然可以實(shí)現(xiàn)IP通信。然而,在IPv6中,ICMP的作用被擴(kuò)大,如果沒有ICMPv6,IPv6就無法進(jìn)行正常通信。
4.3IP層解析
4.3.1IP頭含義
其實(shí)經(jīng)過上面IP層跟鏈路層必備知識(shí)的講解,大家再看數(shù)據(jù)從TCP到IP層就簡單多了,這里我們以IPv4大致說下網(wǎng)絡(luò)層核心IP頭
字段的含義。
IP頭部
版本號(hào):4位version指定IP協(xié)議的版本。對(duì)IPv4來說,其值是4。其他IPv4協(xié)議的擴(kuò)展版本(如SIP協(xié)議和PIP協(xié)議),則具有不同的版本號(hào)(它們的頭部結(jié)構(gòu)也和圖2-1不同)。
頭部長度:4位headerlength標(biāo)識(shí)該IP頭部有多少個(gè)32bit字(4字節(jié))。因?yàn)?位最大能表示15,所以IP頭部最長是60字節(jié)。
服務(wù)類型:8位TypeOfService,包括一個(gè)3位的優(yōu)先權(quán)字段(現(xiàn)在已經(jīng)被忽略),4位的TOS字段和1位保留字段(必須置0)。4位的TOS字段分別表示:最小延時(shí),最大吞吐量,最高可靠性和最小費(fèi)用。其中最多有一個(gè)能置為1,應(yīng)用程序應(yīng)該根據(jù)實(shí)際需要來設(shè)置它。比如像ssh和telnet這樣的登錄程序需要的是最小延時(shí)的服務(wù),而文件傳輸程序ftp則需要最大吞吐量的服務(wù)。
總長度:16位totallength是指整個(gè)IP數(shù)據(jù)報(bào)的長度,以字節(jié)為單位,因此IP數(shù)據(jù)報(bào)的最大長度為65535(2^16-1)字節(jié)。但由于MTU的限制,長度超過MTU的數(shù)據(jù)報(bào)都將被分片傳輸,所以實(shí)際傳輸?shù)腎P數(shù)據(jù)報(bào)(或分片)的長度都遠(yuǎn)遠(yuǎn)沒有達(dá)到最大值。接下來的3個(gè)字段則描述了如何實(shí)現(xiàn)分片。
標(biāo)識(shí):16位identification唯一地標(biāo)識(shí)主機(jī)發(fā)送的每一個(gè)數(shù)據(jù)報(bào)。其初始值由系統(tǒng)隨機(jī)生成;每發(fā)送一個(gè)數(shù)據(jù)報(bào),其值就加1。該值在數(shù)據(jù)報(bào)分片時(shí)被復(fù)制到每個(gè)分片中,因此同一個(gè)數(shù)據(jù)報(bào)的所有分片都具有相同的標(biāo)識(shí)值。
標(biāo)志字段:3位的第一位保留。第二位(Don’tFragment,DF)表示禁止分片。如果設(shè)置了這個(gè)位,IP模塊將不對(duì)數(shù)據(jù)報(bào)進(jìn)行分片。在這種情況下,如果IP數(shù)據(jù)報(bào)長度超過MTU的話,IP模塊將丟棄該數(shù)據(jù)報(bào)并返回一個(gè)ICMP差錯(cuò)報(bào)文。第三位(MoreFragment,MF)表示更多分片。除了數(shù)據(jù)報(bào)的最后一個(gè)分片外,其他分片都要把它置1。
分片偏移:13位fragmentationoffset是分片相對(duì)原始IP數(shù)據(jù)報(bào)開始處(僅指數(shù)據(jù)部分)的偏移。實(shí)際的偏移值是該值左移3位(乘8)后得到的。由于這個(gè)原因,除了最后一個(gè)IP分片外,每個(gè)IP分片的數(shù)據(jù)部分的長度必須是8的整數(shù)倍(這樣才能保證后面的IP分片擁有一個(gè)合適的偏移值)。
生存時(shí)間:8位TimeToLive是數(shù)據(jù)報(bào)到達(dá)目的地之前允許經(jīng)過的路由器跳數(shù)。TTL值被發(fā)送端設(shè)置(常見的值是64)。數(shù)據(jù)報(bào)在轉(zhuǎn)發(fā)過程中每經(jīng)過一個(gè)路由,該值就被路由器減1。當(dāng)TTL值減為0時(shí),路由器將丟棄數(shù)據(jù)報(bào),并向源端發(fā)送一個(gè)ICMP差錯(cuò)報(bào)文。TTL值可以防止數(shù)據(jù)報(bào)陷入路由循環(huán)。
協(xié)議:8位protocol用來區(qū)分上層協(xié)議,我們?cè)诘?章討論過。/etc/protocols文件定義了所有上層協(xié)議對(duì)應(yīng)的protocol字段的數(shù)值。其中,ICMP是1,TCP是6,UDP是17。/etc/protocols文件是RFC1700的一個(gè)子集。
頭部校驗(yàn)和:16位headerchecksum由發(fā)送端填充,接收端對(duì)其使用CRC算法以檢驗(yàn)IP數(shù)據(jù)報(bào)頭部(注意,僅檢驗(yàn)頭部)在傳輸過程中是否損壞。
源端IP地址和目的端IP地址:32位用來標(biāo)識(shí)數(shù)據(jù)報(bào)的發(fā)送端和接收端。一般情況下,這兩個(gè)地址在整個(gè)數(shù)據(jù)報(bào)的傳遞過程中保持不變,而不論它中間經(jīng)過多少個(gè)中轉(zhuǎn)路由器。
選項(xiàng)字段:option是可變長的可選信息。這部分最多包含40字節(jié),因?yàn)镮P頭部最長是60字節(jié)(其中還包含前面討論的20字節(jié)的固定部分)??捎玫腎P選項(xiàng)包括
記錄路由:recordroute告訴數(shù)據(jù)報(bào)途經(jīng)的所有路由器都將自己的IP地址填入IP頭部的選項(xiàng)部分,這樣我們就可以跟蹤數(shù)據(jù)報(bào)的傳遞路徑。
時(shí)間戳:timestamp告訴每個(gè)路由器都將數(shù)據(jù)報(bào)被轉(zhuǎn)發(fā)的時(shí)間(或時(shí)間與IP地址對(duì))填入IP頭部的選項(xiàng)部分,這樣就可以測(cè)量途經(jīng)路由之間數(shù)據(jù)報(bào)傳輸?shù)臅r(shí)間。
松散源路由選擇:loosesourcerouting指定一個(gè)路由器IP地址列表,數(shù)據(jù)報(bào)發(fā)送過程中必須經(jīng)過其中所有的路由器。
嚴(yán)格源路由選擇:strictsourcerouting和松散源路由選擇類似,不過數(shù)據(jù)報(bào)只能經(jīng)過被指定的路由器。
4.3.2 IPv6
IPv4的地址是32位的,大約可以提供42億個(gè)地址,但是在2011年IPv4地址就已經(jīng)被分配完了。于是又提出了IPv6,IPv6的地址是128位,IPv6相比于IPv4能帶來更好的網(wǎng)絡(luò)體驗(yàn)。
IPv6地址長度是128位,每16位算一組,組跟組之間用:
分割,如果出現(xiàn)連續(xù)的0時(shí)還可以將這些0省略,并用兩個(gè)冒號(hào)::
隔開。但是一個(gè)IP地址中只允許出現(xiàn)一次兩個(gè)連續(xù)的冒號(hào)。
IPv6首部
版本:和IPv4一樣,由4比特構(gòu)成。IPv6其版本號(hào)為6,因此在這個(gè)字段上的值為6。
通信量類:相當(dāng)于IPv4的TOS(TypeOfService)字段,也由8比特構(gòu)成。有TOS在IPv4中幾乎沒有什么建樹,未能成為卓有成效的技術(shù),本來計(jì)劃在IPv6中刪掉這個(gè)字段,不過出于今后研究的考慮還是保留了該字段。
流標(biāo)號(hào):由20比特構(gòu)成,準(zhǔn)備用于服務(wù)質(zhì)量控制。
有效荷載長度:有效荷載長度是指包的數(shù)據(jù)部分。IPv4的TL(TotalLength)是指包含首部在內(nèi)的所有長度。然而IPv6中的這個(gè)PlayloadLength不包括首部,只表示數(shù)據(jù)部分的長度。
下一個(gè)首部:相當(dāng)于IPv4中的協(xié)議字段。由8比特構(gòu)成。通常表示IP的上一層協(xié)議是TCP或UDP。不過在有IPv6擴(kuò)展首部的情況下,該字段表示后面第一個(gè)擴(kuò)展首部的協(xié)議類。
跳數(shù)限制:由8比特構(gòu)成。與IPv4中的TTL意思相同。為了強(qiáng)調(diào)可通過路由器個(gè)數(shù)這個(gè)概念,才將名字改為HopLimit。數(shù)據(jù)每經(jīng)過一次路由器就減1,減到0則丟棄數(shù)據(jù)。
源地址:由128比特構(gòu)成,表示發(fā)送端IP地址。
目標(biāo)地址:由128比特構(gòu)成,表示接收端IP地址。
IPv6擴(kuò)展首部:IPv6的首部長度對(duì)固定,無法將可選項(xiàng)將入其中,可通過擴(kuò)展首部對(duì)功能進(jìn)行了有效擴(kuò)展。擴(kuò)展首部通常介于IPv6首部與TCP/UDP首部中間。在IPv4中可選項(xiàng)長度固定為40字節(jié),IPv6的擴(kuò)展首部可以是任意長度。擴(kuò)展首部當(dāng)中還可以包含擴(kuò)展首部協(xié)議以及下一個(gè)擴(kuò)展首部字段。
IPv6改進(jìn):
取消了首部校驗(yàn)字段:因?yàn)樵趥鬏攲痈溌穼佣加行r?yàn)。
取消可選字段,IPv6首部固定40字節(jié)。
取消了分片跟重組;IPv4時(shí)數(shù)據(jù)按幀傳輸,中間會(huì)經(jīng)過拆分跟組合,而IPv6版本只允許在源主機(jī)跟目標(biāo)主機(jī)拆分重組,中間不允許了,對(duì)傳播速度進(jìn)行了提速。
按理來說IPv6那么牛應(yīng)該馬上投入使用替換IPv4,但是因?yàn)镮Pv4和IPv6不能相互兼容,所以不但要我們電腦、手機(jī)之類的設(shè)備支持,還需要網(wǎng)絡(luò)運(yùn)營商對(duì)現(xiàn)有的設(shè)備進(jìn)行升級(jí),所以目前IPv6普及率比較慢。
5、鏈路層MAC
其實(shí)上面已經(jīng)講解到很多關(guān)于鏈路層的設(shè)備了,比如網(wǎng)卡、路由器等等。
MAC層
接收方的MAC地址:全球唯一,6字節(jié)。
發(fā)送方的MAC地址:全球唯一,6字節(jié)。
協(xié)議類型:2個(gè)字節(jié),大部分的類型是IP數(shù)據(jù)包,然后IP里面包含TCP、UDP,以及HTTP等,類型0800=IP數(shù)據(jù)報(bào),類型0806=ARP請(qǐng)求跟應(yīng)答。
真正的數(shù)據(jù)層:一般46~1500字節(jié)。
CRC校驗(yàn):循環(huán)冗余檢測(cè)。通過XOR異或的算法,來計(jì)算整個(gè)包是否在發(fā)送的過程中出現(xiàn)了錯(cuò)誤。
這里重要說一遍,上圖中從上到下是以此包含的關(guān)系!
5.1鏈路層主要功能
5.1.1并發(fā)性解決
鏈路層主要解決的就是當(dāng)出現(xiàn)并發(fā)的時(shí)候,如何解決先后順序跟數(shù)據(jù)混亂問題。
分多個(gè)車道。每個(gè)車一個(gè)車道,這在計(jì)算機(jī)網(wǎng)絡(luò)里叫作信道劃分。
今天單號(hào)出行,明天雙號(hào)出行,輪著來。這在計(jì)算機(jī)網(wǎng)絡(luò)里叫作輪流協(xié)議。
不管三七二十一,有事兒先出門,發(fā)現(xiàn)特堵,就回去。錯(cuò)過高峰再出。我們叫作隨機(jī)接入?yún)f(xié)議。著名的以太網(wǎng)
用的就是這個(gè)方式。
5.1.2數(shù)據(jù)發(fā)送穩(wěn)健性
這個(gè)包是發(fā)給誰的?誰應(yīng)該接收?發(fā)送時(shí)出錯(cuò)咋辦?這里的解決辦法是用一個(gè)物理地址,叫作鏈路層地址,也常被稱作MAC地址。
MAC層簡圖
5.2鏈路層服務(wù)
數(shù)據(jù)鏈路層最基本的服務(wù)是將源計(jì)算機(jī)網(wǎng)絡(luò)層來的數(shù)據(jù)可靠的傳輸?shù)较噜徆?jié)點(diǎn)的目標(biāo)計(jì)算機(jī)的網(wǎng)絡(luò)層,為達(dá)到這一目的,數(shù)據(jù)鏈路層必須具備一系列相應(yīng)的功能:
將數(shù)據(jù)封裝為frame幀,幀是數(shù)據(jù)鏈路層的傳送單位。
控制幀的傳輸,包括處理傳輸差錯(cuò),調(diào)節(jié)發(fā)送速率與接收方相匹配。
在兩個(gè)網(wǎng)絡(luò)實(shí)體之間提供數(shù)據(jù)鏈路通路的建立、維持和釋放的管理。
上述這些功能具體表現(xiàn)在以下幾個(gè)方面。
5.3封裝成幀
為向網(wǎng)絡(luò)層提供服務(wù),數(shù)據(jù)鏈路層必須使用物理層提供的服務(wù)。而物理層是以比特流進(jìn)行傳輸?shù)?,這時(shí)數(shù)據(jù)鏈路層為了能實(shí)現(xiàn)數(shù)據(jù)有效的差錯(cuò)控制,就采用了一種幀
的數(shù)據(jù)塊進(jìn)行傳輸。在一段數(shù)據(jù)的前后分別添加首部和尾部,這樣就構(gòu)成了一個(gè)幀。接收端在收到物理層上交的比特流后,就能根據(jù)首部和尾部的標(biāo)記,從收到的比特流中識(shí)別幀的開始和結(jié)束。
幀首跟幀尾將數(shù)據(jù)封裝成幀
采用幀傳輸方式的好處是在發(fā)現(xiàn)有數(shù)據(jù)傳送錯(cuò)誤時(shí),只需將有差錯(cuò)的幀再次傳送,而不需要將全部數(shù)據(jù)的比特流進(jìn)行重傳,這就在傳送效率上將大大提高。
幀同步需解決問題
如何識(shí)別幀的開始與結(jié)束,這需要特殊的幀首部跟幀尾部來分割。
重傳的數(shù)據(jù)幀識(shí)別,接收方在接收到重傳的數(shù)據(jù)幀時(shí)是識(shí)別成新的數(shù)據(jù)幀,還是識(shí)別成已傳幀的重傳幀呢?這就要靠數(shù)據(jù)鏈路層的各種幀同步
技術(shù)來識(shí)別了。幀同步技術(shù)既可使接收方能從以上并不是完全有序的比特流中準(zhǔn)確地區(qū)分出每一幀的開始和結(jié)束,同時(shí)還可識(shí)別重傳幀。
5.4透明傳輸
由于幀的開始和結(jié)束的標(biāo)記是使用專門指明的控制字符,因此傳輸?shù)臄?shù)據(jù)中的任何8比特的組合一定不允許和用作幀定界的控制字符的比特編碼一樣,否則就會(huì)出現(xiàn)幀定界的錯(cuò)誤。
當(dāng)傳送的幀使用從鍵盤上輸入文本文件組成的幀時(shí),其數(shù)據(jù)部分顯然不會(huì)出現(xiàn)像SOH或EOT這樣的幀定界控制字符??梢姴还軓逆I盤上輸入什么字符都可以放在這樣的幀中傳輸過去,因此這樣的傳輸就是透明傳輸。
非透明傳輸
問題是如果你傳輸?shù)牟皇菑逆I盤輸入的,是二進(jìn)制代碼的計(jì)算機(jī)程序或圖像,如果是中間存在EOT則會(huì)導(dǎo)致錯(cuò)誤。解決辦法就是在數(shù)據(jù)部分如果碰到了EOT或SOH就添加個(gè)ESC轉(zhuǎn)移字符。
填充ESC后幀
5.5差錯(cuò)檢測(cè)
底層數(shù)據(jù)傳輸時(shí)候出現(xiàn)差錯(cuò),主要分為兩大類:
比特差錯(cuò):就是比特在傳輸過程中可能會(huì)產(chǎn)生差錯(cuò),即1可能會(huì)變成0,0可能會(huì)變成1。
幀丟失、幀重復(fù)、幀失序:比如發(fā)送的是123,接收到了13、1223、132這樣的順序包。
數(shù)據(jù)傳輸過程中的衡量指標(biāo)就是誤碼率BitErrorRate:就是在一段時(shí)間內(nèi),傳輸錯(cuò)誤的比特占所傳輸比特總數(shù)的比率。
實(shí)際的通信鏈路并非理想的,它不可能使誤碼率下降到零。所以為了保證數(shù)據(jù)傳輸?shù)目煽啃?,在?jì)算機(jī)網(wǎng)絡(luò)傳輸數(shù)據(jù)時(shí),必須采用各種檢測(cè)措施,目前在數(shù)據(jù)鏈路層廣泛使用了循環(huán)冗余檢驗(yàn)CRC(CyclicRedundancyCheck)的檢測(cè)技術(shù)。
6、數(shù)據(jù)傳輸?shù)墓适?/h2>
HTTP講解+TCP講解+本文IP講解+鏈路層講解=一個(gè)數(shù)據(jù)包的流浪日記,如果純技術(shù)性文章感覺太枯燥,接下來我們以一個(gè)不太嚴(yán)謹(jǐn)?shù)纳钆e例,將知識(shí)點(diǎn)串聯(lián)下:
小S
你叫小S,跟很多小伙伴住在一個(gè)小區(qū)里,當(dāng)你想跟小伙伴玩耍的時(shí)候就喊一喊(集線器),大家都聽到后,想玩的下來陪你玩。不想跟你玩的人感覺聽到噪音很煩躁,就讓李大爺在傳達(dá)室充當(dāng)交換機(jī),你想跟院子里人玩的時(shí)候,跟交換機(jī)李大爺說下,李大爺會(huì)告知你要找的小伙伴信息。
找人通訊
后來你被限足了,不允許出小區(qū)大門。此時(shí)你想跟外界小C交流,你把信息發(fā)給李大爺,李大爺看到想跟外面通訊。就讓你按照外面統(tǒng)一通信的方式(TCP/IP)把信息寫好,你發(fā)現(xiàn)信封收件地址寫的小W收,這地址放到外面沒法派送??!你找小L問下真實(shí)地址,小L拿出了姓名-地址映射薄(DNS)查詢后告訴了你小C真實(shí)地址,然后李大爺叫來了專門負(fù)責(zé)這個(gè)小區(qū)快遞的快遞員(路由器),這里需注意小區(qū)對(duì)外只暴露一個(gè)公共的地址(公網(wǎng)IP),但是小區(qū)不能只有一個(gè)人??!小區(qū)里面被分成了N個(gè)房間(私網(wǎng)IP),因?yàn)樾^(qū)里N個(gè)住戶可能會(huì)調(diào)換房間,所以每當(dāng)想對(duì)外通訊的時(shí)候,快遞員路由器會(huì)給你動(dòng)態(tài)的分配個(gè)內(nèi)網(wǎng)IP,并且快遞員牛逼之處在于即使兩個(gè)住戶用相同的方式(端口)把信息發(fā)出去快遞員也會(huì)自動(dòng)給你重新分配不一樣的端口,這叫NAT技術(shù)。
快遞員路由器把你的信息通過順豐/韻達(dá)(貓)方式把信息由數(shù)字信號(hào)變?yōu)?a class="article-link" target="_blank" href="/baike/1339339.html">脈沖信號(hào)再發(fā)出去,信息不是直達(dá)小C小區(qū)的哦!就跟你的深圳快遞發(fā)送到北京可能經(jīng)過多個(gè)中轉(zhuǎn),雖然你的發(fā)件人收件人地址固定死了,但中間可能經(jīng)過各種路由各種中轉(zhuǎn),這里其實(shí)就用到了ARP包跟根據(jù)MAC地址轉(zhuǎn)發(fā),提供路由功能是因?yàn)榭爝f員有個(gè)小本(路由表)記錄著下一站地址,反正最終信息會(huì)到達(dá)小C小區(qū)的傳達(dá)室,傳達(dá)室王大爺在鎮(zhèn)守,王大爺會(huì)按照相同的方法把信息最終發(fā)到小C手里。
派件快遞
你還有個(gè)朋友小A,他住的小區(qū)由孫大爺看門,因?yàn)樾的院子剛蓋好,孫大爺剛來不久,孫大爺沒有李大爺跟王大爺辦公室的電話,李大爺跟王大爺也沒有孫大爺?shù)牡碾娫挘@時(shí)會(huì)有兩種情況:
居委會(huì)趙大媽告訴了孫大爺關(guān)于李、王兩位大爺?shù)牡刂?,同時(shí)趙大媽也告訴了李、王關(guān)于孫的地址,這就叫靜態(tài)設(shè)定路由。
趙大媽病了,孫大爺自己到處發(fā)信息,見人就說自己是我是小A他們?cè)鹤庸苁瞻l(fā)信件的,結(jié)果被李、王二位大爺聽到了,就記在了他們的通訊錄(路由表)上,然后李、王就給孫大爺回了個(gè)信息說自己是那個(gè)院子負(fù)責(zé)收發(fā)信息的,這叫動(dòng)態(tài)設(shè)定路由。
有天小S要找小A,小S給李大爺說需求,孫大爺通過通訊錄(路由表)查詢到小A院子孫大爺管著呢,此時(shí)目標(biāo)是找孫大爺,不過有兩種途徑
李大爺直接去找孫大爺。
李大爺找王大爺,讓王大爺去找孫大爺。
李大爺選擇1還是2這叫做路由選擇。李大爺當(dāng)然選擇1了,因?yàn)樗裱钌俨襟E原則。
相互聯(lián)系
前幾天小S和小C吵架了,恰好這些天小S老是給小A打電話,小C心想小S是不是在說我人品不行啊,于是小C決定偷聽小S和小A的通話,但是他又不能出院子,怎么辦呢?小C做了這樣一個(gè)決定:首先小C告訴王大爺說“你給李大爺打電話說小A搬到咱們?cè)鹤恿?,以后凡是打給他的電話我來接”,王大爺迷迷糊糊就給李大爺打了電話,說:“現(xiàn)在我來管理小A,孫大爺不管了”,結(jié)果李大爺就把他的通訊錄改了,這叫做路由欺騙
。
以后小S再找小A,李大爺就轉(zhuǎn)給王大爺了,王大爺收到了這個(gè)信息就轉(zhuǎn)給了小C,小C收到這個(gè)信息就假裝小A和小S通信。因?yàn)樾作賊心虛,害怕明天小S和小A見面后當(dāng)面問他,小C又自己以小S的名義給小A通了個(gè)復(fù)述了一遍剛才通訊信息,有這就叫數(shù)據(jù)竊聽
。
再后來,小S還是不斷的和小A聯(lián)系,小C心里嘀咕“你小S不是不給我打電話嗎!那我讓你也給小A打不了!
小C聯(lián)系了一批狐朋狗友,和他們串通好,每天固定一個(gè)時(shí)間大家一起給小A院子傳達(dá)室發(fā)信息,只要傳達(dá)室的孫大爺開始接收,就會(huì)聽到“打雷啦,下雨收衣服?。?rdquo;、“人是人他媽生的,妖是妖他媽生的”、“你媽貴姓”等等,聽的腦袋都大了,不聽又不行,電話不停的響??!
終于有一天,孫大爺忍不住了,大喊一聲:“我受不了拉!?。。?rdquo;,于是上吊自殺了!
這就是最簡單的DDOS攻擊,孫大爺心理承受能力弱的現(xiàn)象叫做數(shù)據(jù)報(bào)處理模塊有BUG
,孫大爺?shù)淖詺⒔凶?code>路由器癱瘓。
如果孫大爺身體健壯可以應(yīng)付這些垃圾信息,這叫健壯的數(shù)據(jù)報(bào)處理,能夠抵御任何攻擊。孫大爺癱了之后,小S終于不再給小A打電話了,因?yàn)闊o論他無論如何發(fā)信息,對(duì)方都是拒絕服務(wù),所以小C的做法還有一個(gè)名字叫做拒絕服務(wù)攻擊
。
新人小B入住
幾天后,小C的院子來了一個(gè)美麗的女孩,名字叫做小B,小C很喜歡她,可是小B有個(gè)很帥的男朋友,小C干瞪眼沒辦法。同時(shí)小B是不能出院子的。那個(gè)男的想追小B自然只能發(fā)信息,于是小C又蠢蠢欲動(dòng)了。小C了解到王大爺之所以能管理電話是因?yàn)樗幸粋€(gè)通訊錄,因?yàn)橥粋€(gè)院子可能有2個(gè)孩子都叫小C,靠名字無法區(qū)分,所以通訊錄上每一行只有兩項(xiàng):
門牌(MAC)電話(IP)
一號(hào)門 1234567 (一號(hào)門里面是小C)
二號(hào)門 7654321 (二號(hào)門里面是小B)
每次發(fā)信息人家都要說出要找的電話號(hào)碼(IP),然后通過通訊錄去院子里面敲門,比如人家說我找1234567,王大爺就去敲一號(hào)門收信息,如果是找7654321,那他就找二號(hào)門收信息。這里的電話號(hào)碼就是傳說中的IP地址
。這里的門牌號(hào)就是傳說中的網(wǎng)卡的MAC
地址,每一塊網(wǎng)卡的MAC
地址都是不一樣的,這是網(wǎng)卡的制造商寫死在網(wǎng)卡的芯片中的。
小C為了泡妞打起了王大爺通訊錄的主意,小C趁王大爺去上廁所時(shí),偷偷的摸進(jìn)傳達(dá)室,小心翼翼的改了王大爺?shù)耐ㄓ嶄洝_^了幾天,小B的男朋友又給小B來了信息,對(duì)方報(bào)的是7654321,王大爺一看通訊錄:
門牌(MAC)電話(IP)
一號(hào)門 1234567 (一號(hào)門里面是小C)
一號(hào)門 7654321 (被修改成映射到一號(hào)門)
王大爺不知道改了啊,于是就去找一號(hào)門的小C了,小C以小B父親的口吻嚴(yán)厲的教訓(xùn)了那個(gè)男的和小B之間不正當(dāng)?shù)哪信P(guān)系,并責(zé)令小B男朋友立馬跟小B分手。這里小C的行為叫做ARP欺騙
,因?yàn)樵趯?shí)際的網(wǎng)絡(luò)上是通過發(fā)送ARP
數(shù)據(jù)包來實(shí)現(xiàn)的,所以叫做ARP欺騙。
這里要注意,王大爺現(xiàn)在有兩個(gè)通訊錄了,一個(gè)是記錄每個(gè)院子傳達(dá)室電話的本本,叫做路由表
,一個(gè)是現(xiàn)在說的記錄院子里面詳細(xì)信息的本本,叫做ARP表
,王大爺為了保證安全可以把表藏起來,這就對(duì)應(yīng)程序加密解密。
王大爺?shù)膯T工手冊(cè)中有一條是這么寫的每個(gè)月要重新檢查一下門牌號(hào)和電話的對(duì)應(yīng)本,也就是ARP表
,這個(gè)動(dòng)作叫做刷新ARP表,每個(gè)月的時(shí)間限制叫做刷新ARP表的周期。這樣小C為了讓那個(gè)男的永遠(yuǎn)不能找到小B,之后每個(gè)月都要偷偷改一次那個(gè)通訊錄,不過這樣也是不得不做的事啊!
補(bǔ)充一點(diǎn),小C是很聰明的,如果通訊錄(ARP表)被改成了這樣:
門牌(MAC)電話(IP)
一號(hào)門 1234567 (這個(gè)是小C的)
二號(hào)門1234567(注意:這個(gè)被小C改了,但是他一時(shí)頭暈改錯(cuò)了)
計(jì)算機(jī)就會(huì)彈出一個(gè)對(duì)話框提示出現(xiàn)重復(fù)的IP地址
,最終會(huì)導(dǎo)致王大爺不知所措,于是通知一號(hào)門和二號(hào)門,你們的電話重復(fù)了。這樣小B就知道有人在破壞她的好事,這個(gè)現(xiàn)象叫做騙局被揭穿了。
當(dāng)然小S為了防止自己通話被人竊聽,也可以對(duì)通話內(nèi)容進(jìn)行加密,這部分細(xì)節(jié)在HTTP中講到了。
5、參考
說網(wǎng)關(guān):https://zhuanlan.zhihu.com/p/35200000
TCP/IP講解:https://developer.51cto.com/art/201906/597961.htm
小林網(wǎng)絡(luò):https://t.1yb.co/fQG3