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