中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

20張(zhang)圖(tu)說(shuo)清楚 IP 協(xie)議(yi)

大家好,我是風箏

輕解(jie)網絡系列又來(lai)了。已有高清 PDF 版本可(ke)(ke)以(yi)離(li)線閱讀了,全冊 65 頁,如果有需要離(li)線版的高清 PDF 可(ke)(ke)以(yi)。

今(jin)天咱們說(shuo)(shuo)說(shuo)(shuo) IP 協(xie)(xie)議(yi)(yi),這可是網(wang)絡協(xie)(xie)議(yi)(yi)中最(zui)最(zui)核心的(de)一(yi)個協(xie)(xie)議(yi)(yi)了,還記得(de)我(wo)們剛剛知道什么是IP地址、怎(zen)么給電腦(nao)修改 IP 的(de)時候嗎?今(jin)天我(wo)們就來探究一(yi)下 IP 協(xie)(xie)議(yi)(yi)。

IP協(xie)(xie)(xie)議是TCP\IP協(xie)(xie)(xie)議簇中最(zui)核(he)心的協(xie)(xie)(xie)議,大部(bu)分的上(shang)層(ceng)(傳輸層(ceng)、應(ying)用(yong)層(ceng))應(ying)用(yong)都(dou)直接或間接的使用(yong)IP協(xie)(xie)(xie)議傳輸,TCP協(xie)(xie)(xie)議、UDP協(xie)(xie)(xie)議都(dou)會(hui)使用(yong) IP 協(xie)(xie)(xie)議。

這張數(shu)據在 TCP\IP 協議模型中的(de)(de)加工流程一(yi)定要記到(dao)腦子中,這樣當我們(men)思(si)考網絡的(de)(de)問題時,可(ke)以有(you)一(yi)個大局觀。

IP 協(xie)(xie)(xie)議(yi)(yi)是(shi)(shi)無連接的,不可靠的網絡層協(xie)(xie)(xie)議(yi)(yi),它只(zhi)負(fu)責數(shu)據(ju)(ju)的傳輸,但是(shi)(shi)并不能保(bao)證數(shu)據(ju)(ju)一定能到達,要想保(bao)證數(shu)據(ju)(ju)可靠,需要上層應用(yong)處理,例如 TCP協(xie)(xie)(xie)議(yi)(yi)利用(yong)IP協(xie)(xie)(xie)議(yi)(yi)傳輸數(shu)據(ju)(ju),但是(shi)(shi)丟包、超時等情(qing)況還是(shi)(shi)要靠 TCP 自己(ji)解決。

IPv4 分類法

IP 在直觀上是有(you)一個(ge)分(fen)類的,尤(you)其(qi)是IPv4。

傳統的 IP 地址分類法

在互聯(lian)網誕(dan)生之(zhi)初,IP 地址就有(you)一套標準的分類(lei)方法,因為當時互聯(lian)網上的設備還很(hen)少,需要用(yong)到 IP 的企業和機構(gou)也(ye)沒有(you)那么多。誰知(zhi)道后來(lai)互聯(lian)網發展的如(ru)此迅猛(meng),導致(zhi)這(zhe)種分類(lei)方式用(yong)起來(lai)不(bu)太合(he)理。

這(zhe)種分類(lei)方(fang)式(shi)是將(jiang) IP 地址分成 A、B、C、D、E 五類(lei),每一(yi)類(lei)都有固(gu)定的前綴和應用場景。

一(yi)個 IP 地址占用 32 bit ,用點(dian)分十(shi)進(jin)制(zhi)表示(shi),例如(ru) 192.168.0.188,一(yi)個點(dian)號分隔一(yi)個 8 bit。

  1. IP 地址可分為 A、B、C、D、E 五類,D類是廣播地址,E類是保留地址(未啟用),所以重點關注 A、B、C類;
  2. A、B、C 類地址分為網絡地址和主機地址,網絡地址表示一個網絡,主機地址分給具體的主機;
  3. 主機地址全為 0 和全為 1 的IP 有特殊用途,主機地址全為 0 ,表示網絡號,代表這個網絡本身;主機地址全為1,表示廣播地址,代表這個網絡中的所有主機;
  4. 每個類別中(除了 D、E類),都有一些地址有特殊的用戶,留作私有地址或者回環地址,例如192.168、127.0.0.1;
  5. 子網掩碼全為1的位數就是網絡地址的位數;

A 類

A 類地(di)(di)址(zhi)前 8 位為(wei)網絡地(di)(di)址(zhi),后24位為(wei)主機地(di)(di)址(zhi)。

網(wang)(wang)絡(luo)地址(zhi)中第一位固定(ding)為0,有(you)從0~127共(gong)128個網(wang)(wang)絡(luo),每個網(wang)(wang)絡(luo)可容納(na)$2^{24}-2$ =16,777,214臺主機。但(dan)其實(shi)可用的 IP 地址(zhi)從 [1.0.0.0]~[126.255.255.255]。

特殊網絡地址:

但其中網絡(luo)地址(zhi)全0和全1的(de)為(wei)特殊地址(zhi),不(bu)能使(shi)用,所以 A 類地址(zhi)可用的(de)網絡(luo)數其實是 126個。

127.0.0.1,這(zhe)(zhe)個(ge)地(di)址(zhi)(zhi)我(wo)們都(dou)非常熟悉,一般我(wo)們說(shuo)這(zhe)(zhe)個(ge)是本地(di)地(di)址(zhi)(zhi)(localhost),其實這(zhe)(zhe)個(ge)地(di)址(zhi)(zhi)準確的(de)名稱(cheng)叫(jiao)做「回環地(di)址(zhi)(zhi)」,

可以理解為一個虛擬網卡,這個網卡只接收來自本機的數據包。

0.0.0.0,這個(ge)(ge)地址其(qi)實才(cai)代表本機,假設一(yi)臺主機上有(you)兩個(ge)(ge)網卡,一(yi)個(ge)(ge)服(fu)務(wu)監聽(ting)了 0.0.0.0 這個(ge)(ge)IP ,則發(fa)給這兩個(ge)(ge)網卡的數(shu)據都會被監聽(ting)到。

還有網(wang)絡地(di)址 10 開(kai)頭的地(di)址用作內(nei)(nei)網(wang)地(di)址,從(cong) 10.0.0.0~10.255.255.255。好多公司的內(nei)(nei)網(wang) IP 都是10網(wang)段的。

特殊主機地址:

每一個(ge)網絡,主(zhu)機(ji)(ji)地址(zhi)(zhi)全 0 和 全 1 的(de)(de)都是保留地址(zhi)(zhi),所以(yi)每一個(ge)網絡的(de)(de)主(zhu)機(ji)(ji)數都是$2^n-2$ ,n 是主(zhu)機(ji)(ji)地址(zhi)(zhi)的(de)(de)位(wei)數。

B類

16位(wei)網(wang)絡地址,16位(wei)主機地址。網(wang)絡地址中前兩(liang)位(wei)固(gu)定為 10,有$2^{14}$ =16384個(ge)網(wang)絡,每個(ge)網(wang)絡可容納 $2^{16}-2$=65534臺主機。

但其(qi)實(shi)可用(yong)的 IP 地址從128.0.0.0到191.255.255.250。

特殊網絡地址:

172.16.0.0~172.31.255.255是私有地(di)址。

10101100.0001000.00000000.00000000 ~ 10101100.00011111.11111111.11111111

169.254.0.0到169.254.255.255是(shi)保留地址。

10101001.11111110.00000000.00000000 ~ 10101001.11111110.11111111.11111111

特殊主機地址:

每一個(ge)網絡,主(zhu)機地址全(quan) 0 和 全(quan) 1 的(de)(de)都是(shi)保(bao)留(liu)地址,所(suo)以每一個(ge)網絡的(de)(de)主(zhu)機數都是(shi) $2^n-2$ ,n 是(shi)主(zhu)機號的(de)(de)位數。

C類

24位(wei)(wei)(wei)網(wang)絡(luo)地(di)址,8位(wei)(wei)(wei)主機地(di)址。網(wang)絡(luo)地(di)址中前(qian)三位(wei)(wei)(wei)固定為110,有 $2^{21}$ 個網(wang)絡(luo),每(mei)個網(wang)絡(luo)可容納 $2^{8}-2$ =254臺主機。

但(dan)其實可用的 IP 地址(zhi)從192.0.0.0~223.255.255.255。

特殊網絡地址:

192.168.0.0~192.168.255.255 留作私有(you)地址(zhi)使用。

D 類

D類地址以 1110 開始,并且不區分網(wang)絡地(di)址和主機地(di)址,這(zhe)類地(di)址用作是廣播地(di)址,用來(lai)接收(shou)廣播消(xiao)息

E類

E類地址(zhi)以1111開始,保留地址(zhi),還(huan)未啟用。

傳統分類法缺陷

網絡數和主機數搭配不協調

A類、B類可用網絡數很少(shao),只有1萬多個,但是每個網絡的主機數又太多了,

現實中沒有哪個機構或企(qi)業的(de)(de)主機數會有那(nei)么多,所以如果一(yi)(yi)個企(qi)業得到一(yi)(yi)個B類地址,其(qi)實只(zhi)能用(yong)到很少的(de)(de)主機地址,剩下的(de)(de)就浪費了(le)。

整體網絡數太少

A、B、C類的網絡(luo)數加起(qi)來只有200多(duo)萬個,但是全世界有那么(me)多(duo)機構、企業(ye),每(mei)個企業(ye)都(dou)申請(qing)一個網絡(luo)地址,顯然是不(bu)夠用的。

路由難以聚合,路由表過大

雖然200多(duo)萬的網絡數(shu)據量在(zai)(zai)全(quan)世界范圍(wei)內不(bu)算(suan)多(duo),但是對于(yu)一個路(lu)由(you)器的路(lu)由(you)表來說就太多(duo)了。假(jia)設一個地區有十(shi)幾萬個 C類地址,那路(lu)由(you)器想要路(lu)由(you)這些地址,就要在(zai)(zai)路(lu)由(you)表中記錄這么(me)多(duo)的路(lu)由(you)表項,顯然是不(bu)太合理的。

無類別域間路由(CIDR)分類法

正是因為傳統的(de)A、B、C、D、E類分法的(de)一些缺(que)陷(xian),CIDR 便應運(yun)而(er)生。

CIDR 仍(reng)然(ran)是用點分十進制的方式表(biao)示,IP v4 中(zhong)仍(reng)然(ran)是 32 位,每8位一組(zu),共4組(zu)。只是需要在后(hou)面加(jia)一個(ge)數字(zi)后(hou)綴,表(biao)示這個(ge)地(di)(di)址(zhi)的網絡地(di)(di)址(zhi)是多少位。

傳統的分(fen)類方法是以(yi) 8 位(wei)(wei)為最小單元,網(wang)絡地址(zhi)只(zhi)能是8位(wei)(wei)、16位(wei)(wei)、24位(wei)(wei),而在 CIDR 中用子網(wang)掩碼(ma)區分(fen)網(wang)絡地址(zhi)和主機地址(zhi),連續為1的位(wei)(wei)數就是網(wang)絡地址(zhi)位(wei)(wei)數,用二進制可以(yi)清楚(chu)的看出(chu)來(lai)。

例如(ru)子網(wang)掩碼是(shi) 11111111.00000000.00000000.00000000,前(qian)面8位(wei)連續都是(shi)1,表示8位(wei)的(de)網(wang)絡地址,子網(wang)掩碼就是(shi) 255.0.0.0。

再比如子(zi)網掩(yan)碼是(shi) 11111111.11100000.00000000.00000000,前面(mian)11位(wei)連續都是(shi)1,表示11位(wei)的網絡地址,子(zi)網掩(yan)碼就是(shi) 255.224.0.0。這與傳統的 IP 地址分類法就不一樣了。

看下面兩個 CIDR IP 地址(zhi),一(yi)個 11位網絡地址(zhi)的(de) IP ,一(yi)個 22 位網絡地址(zhi)的(de) IP。

例如(ru) 209.34.21.7/11,表(biao)示前11位(wei)代(dai)表(biao)網絡地址(zhi),后(hou)面的21位(wei)都是(shi)主(zhu)機(ji)地址(zhi)。

207.128.28.4/22,表示前22位是(shi)網絡地址(zhi),后面10位是(shi)主機地址(zhi)。

超網和子網

IP 地(di)址(zhi)(zhi)的申(shen)請(qing)(qing)有專門的管(guan)理機(ji)構(gou)控制,互(hu)聯(lian)網(wang)(wang)地(di)址(zhi)(zhi)頂(ding)級(ji)指(zhi)派(pai)(pai)機(ji)構(gou)會(hui)負責分(fen)派(pai)(pai)超大地(di)址(zhi)(zhi)塊(kuai),地(di)址(zhi)(zhi)塊(kuai)就是一個IP下包換(huan)的 IP 地(di)址(zhi)(zhi)集合。 這些(xie)超大地(di)址(zhi)(zhi)塊(kuai)會(hui)分(fen)配給大型(xing)(xing)網(wang)(wang)絡提供(gong)(gong)商,大型(xing)(xing)的網(wang)(wang)絡提供(gong)(gong)商又可以再(zai)分(fen)派(pai)(pai)小(xiao)(xiao)一些(xie)的地(di)址(zhi)(zhi)塊(kuai),這些(xie)小(xiao)(xiao)的地(di)址(zhi)(zhi)塊(kuai)會(hui)分(fen)配給中型(xing)(xing)、小(xiao)(xiao)型(xing)(xing)的網(wang)(wang)絡服(fu)務提供(gong)(gong)商,最后一些(xie)企業或(huo)機(ji)構(gou)再(zai)跟這些(xie)中小(xiao)(xiao)型(xing)(xing)的網(wang)(wang)絡服(fu)務提供(gong)(gong)商申(shen)請(qing)(qing)供(gong)(gong)內部使用、有對外功能(neng)的 IP 地(di)址(zhi)(zhi)。

這些分配給大型網(wang)(wang)絡提供(gong)商的(de)超(chao)大的(de)地址(zhi)塊(kuai)就可以被稱(cheng)為(wei)(wei)超(chao)網(wang)(wang),下面分派出(chu)去的(de)地址(zhi)塊(kuai)可以被稱(cheng)為(wei)(wei)子(zi)網(wang)(wang)。當然這個超(chao)網(wang)(wang)和(he)子(zi)網(wang)(wang)的(de)概念是相對(dui)的(de),對(dui)于(yu)一個企(qi)業而言,分給它 IP 的(de)網(wang)(wang)絡服務提供(gong)商所擁有的(de)網(wang)(wang)絡就是超(chao)網(wang)(wang)。

上圖這個例子中,假設 209.32.0.0/11這(zhe)個(ge)(ge)(ge)11位前綴的網絡被分給了一個(ge)(ge)(ge)大型網絡服務提供(gong)商(shang) A,那它可分配的地(di)(di)址數(shu)高達 200多萬(wan)個(ge)(ge)(ge),可想而知,沒有(you)任何一家企業或機(ji)構(gou)需要(yao)這(zhe)么(me)多個(ge)(ge)(ge) IP 地(di)(di)址吧。

B 是比較大的企業,財大氣粗,它去找A申請,于是 A 將 209.34.20.0/22這個前綴長度為22位的地址塊分給了 B 。B 的旗下還有分公司,于是它又將 209.34.21.0/24這個地址塊分給了其中的一個子公司。于是這個子公司就擁有了200多個 IP 地址,比如 209.34.21.1/24

什么是路由聚合

前面(mian)在說(shuo)傳(chuan)統分類方(fang)式的(de)時候,提到(dao)了(le)一個缺點(dian),就是路由(you)難以聚合,可(ke)(ke)能(neng)會導(dao)致路由(you)表過(guo)大,一個路由(you)表可(ke)(ke)能(neng)要存上萬、甚至(zhi)更多(duo)的(de) C類地址記錄。

CIDR 正(zheng)好可以解(jie)決這個問題,這就是我們(men)所說的路(lu)由(you)聚合能(neng)力。那什(shen)么叫路(lu)由(you)聚合呢。

路由聚合的(de)意思是根據前綴(zhui)進行聚合,有一些網絡地址塊它(ta)們(men)雖然是不(bu)同(tong)的(de),但是他們(men)的(de)一部(bu)分前綴(zhui)是相同(tong)的(de),這也是二進制的(de)特性決定(ding)的(de)。

十進制的(de) 8 和 9是(shi)完全不(bu)同的(de)兩個(ge)數(shu)對不(bu)對,但是(shi)我們把它(ta)們改為二(er)進制的(de)看一下,就會發現(xian)他們的(de)前三位都是(shi)一樣的(de)。

看下面這張圖中的(de)例子(zi),是將兩個(ge)(ge)20位前綴的(de)網絡聚(ju)合為一個(ge)(ge)19位前綴的(de)路由。

我們看到上面這兩個網絡 209.34.48.0/20209.34.32.0/20,它們的前19位二進制都是完全一致的,上面說到的,相同就可以聚合,所以將前19位聚合,聚合成一個 19位前綴的網絡,也就是 209.34.32.0/19

當有訪問到 209.34.48.0/20209.34.32.0/20 這兩個網絡中的地址時,其實它們兩個對外都是顯示的 209.34.32.0/19,也就(jiu)(jiu)是說這兩個(ge)網(wang)絡(luo)都會命中(zhong) 19位前綴的(de)路由(you)記錄,也就(jiu)(jiu)縮小了(le)(le)這個(ge)路由(you)器的(de)記錄規模(mo),而到哪個(ge)具體的(de) IP,就(jiu)(jiu)靠子網(wang)絡(luo)中(zhong)的(de)路由(you)了(le)(le)。

這相當(dang)于一種分而(er)治之的策略,保證(zheng)頂層路由(you)表(biao)不會過大,子路由(you)表(biao)也不會過大。

IPv6

即使有了 CIDR 分類法,IPv4 的(de)數量依然十分緊俏(qiao)。目前 IPv4的(de)地址已全部分配完畢,分到中國的(de)大概有3億多(duo),而中國的(de)終端設(she)備這么多(duo),大多(duo)數情(qing)(qing)況(kuang)下要(yao)(yao)多(duo)個(ge)設(she)備共用一個(ge)地址,這種情(qing)(qing)況(kuang)下就要(yao)(yao)借助 NAT 技術了。

什么是 NAT

NAT 就是讓(rang)多個(ge)內網主(zhu)機,轉成一(yi)個(ge)公網IP來連(lian)接互聯網。拿平時用(yong)微信聊天來說,我們(men)在公司的時候那么多同(tong)事共用(yong)一(yi)個(ge)熱點,消息是怎(zen)么來回(hui)發送,而(er)且每次都準確的到達終端的呢(ni)。

當(dang)發送(song)消(xiao)息的時候,消(xiao)息經(jing)過 NAT 設備的轉(zhuan)發,將(jiang)發送(song)地址(zhi)變換為當(dang)前網(wang)絡對外(wai)的公網(wang)地址(zhi);

當接收到消息(xi)時,消息(xi)經過 NAT 設備,根據 NAT 設備記錄的(de)信息(xi)(和端(duan)口號有關),將消息(xi)轉發給對應的(de)內網終(zhong)端(duan)。

但是(shi) NAT 會導致(zhi)網絡的(de)性能變差,而且 NAT 也(ye)是(shi)有(you)數量限制(zhi)的(de)。這就使得 IPv6 勢在必(bi)行了,目前,有(you)很大一部分(fen)互聯網公司都(dou)已經支持 IPv6了。

IPv6地址長度為 128位(bit),是(shi)IPv4的(de)4倍。其所包含(han)的(de) IP 個(ge)數為 $2^{128}$個(ge),這個(ge)數字太大(da)了,這么說(shuo)吧,按照現在的(de)人口數,隨便(bian)用(yong),根本就(jiu)用(yong)不完。

表示方法

常用的就(jiu)是前面(mian)兩(liang)種(zhong)。

冒分十六進制表示法

用 8 組冒號分隔的16進制數分隔,例如 2408:8207:2462:bcc0:89b:16e1:771d:4bec

0位壓縮表示法

在(zai)某些情(qing)況下,一(yi)個IPv6地址中間(jian)可能包(bao)含(han)很長的一(yi)段(duan)0,可以把連(lian)續的一(yi)段(duan)0壓縮為“::”。但(dan)為保證(zheng)地址解析的唯一(yi)性(xing),地址中”::”只能出現一(yi)次(ci),例(li)如:

FF01:0:0:0:0:0:0:1101 → FF01::1101

0:0:0:0:0:0:0:1 → ::1

0:0:0:0:0:0:0:0 → ::

IPv6的特點

  1. IP地址(zhi)(zhi)依然適(shi)應互聯網分(fen)層構造。分(fen)配與其地址(zhi)(zhi)結構相適(shi)應的IP地址(zhi)(zhi),盡可能避免路由表膨(peng)脹。

  2. 包首(shou)(shou)部長度采(cai)用固定的值 (40 字節),不再采(cai)用首(shou)(shou)部檢驗碼。簡化首(shou)(shou)部結構,減輕(qing)路由器(qi)負(fu)荷。路由器(qi)不再做分(fen)片處(chu)理(通過路徑 MTU 發現只由發送端主(zhu)機(ji)進行分(fen)片處(chu)理),提升(sheng)了(le)性能。

  3. 支持即(ji)(ji)插(cha)即(ji)(ji)用功能,即(ji)(ji)使(shi)沒有DHCP 服務器也(ye)可以實現(xian)自動分配IP 地(di)址。

  4. 采用認(ren)證(zheng)與加密(mi)功能(neng),應對偽造(zao) IP 地址的網絡安全功能(neng)以及防(fang)止線路竊聽的功能(neng) (IPsec)。

IPv4 協議格式

版本

版(ban)(ban)本字段(duan)占用(yong) 4 bit,用(yong)來標(biao)示當(dang)前(qian)使用(yong)的 IP 協議版(ban)(ban)本,只有 IPv4(0100) 和(he) IPv6(0110) 兩個版(ban)(ban)本區(qu)分。

首部長度

首部長(chang)度表(biao)示(shi)(shi)占32bit的數(shu)目,也就是(shi)(shi)(shi)有多少(shao)個4字節(32bit/8=4字節),比如(ru)首部長(chang)度是(shi)(shi)(shi)5,就表(biao)示(shi)(shi)有5個4字節,也就是(shi)(shi)(shi)20個字節。

而(er)用來(lai)表示首部長度的(de)字段是(shi)(shi)4bit,這樣一來(lai)它可(ke)表示的(de)最(zui)大(da)(da)長度就是(shi)(shi)二(er)進制的(de)「1111」,也(ye)(ye)就是(shi)(shi)2^4-1=15,也(ye)(ye)就是(shi)(shi)最(zui)大(da)(da)可(ke)以(yi)(yi)是(shi)(shi) 15個(ge)(ge)4字節,也(ye)(ye)就是(shi)(shi)15*4=60個(ge)(ge)字節,也(ye)(ye)就是(shi)(shi)說首部的(de)最(zui)大(da)(da)長度是(shi)(shi)60個(ge)(ge)字節,而(er)通(tong)過圖(tu)可(ke)以(yi)(yi)看出來(lai)固定的(de)部分占20字節,那可(ke)選(xuan)項部分的(de)最(zui)大(da)(da)長度就是(shi)(shi)40字節。

服務類型

服務類型,英文全稱 Type of Service。用來標示(shi)是一個什(shen)么類型的應用正(zheng)在使用IP協議(yi)。

前面 3 個(ge)(ge)bit 用(yong)來標示優先級,但現(xian)在已(yi)經被(bei)忽略了。接著(zhu) 4 個(ge)(ge)bit 用(yong)來標示子類型,每一(yi)個(ge)(ge)bit分別代表最(zui)(zui)小(xiao)延(yan)遲(chi)、最(zui)(zui)大(da)吞吐量(liang)、最(zui)(zui)高(gao)可靠性、最(zui)(zui)小(xiao)費用(yong)。例如(ru) Telnet 應用(yong)要求最(zui)(zui)小(xiao)延(yan)遲(chi),所以這4個(ge)(ge)bit分別是(shi) 「1000」。

最后一個bit是保留位,但必須是0。

但是現(xian)在(zai)很(hen)少有應用支持 TOS,所以(yi)了解一下就可以(yi)了。這屬于理想很(hen)豐滿,現(xian)實很(hen)骨感的一個體(ti)現(xian)。標(biao)準是標(biao)準,但是實現(xian)上(shang)會有一定差(cha)異。

總長度字段

IP 報(bao)文(wen)(wen)除(chu)了(le)首(shou)部還要攜(xie)帶數(shu)(shu)據(ju),總(zong)長度字(zi)(zi)段指整個 IP 報(bao)文(wen)(wen)的(de)長度,單位是字(zi)(zi)節(jie)。總(zong)長度字(zi)(zi)段占2個字(zi)(zi)節(jie),16bit,這樣算下來,總(zong)共(gong)可以表示2^15-1 ,也就是65535個字(zi)(zi)節(jie)。雖(sui)然可以表示這么(me)多(duo)字(zi)(zi)節(jie),但(dan)是絕多(duo)數(shu)(shu)情況下都不會一次性傳輸這么(me)大(da)的(de)數(shu)(shu)據(ju)量,會有很多(duo)因(yin)素影響每個數(shu)(shu)據(ju)報(bao)的(de)最大(da)值。

數據報的最大長(chang)度主要和上(shang)層應(ying)用限制(zhi)(zhi)和MTU限制(zhi)(zhi)有關系。

例如DNS服(fu)務就限(xian)制(zhi)數據報最大(da)長度為 512字節。

另(ling)外我們常用的(de)以(yi)(yi)太(tai)網 MTU (最大(da)傳輸單(dan)元)就是 1500字節,所(suo)以(yi)(yi)在以(yi)(yi)太(tai)網上(shang)的(de)報文不能(neng)超過 1500字節。

可以用 netstat -in 查(cha)看本(ben)機網絡接口(kou)的 MTU。

總(zong)(zong)長(chang)度(du)(du)-首部長(chang)度(du)(du)=數據(ju)長(chang)度(du)(du)。有一種(zhong)情(qing)況(kuang),以太網(wang)要求報文的(de)最(zui)小(xiao)長(chang)度(du)(du)是46字節(jie),但是 IP 數據(ju)報的(de)總(zong)(zong)長(chang)度(du)(du)可(ke)(ke)能不足(zu)46字節(jie),例(li)如只傳(chuan)輸很少的(de)數據(ju),這種(zhong)情(qing)況(kuang)下,以太網(wang)鏈(lian)路層就(jiu)要將不足(zu)46字節(jie)的(de)部分補全。這樣一來(lai),當接收方(fang)IP層接到這個報文后,就(jiu)可(ke)(ke)以通過總(zong)(zong)長(chang)度(du)(du)字段和(he)首部長(chang)度(du)(du)得出真(zhen)正的(de)數據(ju)長(chang)度(du)(du),從而將后面多余的(de)數據(ju)部分去(qu)掉。

分片標示

如果報(bao)文(wen)超(chao)過 IP 層允許的(de)(de)最大(da)報(bao)文(wen)長度,就會(hui)進(jin)行 IP 分(fen)(fen)片(pian),將(jiang)原(yuan)(yuan)本(ben)的(de)(de)大(da)報(bao)文(wen)分(fen)(fen)片(pian)成(cheng)一(yi)(yi)(yi)個(ge)個(ge)小的(de)(de)報(bao)文(wen),每一(yi)(yi)(yi)個(ge)小的(de)(de)報(bao)文(wen)都可能(neng)會(hui)從不同的(de)(de)路(lu)徑發送到目標主機,而每一(yi)(yi)(yi)個(ge)分(fen)(fen)片(pian)報(bao)文(wen)發送到目的(de)(de)主機的(de)(de)順序也(ye)不一(yi)(yi)(yi)定是按(an)照(zhao)原(yuan)(yuan)有(you)順序到達的(de)(de)。所以,在目的(de)(de)主機端獲取到所有(you)的(de)(de)報(bao)文(wen)分(fen)(fen)片(pian)后,要按(an)照(zhao)原(yuan)(yuan)始(shi)的(de)(de)順序將(jiang)一(yi)(yi)(yi)個(ge)個(ge)小的(de)(de)分(fen)(fen)片(pian)還原(yuan)(yuan)成(cheng)原(yuan)(yuan)始(shi)的(de)(de)報(bao)文(wen)。

在還原的過程中就需要知道各個(ge)分片的順序,標志、標示和片偏移(yi)字段(duan)就是為了完成這個(ge)還原的過程。

標志字(zi)段(duan),當(dang)數據報(bao)被分片(pian)后,來自一個大報(bao)文(wen)的每個分片(pian)都會被賦予(yu)相同(tong)的值(zhi),用來表示(shi)這些分片(pian)來自同(tong)一個報(bao)文(wen),在報(bao)文(wen)還原的時候用。

標示字段為(wei) 3 占3個(ge)bit,第一位(wei)(wei)(wei)始終是(shi)0,第二(er)位(wei)(wei)(wei)是(shi)DF位(wei)(wei)(wei),如果是(shi)1表示不(bu)分(fen)片(pian)(pian),第三位(wei)(wei)(wei)是(shi)MF,如果是(shi)1,表示這個(ge)分(fen)片(pian)(pian)不(bu)是(shi)最后一個(ge),后面還(huan)有(you)更多的分(fen)片(pian)(pian)。

片(pian)(pian)偏(pian)移(yi)字(zi)(zi)段(duan)表示這個(ge)分片(pian)(pian)的(de)(de)偏(pian)移(yi)量,單(dan)位(wei)是(shi) 8 個(ge)字(zi)(zi)節,也就(jiu)是(shi) 8*8=64個(ge)bit。例如第(di)一個(ge)分片(pian)(pian)的(de)(de)偏(pian)移(yi)量是(shi)0,第(di)二個(ge)分片(pian)(pian)的(de)(de)偏(pian)移(yi)量是(shi)1,則第(di)二個(ge)分片(pian)(pian)相對(dui)第(di)一個(ge)分片(pian)(pian)的(de)(de)偏(pian)移(yi)量是(shi)1,也就(jiu)是(shi) 8 個(ge)字(zi)(zi)節。如下圖所(suo)示。

如果第二個(ge)偏(pian)移(yi)量的值(zhi)是(shi)3,則相對(dui)于第一(yi)個(ge)分(fen)片的偏(pian)移(yi)量是(shi) 3*8字節=24字節。

TTL

IP數據報的生存(cun)時(shi)間(jian),單位不是(shi)時(shi)間(jian)單位,而(er)是(shi)跳(tiao)(tiao)(tiao)數。在網絡上(shang),沒(mei)經(jing)過一(yi)個(ge)路由(you)器,叫做一(yi)跳(tiao)(tiao)(tiao),例如我們經(jing)常聽到的下一(yi)跳(tiao)(tiao)(tiao)路由(you),就是(shi)指一(yi)個(ge)數據包要經(jing)過的下一(yi)個(ge)路由(you)器。

一(yi)般TTL是(shi)(shi)32或(huo)64,由初始主機設(she)置,表示這(zhe)個(ge)IP報文(wen)最多可經過(guo)32個(ge)路(lu)由或(huo)64個(ge)路(lu)由,每經過(guo)一(yi)個(ge)路(lu)由器,TTL 的值就(jiu)(jiu)減一(yi),當這(zhe)個(ge)值為(wei)0時,路(lu)由器就(jiu)(jiu)直(zhi)接將(jiang)這(zhe)個(ge)報文(wen)丟棄。并(bing)發送 ICMP 報文(wen)給源(yuan)(yuan)主機,由源(yuan)(yuan)主機商(shang)的服務決定是(shi)(shi)重(zhong)發還是(shi)(shi)怎(zen)么(me)樣。

之所以要設置一個(ge)值(zhi),是防止浪費(fei)太多網(wang)(wang)絡資(zi)源,如果一個(ge)報文經過(guo)了好多路由器還沒(mei)有(you)到(dao)達目的(de)地,很(hen)有(you)可(ke)能就是網(wang)(wang)絡有(you)問題了,比如進入(ru)了一個(ge)循(xun)環網(wang)(wang)絡,或者目的(de)端未聯網(wang)(wang)。

協議

協議字段,長度為8個bit,標識了上層所使用的協議,下面是幾個比較常用的協議號。
1:ICMP,2:IGMP,6: TCP,17: UDP

首部檢驗和

首部檢(jian)(jian)驗和(he)用(yong)來檢(jian)(jian)驗一份(fen)報文(wen)的(de)(de)正(zheng)確性,當報文(wen)到達目的(de)(de)端后,用(yong)首部檢(jian)(jian)驗和(he)規定(ding)的(de)(de)校(xiao)驗方法計算,并(bing)用(yong)計算出的(de)(de)結果(guo)和(he)此報文(wen)本身攜帶的(de)(de)首部檢(jian)(jian)驗和(he)字段做(zuo)比較(jiao),如(ru)(ru)果(guo)結果(guo)一致(zhi),則說明報文(wen)沒(mei)有問題,如(ru)(ru)果(guo)結果(guo)不一致(zhi),則直接丟棄報文(wen)。

在傳輸過程中 TTL 的(de)(de)值會一點(dian)點(dian)減小(xiao),所以(yi)在TTL減小(xiao)的(de)(de)同時,也(ye)會動態調整首部檢(jian)(jian)驗和(he)(he)的(de)(de)內容,因為(wei)如果(guo)首部檢(jian)(jian)驗和(he)(he)如果(guo)不根據TTL進行調整的(de)(de)話,在報(bao)文達到目的(de)(de)端后,根據首部各(ge)字段的(de)(de)值進行計算,由于TTL已經減小(xiao),最終算出的(de)(de)檢(jian)(jian)驗和(he)(he)必定會與最開始(shi)的(de)(de)檢(jian)(jian)驗和(he)(he)不一致,即使是沒有(you)問題的(de)(de)報(bao)文也(ye)會被(bei)丟棄。

可選項

可(ke)選項可(ke)有可(ke)無,它有如下幾種(zhong)功(gong)能:

? 安(an)全和(he)處理(li)限制(zhi)(用于(yu)軍事領域)

? 記(ji)錄路徑(讓每個路由(you)器都記(ji)下(xia)它(ta)的(de) IP地址(zhi))

? 時間(jian)戳(讓每個路由(you)器都記下它的(de) IP地(di)址和時間(jian))

? 寬松的源站選路(lu)(為數據報(bao)指定(ding)一系列必須(xu)經過的 IP地址(zhi))

? 嚴格的源站選路(與寬松的源站選路類似, 但是要求只(zhi)能經過指定(ding)的這些地(di)址, 不能經過其他的地(di)址)。

這些選項很少被使用,并非所(suo)有(you)的(de)主機和路由器(qi)都支持這些選項。 選項字段一直都是(shi)以 32 bit作為(wei)界限,在必要的(de)時(shi)候插入值為(wei) 0的(de)填充字節(jie)。這樣就保證 IP首部始終是(shi)32 bit的(de)整數(shu)倍。但是(shi)最(zui)大長度不能超過40字節(jie)。

數據

數據就是真正要(yao)傳輸的內(nei)容了(le),當(dang)然包括上一層的頭信息,例如(ru) TCP頭、UDP頭。

IPv6 協議格式

版本

版本(ben)(ben)字段占用 4 bit,用來標(biao)示當前使用的 IP 協議版本(ben)(ben),IPv6 固定(ding)為 0110,也就是 6 。

通信量類

相(xiang)當于IPv4 的(de) TOS (Type Of Service)字(zi)段,占(zhan)用(yong)8 bit。由于 TOS 在(zai) IPv4 中幾(ji)乎都沒有什么(me)用(yong)處(chu),未(wei)來(lai)可能會刪掉這個字(zi)段。

流標號

占用(yong)20bit,準備用(yong)于服(fu)務(wu)質(zhi)量(QoS)控制。使用(yong)這個(ge)字段提(ti)供怎樣的服(fu)務(wu)已經(jing)成為(wei)未(wei)來研(yan)究的課(ke)題。不(bu)使用(yong) QoS時,直接將所有位(wei)設置為(wei) 0 即可。

在(zai)進行服務(wu)質量控制(zhi)時,將流標(biao)(biao)號(hao)設(she)(she)置為(wei)一個隨(sui)機數,然后利用一種可以設(she)(she)置流的協議 RSVP (Resource Reservation Protocol)在(zai)路由器上(shang)進行QoS 設(she)(she)置。當某個包在(zai)發送(song)途中需要 QoS時,需要附上(shang) RSVP 預想的流標(biao)(biao)號(hao)。路由器接(jie)收到這樣的 IP 包后先將流標(biao)(biao)號(hao)作為(wei)查(cha)找(zhao)關鍵(jian)字(zi),迅速從服務(wu)質量控制(zhi)信息中查(cha)找(zhao)并做相應處理。

此外,只有(you)流(liu)標(biao)號、源地址以及(ji)目標(biao)地址三項(xiang)完(wan)全一致時,才被認為是(shi)一個流(liu)(例如(ru)數(shu)據包進行了分片)。

有效載荷長度

占用 16bit,有效荷載(zai)長(chang)(chang)(chang)度(du)(du)是(shi)指包的(de)(de)數(shu)據部分(fen)的(de)(de)長(chang)(chang)(chang)度(du)(du)。IPv4的(de)(de)總長(chang)(chang)(chang)度(du)(du)是(shi)指包含首部在內的(de)(de)所有長(chang)(chang)(chang)度(du)(du)。然而IPv6中(zhong)的(de)(de)這個有效載(zai)荷長(chang)(chang)(chang)度(du)(du)不(bu)包括首部,只表示(shi)數(shu)據部分(fen)的(de)(de)長(chang)(chang)(chang)度(du)(du)。

下一個首部

占(zhan)用(yong) 8 bit,相(xiang)當于IPv4中的協(xie)(xie)議字段。通(tong)常表(biao)示(shi)IP的上一(yi)層協(xie)(xie)議是TCP或UDP。不過在有(you)IPv6擴展首部(bu)的情況下,該字段表(biao)示(shi)后面(mian)第一(yi)個擴展首部(bu)的協(xie)(xie)議類型。

跳數限制(Hop Limit)

占(zhan)用 8 bit。與 IPv4中的TTL概(gai)念一致(zhi)。為了強調“可通過(guo)路(lu)由器個數(shu)(shu)”這個概(gai)念,才將名字改(gai)為Hop Limit。數(shu)(shu)據每經過(guo)一次路(lu)由器就減1,減到0則丟棄(qi)數(shu)(shu)據。

源地址

占用128bit,16字節(jie)。表示(shi)發(fa)送端IP地址。因為 IPv6 長(chang)度就是128bit。

目標地址

占用128bit,16字節(jie)。表示接(jie)收端IP地址。

擴展首部

IPv6的首(shou)(shou)部(bu)長(chang)度(du)是固定的,共40字節。IPv4中(zhong)(zhong)的可(ke)選項就沒地方放了(le),而 IPv6 增加了(le)擴(kuo)(kuo)展(zhan)首(shou)(shou)部(bu)的概念,通過擴(kuo)(kuo)展(zhan)首(shou)(shou)部(bu)來實現IPv4中(zhong)(zhong)的可(ke)選項。 在IPv4中(zhong)(zhong)可(ke)選項長(chang)度(du)固定為40字節,但是在IPv6中(zhong)(zhong)沒有這樣(yang)的限制。也(ye)就是說,IPv6的擴(kuo)(kuo)展(zhan)首(shou)(shou)部(bu)可(ke)以(yi)(yi)是任(ren)意(yi)長(chang)度(du)。擴(kuo)(kuo)展(zhan)首(shou)(shou)部(bu)當中(zhong)(zhong)還可(ke)以(yi)(yi)包含擴(kuo)(kuo)展(zhan)首(shou)(shou)部(bu)協(xie)議以(yi)(yi)及下一個(ge)擴(kuo)(kuo)展(zhan)首(shou)(shou)部(bu)字段。

數據

要傳輸的數據,當然也就包含上層(ceng)的頭信息,例(li)如UDP頭、TCP頭。

路由選擇

IP協議有一個特別重要(yao)的(de)(de)特質就是路(lu)由選擇,就是決定(ding)一個 IP 數據(ju)報從(cong)哪條(tiao)路(lu)走(zou),最終能不能成功的(de)(de)到達目(mu)的(de)(de)端(duan),全靠 IP 的(de)(de)路(lu)由選擇功能。

如上圖所示,主機1想(xiang)把(ba)數據(ju)發往主機3,中(zhong)間經過兩個路由(you)器,真(zhen)實環(huan)境下會更多(duo)。最終路徑假設(she)是(shi)圖中(zhong)紅(hong)線連接的(de)部分,每一(yi)個紅(hong)線都稱為一(yi)跳。

IP數據包(bao)在每次(ci)發往下一跳地(di)址(zhi)(zhi)的(de)時候都(dou)會被(bei)重新封裝,封裝的(de)頭信息中的(de)目的(de)地(di)址(zhi)(zhi)就是下一跳的(de) IP 地(di)址(zhi)(zhi)。

每一個設備是怎么得到下一跳 IP 的呢,這就要提到路由表了。

路(lu)由器(包括(kuo)可(ke)轉發數據的(de)主機)中(zhong)維護著一張路(lu)由表,主要存放網絡(luo)、主機與下一跳的(de)對應關系。例如下表這樣:

目標 子網掩碼 下一跳 網絡接口
192.168.8.0 255.255.255.0 0.0.0.0 en0
114.21.1.0 255.255.255.0 114.21.1.100 en0
0.0.0.0 0.0.0.0 192.168.8.1 en1

差錯報告

前面說了(le),IP 協(xie)議不(bu)可靠,不(bu)保證(zheng)數據一定能正確到達(da)目的端,但是(shi)它還是(shi)提供了(le)必要(yao)的差(cha)錯報告機制(zhi),用來(lai)返回給(gei)上層使用程序,讓上一層知道當(dang)前傳輸的數據發生了(le)什(shen)么錯誤。至于如何處理,就不(bu)管了(le)。

差錯報文用 ICMP 協議發送,ICMP 是互聯網控制報文協議,分為主動查詢報文和差錯報告報文,主動查詢的例如 ping命(ming)令,絕大多數都(dou)是為了表示數據傳輸過程(cheng)中發生了錯(cuo)誤,以此來提(ti)示發送端。

發送ICMP差錯報文

例如當數據包到達一個路由器,在路由器搜索了路由表的所有記錄后,仍然沒有發現合適的記錄,并且路由表也沒有配置默認項(默認項就是在沒有找到絕對匹配的記錄時默認發送的配置),這時候就會發送一個 ICMP 差錯報文,表示網絡或主機不可達,發送(song)給(gei)誰呢,發送(song)給(gei)這個IP數據(ju)包的(de)發送(song)端。

發送ICMP重定向報文

重定向報文更像是一種優化策略,如圖,假設一個主機同時連接了兩臺路由器A和B,而路由表中只有其中一個路由器A的配置項。在某次發送數據時,主機1將數據包發給下一跳路由器A,而路由器A接收到數據包后,通過路由選擇,下一跳是路由器B,就是圖中紅色的①②的路徑,而此時路由器A發現自身、路由器B、主機1在同一局域網中,此時,路由器A便向主機1發送一個ICMP重定向報文。用來告(gao)訴主機(ji)1,“下次再有類似的包,直接發給路由器(qi)B就行了(le),別繞彎子了(le)”。

30張圖說清楚 TCP 協議


如果覺得還不錯的話,給個推薦吧!

公眾號「古(gu)時的(de)風箏」,Java 開發(fa)者(zhe),專注(zhu)(zhu) Java 及周(zhou)邊生態。堅持原創干貨(huo)輸出,你(ni)可選擇現在(zai)就關注(zhu)(zhu)我,或(huo)者(zhe)看看歷史文(wen)章再關注(zhu)(zhu)也(ye)不遲。長(chang)按二維碼關注(zhu)(zhu),跟(gen)我一起變(bian)優(you)秀!

posted @ 2023-03-22 09:40  風的姿態  閱讀(3717)  評論(4)    收藏  舉報