其實(shí)學(xué)習(xí)網(wǎng)絡(luò)知識(shí),就是在學(xué)習(xí)大佬們定義的一堆規(guī)則,而這些規(guī)則細(xì)化到每一個(gè)bit,每個(gè)0和1的含義,各大廠商都遵守這個(gè)游戲規(guī)則,那么大家就可以通信了。而從根本上說(shuō),對(duì)這些規(guī)則的熟悉程度和在實(shí)際工作中運(yùn)用的熟練程度,決定了一名網(wǎng)絡(luò)工程師的Level。今天就帶大家詳細(xì)的梳理一下IPv4和IPv6的報(bào)文格式,這是網(wǎng)絡(luò)層中最核心基本的游戲規(guī)則,掌握了它,是進(jìn)階的基礎(chǔ)。 一、IPv4報(bào)文詳解IPv4報(bào)文長(zhǎng)度:20Byte-60Byte; Version:4bit,二進(jìn)制0100 IPv4,二進(jìn)制0110 IPv6; Header Length(IHL):4bit,最大1111,最小0101,1個(gè)字長(zhǎng)是32bit是4個(gè)字節(jié),最大1111,十進(jìn)制為15,即15*4=60Byte,該字段在IPv6中被去掉了; Tpye of Service(ToS):8bit,QoS中IP Precedence、DSCP都是RFC通過(guò)對(duì)這8bit定義規(guī)則實(shí)現(xiàn)的; Total Length:16bit,十進(jìn)制最大65535,IPv4報(bào)文頭和數(shù)據(jù)之和; Identifier:與Flags、Fragment Offset聯(lián)用,實(shí)現(xiàn)較大的數(shù)據(jù)包分段,所有被拆分開(kāi)的小包有相同的Identifier,例如5000字節(jié)數(shù)據(jù)包穿過(guò)1500MTU的數(shù)據(jù)鏈路,該字段在IPv6中被去掉了; Flags:3bit,第1位reserved未使用,第2位DF(Don't Fragment)置1就代表不讓分段了,第3位MF(More Fragment),例如1個(gè)數(shù)據(jù)包被分段,第1個(gè)分段MF置1,第2個(gè)置1,第3個(gè)置1......直到最后1個(gè)置0,路由器知道了,原來(lái)分段結(jié)束了;該字段在IPv6中被去掉了; Fragment Offset:13bit,表示該分段在該組分段中的位置,該字段在IPv6中被去掉了; Time to Live(TTL):8bit,過(guò)1個(gè)設(shè)備減1個(gè),過(guò)了255個(gè)為0了就丟棄,為了防止環(huán)路; Protocol:8bit,表示協(xié)議號(hào),例如ospf為89,http默認(rèn)是80,該字段在IPv6中被去掉了; Header Checksum:16bit,IP頭部正確性校驗(yàn),該字段在IPv6中被去掉了; Source Address/Destination Address:32bit,IPv4地址長(zhǎng)度; Options:0-40Byte,用來(lái)支持排錯(cuò)、測(cè)量以及安全等措施;在必要的時(shí)候插入值為0的填充字節(jié)。主要用于測(cè)試起源設(shè)備根據(jù)需要改寫(xiě),處理攜帶這些Options的IPv4報(bào)文會(huì)占用設(shè)備很大的資源,因此實(shí)際中也很少使用,該字段在IPv6中被去掉了; Padding:IPv4報(bào)文頭是32bit的整數(shù)倍,在Option后面填充使用,該字段在IPv6中被去掉了; 二、IPv6報(bào)文詳解IPv6報(bào)文長(zhǎng)度:40Byte,長(zhǎng)度固定; Version:4bit,二進(jìn)制0110 IPv6; Traffic Class:8bit,等同IPv4ToS,用于QoS; Flow Label:20bit,用于區(qū)分實(shí)時(shí)流量,不同的流標(biāo)簽+源地址可以唯一確定一條數(shù)據(jù)流,中間網(wǎng)絡(luò)設(shè)備可以根據(jù)這些信息更加高效率的區(qū)分?jǐn)?shù)據(jù)流; Payload Length:16bit,類似IPv4 Total Length,最大也65535,但是可以有巨型數(shù)據(jù)包,通過(guò)逐跳選項(xiàng)擴(kuò)展報(bào)頭表示,并把本字段置0; Next Header:8bit,這里要么填I(lǐng)Pv6報(bào)頭后的第一個(gè)擴(kuò)展報(bào)頭(如果有的話)要么填I(lǐng)Pv6報(bào)頭后面跟的協(xié)議類型,拗口請(qǐng)看圖;如果沒(méi)有擴(kuò)展報(bào)頭的話,Next Header這個(gè)位置,實(shí)際上代替了IPv4中Protocol的作用; Hop Limit:8bit,就是TTL改了個(gè)名字而已; Source Address/Destination Address:128bit,IPv6地址長(zhǎng)度; IPv6和IPv4相比,去除了IHL、identifiers、Flags、Fragment Offset、Protocol、Header Checksum、 Options、Paddiing,新增了Flow Label和Next Header,而且理論上這Next Header可以無(wú)限擴(kuò)展; IPv4中的Header Checksum被去掉了,是因?yàn)镮Pv4經(jīng)過(guò)每個(gè)路由器都要改變TTL,意味著每個(gè)路由器都要重新計(jì)算這個(gè)值,這會(huì)大大的降低效率,由于數(shù)據(jù)鏈路技術(shù)的提高和32位循環(huán)冗余校驗(yàn)支持,以及第4層校驗(yàn)和提供了足夠的保護(hù),因而IPv6認(rèn)為頭部校驗(yàn)和不再必需。 三、IPv6擴(kuò)展報(bào)頭擴(kuò)展報(bào)頭:8bit Next Header,8bitExtension Header Len,剩下的都是Extension Header Data。一個(gè)IPv6報(bào)文可以包含0個(gè)、1個(gè)或多個(gè)擴(kuò)展報(bào)頭。IPv6擴(kuò)展頭長(zhǎng)度任意,不受40字節(jié)限制,但擴(kuò)展報(bào)頭總是8字節(jié)長(zhǎng)度的整數(shù)倍64bit;路由設(shè)備轉(zhuǎn)發(fā)時(shí)根據(jù)基本報(bào)頭中Next Header值來(lái)決定是否要處理擴(kuò)展頭,并不是所有的擴(kuò)展報(bào)頭都需要被轉(zhuǎn)發(fā)路由設(shè)備查看和處理的;除了目的選項(xiàng)擴(kuò)展報(bào)頭可能出現(xiàn)一次或兩次(一次在路由擴(kuò)展報(bào)頭之前,另一次在上層協(xié)議數(shù)據(jù)報(bào)文之前),其余擴(kuò)展報(bào)頭只能出現(xiàn)一次。 擴(kuò)展報(bào)頭分類:逐跳選項(xiàng)報(bào)頭、目的選項(xiàng)報(bào)頭、路由報(bào)頭、分段報(bào)頭、認(rèn)證報(bào)頭、封裝安全凈載報(bào)頭;多個(gè)擴(kuò)展報(bào)頭同時(shí)出現(xiàn),報(bào)頭必須按照下列順序出現(xiàn),下面我介紹的順序也就是必須遵循的出現(xiàn)順序; 逐跳選項(xiàng)報(bào)頭:Next Header字段值0,看上圖抓包截圖,IPv6 Hop-by-Hop Option那顯示的就是0;用于為在傳送路徑上的每跳轉(zhuǎn)發(fā)指定發(fā)送參數(shù),傳送路徑上的每臺(tái)中間節(jié)點(diǎn)都要讀取并處理該字段。主要用于巨型載荷(載荷長(zhǎng)度超過(guò)65535字節(jié))、設(shè)備提示和資源預(yù)留; 目的選項(xiàng)報(bào)頭:Next Header字段值60,目的選項(xiàng)報(bào)頭攜帶了一些只有目的節(jié)點(diǎn)才會(huì)處理的信息。目前,目的選項(xiàng)報(bào)文頭主要應(yīng)用于移動(dòng)IPv6; 路由報(bào)頭:Next Header字段值43,路由報(bào)頭和IPv4的Loose Source and Record Route選項(xiàng)類似,該報(bào)頭能夠被IPv6源節(jié)點(diǎn)用來(lái)強(qiáng)制數(shù)據(jù)包經(jīng)過(guò)特定的設(shè)備。IPv4的Option功能挪到這里實(shí)現(xiàn)了,在IPv4選項(xiàng)中,有Loose Source、Strict Source、Record Route、Timestamp這四種常用的可選項(xiàng); 分段報(bào)頭:Next Header字段值44,IPv6中分段報(bào)文用的;IPv4的identifiers、Flags、Fragment Offset的功能在這里實(shí)現(xiàn)了; 認(rèn)證報(bào)頭:該報(bào)頭由IPsec使用,提供認(rèn)證、數(shù)據(jù)完整性以及重放保護(hù); 封裝安全凈載報(bào)頭:該報(bào)頭由IPsec使用,提供認(rèn)證、數(shù)據(jù)完整性以及重放保護(hù)和IPv6數(shù)據(jù)報(bào)的保密; IPv6牛哄哄的自帶光環(huán),直接支持IPsec,哈哈,說(shuō)到這里,感覺(jué)如何,如有不妥之處,多多斧正,歡迎來(lái)噴,樂(lè)意與您共同提高進(jìn)步,每天一點(diǎn)點(diǎn)。 |
|