ipv4协议的详解
一、 IPv4協議報頭格式?
0??????????????????????? 4????????????????????????? 8?????????????????????????????????????????????? 16???????????????????? 19????????????????????????? 24????????????????????????????????????????? 32?
版本 Version | IP頭長度 IHL | 服務類型(TOS) Type of Service | 總長度 ??????? Total Length???????? | ||
標識符號 ????????? Identification??????? | 標記 Flags | 分段偏移量 Fragment Offset | |||
存活時間 Time to Live | 協議 Protocol?? | 包頭校驗和 Header Checksum?? | |||
????????????????????? 源IP地址 ???????????????????????? Source Address?? | |||||
???????????????????? 目的IP地址 ?????????????????????????????????????????????? Destination Address????????????????????? | |||||
IP選項(若有的話) Options | 填充 Padding | ||||
說明:
Version : 4 bits,顯示當前正在運行的IP版本信息。當前為4
IHL :?? 4 bits,標明了以32比特為單位的消息中數據報報頭的長度,這是所有報頭的總長度。注意:它的最小值為5
Type of Service : 8 bits,標明了一個特定的上層協議所分配的重要等級。
TOS字段包括一個3 bit的優先權子字段(現在已被忽略),4 bit的TOS子字段和1 bit未用位但必須置0。4 bit的TOS分別代表:最小時延、最大吞吐量、最高可靠性和最小費用。4 bit中只能置其中1 bit。如果所有4 bit均為0,那么就意味著是一般服務。每TOS值最多只能有一個為1.
如下所示:
? ? ? ? ? ? ? ? ? ?協議?????????????????????? TOS 值
?????????TELNET/RLOGIN (1)????? 1000????????????????? (minimize delay)
??????????FTP
?????????? Control ? ? ? ? ? ? ? ? ? ? ? ? ? 1000????????????????? (minimize delay)
?????????? Data (2) ? ? ? ? ? ? ? ? ? ? ? ? ?0100???????????????? (maximize throughput)
?????????TFTP? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1000???????????????? (minimize delay)
?????????SMTP (3)
?????????? Command phase ? ? ? ? ? 1000???????????????? (minimize delay)
?????????? DATA phase ? ? ? ? ? ? ? ? ? 0100???????????????? (maximize throughput)?????????????????????????????????????????
????????Domain Name Service
?????????? UDP Query ? ? ? ? ? ? ? ? ? ? 1000???????????????? (minimize delay)
?????????? TCP Query ? ? ? ? ? ? ? ? ? ? ?0000
?????????? Zone Transfer ? ? ? ? ? ? ? ?0100???????????????? (maximize throughput)
????????NNTP? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0001???????????????? (minimize monetary cost)
????????ICMP
?????????? Errors ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0000
?????????? Requests ? ? ? ? ? ? ? ? ? ? ? ?0000 (4)
?????????? Responses??????? <same as request> (4)
?????????Any IGP? ? ? ? ? ? ? ? ? ? ? ? ? ?0010???????????????? (maximize reliability)
?????????EGP? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0000
????????SNMP? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0010???????????????? (maximize reliability)
????????BOOTP? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0000
Total Length:? 16 bits,標明整個分組的長度,以字節為單位。總長度減去IHL就是數據有效載荷的長度。理論上最大長度可以為65535,但報文經過數據鏈路層時很可能被分片。
Identification:? 16 bits,包含一個整數,用來標識當前的數據報。這是一個序列號。
Flag:?? 3 bits,實現不同的控制功能:
Bit 0 :?保留,必須置零。
Bit 1: (DF)?????為0?表示可以對分組進行分片
???????????????????????為1?表示不可以對分組進行分片
Bit 2: (MF)????為0?表示該數據段是本分組中最后的一個數據分段
為1??表示后面還有數據分段
Fragment Offset:? 13 bits。指示分段在數據包中的位置,用于重組數據分段。這個字段允許標記字段終止在16 Bit的邊界
TTL : 8 bits,指示分組在網絡傳輸中的允許保持的時間,以秒為單位。當該計時器為0時,數據報將被丟棄。
Protocol :? 8 bits,指明了在IP處理過程結束后,哪一個上層協議將接收這些數據。
Header Checksum : 16 bits,用于確保IP頭的完整性。
Source Address : 32 bits,指明了發送節點的IP地址。
Destination Address : 32 bits,指明了接收節點的IP地址。
Options :長度可變的字段,讓IP支持不同的功能特性。比如安全性。
???????該字段可能是零,或者更多的選項。該字段有2中使用情形:
????????? 1:用單一的一個字節表示選項類型
????????? 2:一個選項類型字節,一個選項長度字節,一個數據長度字節
Padding:這個字段以額外的0來填充IP報頭,以確保其長度為32 bit的倍數。
其后就是數據字段。
二、IPv4分組的地址
1. IP地址和MAC地址的區別
1.???MAC地址是每塊網卡的硬件地址,用于數據鏈路層的幀傳遞地址;IP地址是網絡層地址(也稱邏輯地址),用于路由器尋址
2.???IP地址標識的是一臺主機或路由器與網絡的接口,而MAC地址唯一地標識一臺主機
3.???網橋,Ethernet交換機屬于數據鏈路層設備,使用MAC地址,不屬于網絡層設備,所以不分配IP
2. IP地址的分配概念
IP地址的分配可以分下面3種情況:?
1. 為每一個網絡接口分配一個IP地址?
一臺計算機連入網絡,需分配一個IP地址,與MAC地址一一對應,且在Internet中唯一的?
2. 為多歸屬主機的每一個網絡接口分配響應的IP地址?
路由器通過多個網卡連接到多個網絡時,需為每個網卡分配一個IP地址?
3. 可以為一個網絡接口分配多個IP地址
總結來說:?
1、連接到Internet的每一個主機(計算機或路由器)至少有一個IP地址?
2、IP地址是分配給網絡接口的?
3、多歸屬主機可以有多個IP地址,一個網絡接口也可以分配多個IP地址
3. IP的點分十進制表示方法
IPv4的地址長度為32位,點分十進制表示通常采用 x. x. x. x的格式,每個x為8位。(點分十進制從字面上理解,用點分隔,每個字段用十進制表示)
IP地址的分類有5中分類:A類,B類,C類,D類和E類地址?
網絡號:用于識別主機所在的網絡?
主機號:用于識別該網絡中的主機
A類保留給政府機構,B類分配給中等規模的公司,C類分配給任何需要的人,D類用于組播,E類用于實驗,各類可容納的地址數目不同
(tip:網絡號加粗表示)
A類地址
(1)A類地址網絡號第一位固定為0,其它7位可以分配,主機號長度為24位?
(2)網絡號分配的數量為2^7 = 128,地址范圍為:1.0.0.0—127.255.255.255?
(3)10.0.0.0-10.255.255.255是私有地址(所謂的私有地址就是在互聯網上不使用,而被用在局域網絡中的地址,路由器接收到私有地址,不會向Internet轉發該分組,私有地址與NAT相關)?
(4)127.0.0.0-127.255.255.255是保留地址,用做循環測試用的?
(5)0.0.0.0—0.255.255.255也保留用作特殊用途?
(6)因此網絡號可分配的只有125個,每個網絡段的主機號可以分配的只有 2^24-2=16777214個(主機號全0和主機號全1保留)
B類地址
(1)B類地址網絡號第1,2位固定為10,其它14位可以分配,主機號長度為16位?
(2)地址范圍為:128.0.0.0—191.255.255.255?
(3)172.16.0.0—172.31.255.255是私有地址?
(4)169.254.0.0—169.254.255.255是保留地址(如果你的IP地址是自動獲取IP地址,而你在網絡上又沒有找到可用的DHCP服務器。就會得到其中一個IP)?
(5)每個網絡段可分配的主機號為2^16 - 2 = 65534(主機號全0和主機號全1保留)
C類地址
(1)C類地址網絡號前3位固定為110,其它21位可以分配,主機號長度為8位?
(2)C類地址范圍:192.0.0.0—223.255.255.255?
(3)192.168.0.0—192.168.255.255是私有地址?
(4)網絡號可分配的塊數為2^21 = 2097152,沒塊網絡號可分配的主機號數為2^8-2 = 254(主機號全0和主機號全1保留)
D類地址
D類IP地址不標志網絡,前4位固定為1110,地址范圍為:224.0.0.0—239.255.255.255,用作特殊用途,如多播地址
E類地址
E類地址不分網絡地址和主機地址,它的第1個字節的前四位固定為1111。E類地址范圍:240.0.0.0—255.255.255.255,用于某些實驗和將來使用
總結上述的規律
1.???ABC三類地址的主機號全0和全1都保留,主機號全1為子網廣播地址,主機號全0為子網網絡地址(一個網段中第一個IP地址為網絡地址)
2.???A類地址的第1塊網絡號和第2塊網絡號要保留
ABC三類地址中的特殊IP地址
(1)直接廣播地址?
如果主機號全1,例如191.1.255.255,那么這個地址為直接廣播地址?
路由器將這個分組以廣播的形式發送到網絡號位191.1.x.x的全部主機?
(2)受限廣播地址?
網絡號與主機號的32位全為1(255.255.255.255)為受限廣播地址?
用來將一個分組以廣播方式發送給本網的所有主機?
(3)“這個網絡上的特定主機”地址?
網絡號是全0 (如0.0.0.25) 的地址是這個網絡號的特定主機地址?
路由器接到這樣的分組,不向外轉發,而是直接交付給本網絡中主機號為25的主機?
(4)回送地址?
A類地址中127.0.0.0是回送地址,它是一個保留地址
三、IPv4地址的子網劃分
子網劃分的思想:借用主機號的一部分作為子網的子網號,劃分出更多的子網IP地址,對于外網來說這些子網仍然像一個網絡一樣,這對于路由器的尋址沒有影響
1. 子網地址結構
1.???標準的ABC類IP地址是兩級結構:網絡號—主機號,而劃分子網后,IP地址的結構為三級結構:網絡號—子網號—主機號
2.???同一個子網的主機,網絡號和子網號必須相同
3.???子網之間的距離必須很近,例如一個公司或者校園內
2. 子網掩碼
引入子網后,如何從IP地址中提取出子網號?子網掩碼就是用來解決這個問題的?
子網掩碼的作用:從一個IP地址中提取出子網號?
子網掩碼的表示:網絡號和子網號全改為1,主機號全改為0?
實例:一個B類IP地址的子網劃分
該B類IP地址190.1.2.26,劃分出64個子網?
1. 借用原16為主機號的6位作為子網號,剩余10位為主機號?
2. 根據子網掩碼的格式,得出子網掩碼為:255.255.252.0,或表示成190.1.2.26/22(”/22“表示第22位開始為主機號)
3. 子網的規劃和地址劃分的方法
例:一個校園網要對一個B類地址(156.26.0.0)進行子網劃分。該校園網有近210個局域網組成。?
由于210個局域網最接近2^8=256,所以可行的方案是從主機號借8位來作為子網號,這樣的子網的掩碼為:255.255.255.0 或 156.26.0.0/22(”/22“表示第22位開始為主機號)
以上子網劃分結果為:?
子網1:156.26.1.1~156.26.1.254?
子網2:156.26.2.1~156.26.2.254?
……?
子網254:156.26.254.1~156.26.254.254
至于子網0:156.26.0.1~156.26.0.254和子網254:156.26.255.1~156.26.255.254,即子網號是否能夠為全0或者全1,值得商榷!
由于主機號不能全為1或者全為0,每個子網的主機號有254個
子網長度的確定,應考慮兩個因素:子網數與每個子網中主機與路由器數。子網數要考慮留有一定余量為原則
4. 可變長度的子網掩碼劃分方法
用一個例子來說明:?
某公司申請一個C類202.60.31.0的IP地址,該公司有100名員工在銷售部,50名在財務部,50名在設計部。要求為銷售部門、財務部門、設計部門分別組建子網
分析:
三個部門是三個子網,我們很容易想到,只需要借出2位來作為子網號就行。但是借了2位后,主機號只剩下6位,則每一個子網的最大主機號為2^6 = 64個,小于銷售部門的100個主機,所以行不通!
這時,可以采用可變長度的子網掩碼劃分方法:?
(1)銷售部100臺主機,所以主機號至少為7位,則子網號為1位,此時子網掩碼:255.255.255.128(11111111.11111111.11111111.1000000)或202.60.31.0/25(第25位開始為主機號)?
子網位為0:202.60.31.1(0?000 0001)~ 202.60.31.126(0?111 1110) (作為銷售部子網)?
子網位為1: 202.60.31.129(1?000 0001)~ 202.60.31.254(1?111 1110)
(2)對子網位為1的情況,再劃分出兩個子網給財務部門和設計部門,剩下的兩個部門只需要6個主機號,所以可以用2位作為子網號,子網掩碼為255.255.255.192(11111111.11111111.11111111.1100000)或202.60.31.0/26(第26位開始為主機號)?
子網位為10:202.60.31.129(10?00 0001)~ 202.60.31.190 (10?11 1110)(作為財務部子網)?
子網位為11:202.60.31.193(11?00 0001)~ 202.60.31.254(11?11 1110)(作為設計部子網)
tips:子網號加粗,主機號全0和全1不能使用
一個問題:
第3點子網的規劃和地址劃分的方法說到了子網號和主機號不能為全0或者全1,但是第4點可變長度的子網掩碼劃分方法中,卻存在子網號為0或者11的情況,那么子網號到底能不能為全0或者全1呢??
子網號全0或者全1要看網絡設備所使用的路由器協議支持不支持,以前的老版的協議都是不支持,新版本可以支持,老的書籍或者資料都不用全0和全1子網,新的允許用
四、CIDR(無類別域間路由)
1. CIDR的概念和格式
其實在上述博文中,已經不經意間提到了CIDR,例如156.26.0.0/16?
CIDR其實講得是IP地址的格式問題,標準的IP地址的點分十進制是網絡號—主機號的二層結構,而CIDR用區別于傳統標準分類的IP地址與劃分子網的概念的“網絡前綴(network -prefix)”,用”<網絡前綴>/<主機號>“代替網絡號—主機號的二層結構,形成新的無分類二層地址結構
<網絡前綴>/<主機號>
<網絡前綴>/<主機號>這種格式為:”斜線記法“。如:200.16.23.0/20表前20位為網絡前綴,后12位為主機號
同標準的分類IP地址一樣,主機號全0的網絡地址和全1的廣播地址不分配給主機
2. CIDR的應用
例如:一個校園網獲得200.24.16.0/20的地址塊,希望將它劃分為8個等長的較小的地址塊
五、網絡地址轉換NAT
NAT的作用有兩個:?
1. 解決網絡地址短缺,支持IP地址復用?
2. 網絡安全
例如在企業內部,NAT和代理服務器、防火墻結合使用,采用一個內部專用IP和一個全局IP一對一的靜態映射,達到隱藏內部網絡地址的目的
IP地址復用原理
NAT技術解決IP地址短缺,主要用于ISP,ADSL,有線電視和無線移動接入的動態IP地址分配
原理:?
例如ISP有1000個全局IP地址,但是它有5000個使用專網內部專用IP的用戶。?
ISP在具有NAT功能的路由器中保持一個IP地址池,管理著多個全局IP地址。凡是需要訪問外部Internet的用戶,首先想NAT路由器申請,由NAT臨時分配一個全局IP地址給用戶;用戶訪問結束后,NAT路由器收回IP地址,供其他用戶使用。
之前提到過一個私有地址,所謂的私有地址就是在互聯網上不使用,而被用在局域網絡中的地址,路由器接收到私有地址,不會向Internet轉發該分組,那么主機該如何通過私有地址和Internet進行通信?
NAT就是私有地址和全局地址轉換的功能!
解決全局IP地址不夠用:連端口號一起轉換!
NAT的有動態NAT和靜態NAT兩種?
“靜態NAT”:一對一,配置一個內部專用IP地址對應一個公用IP地址。?
“動態NAT”:多對多,多個專業IP地址對應一個或幾個全局IP地址。可實現IP地址的重用節約IP地址。如:ISP有1000個全局地址,但它有5000個使用專用內部專網IP地址的用戶。
NAT的工作原理
私有地址為10.0.1.1的主機如何訪問地址為135.2.1.1的web服務器??
(1)產生一個源地址為10.0.1.1,端口為3342,目的地址為135.2.1.1,端口號為80的ip分組,轉發到NAT功能的路由器?
(2)NAT路由器將私有地址轉換成全局IP地址202.0.1.1,產生一個源地址為202.0.1.1,端口為5001,目的地址為135.2.1.1,端口號為80的ip分組?
(3)地址為135.2.1.1,端口號為80的web服務器接收到該IP分組后,,返回源地址為135.2.1.1,端口號為80,目的地址為202.0.1.1,端口為5001為80的ip分組?
(4)NAT路由器將全局IP地址轉換成私有地址,產生源地址為135.2.1.1,端口號為80,目的地址為10.0.1.1,端口為3342的ip分組,主機10.0.1.1接受
NAT的潛在問題
由于NAT(NAPT)都依賴于自己的轉換表,所以會有一下問題:
1.???無法從NAT外部向內部服務器建立連接
2.???轉換表的生成和轉換操作都會產生一定的開銷
3.???通信過程中一旦NAT發生異常需要重新啟動時,所有的TCP連接都會被重置
4.???即便備置兩臺NAT做容災備份,TCP連接還是會被斷開
六、IPv6協議
1. IPv6地址的表示
IPv6地址采用”冒號十六進制表示法“,將128位地址按每16位劃分為一個位段,每個位段轉換為一個4位的十六進制數
例如:?
二進制:?
0010000111011010000000000000000000000000000000000000000000000000?
0000001010101010000000000000111111111110000010001001110001011010
1.??? 冒號十六進制表示法:?
21DA : 0000 : 0000 : 0000 : 02AA : 000F : FE08 : 9C5A
2.??? 如果某段存在幾位都是0的情況,可以使用零壓縮法壓縮:
零壓縮法:00D3(D3),02AA(2AA),000A(A),0000(0),但是AB08不能壓縮為AB8
21DA : 0 : 0 : 0: 2AA : F : FE08 : 9C5A
3.??? 如果存在幾個連續位段都是0,可以用”雙冒號表示法“?
21DA : :2AA : F : FE08 : 9C5A?
用”雙冒號表示法“表示的一個問題:如何確定冒號省略的段數??
8 - 現有段數 = 冒號省略的段數
2. IPv6的前綴
在IPv4中,子網掩碼用來表示網絡和子網地址長度。用前綴長度來區分子網號和主機號。而?IPv6不支持子網掩碼,只支持前綴長度表示法,用“地址/前綴長度”表示
64位前綴是一個子網前綴,少于64位的前綴是一個路由前綴,或是一個地址范圍。?
例如:?
21DA:D3::/48 是一個路由前綴?
21DA:D3:0:2:2F3B::/64是一個子網前綴
3. IPv6的結構
版本
意義和IPv4相同,值為6表示使用Ipv6協議
流量類型
表示IPv6分組的類型或優先級,類似IPv4的服務類型字段
流標記
表示分組屬于源節點和目標節點之間的一個特定分組序列
載荷長度
載荷長度表示有效載荷的長度,包括擴展報頭和高層PDU
下一個報頭
表示若存在擴展報頭,“下一個報頭”值表示下一個擴展報頭的類型
跳步限制
與IPv4的TTL相似
源地址和目的地址
發送主機的地址和要發送的目標主機地址
七、IPv4和IPv6共存——隧道技術
隧道技術指的是IPv6分組進入IPv4網絡時,將IPv6分組封裝成IPv4分組,整個IPv6分組變成IPv4的數據部分。當IPv4分組離開IPv4網絡時,再將其數據部分交給主機IPv6協議,這就像在IPv4網絡中打通了一個隧道來傳輸IPv6。
隧道配置
隧道配置分為路由器-路由器,路由器-主機或主機-路由器,主機-主機三種情況,以及手動配置的隧道與自動配置的隧道兩種類型?
(1)路由器-路由器隧道
(2)路由器-主機或主機-路由器
(3)主機-主機
總結
- 上一篇: 技术领导力: 深度访谈《深入分布式缓存》
- 下一篇: ES8JC-ASEMI快恢复二极管ES8