网络:IP协议与寻址
TCP/IP協(xié)議族中最核心的協(xié)議,提供不可靠、無連接的數(shù)據(jù)報(bào)傳輸服務(wù)。
·????????不可靠:不能保證IP數(shù)據(jù)報(bào)能成功送達(dá)。
·????????無連接:并不維護(hù)后續(xù)數(shù)據(jù)報(bào)的狀態(tài)信息,每個(gè)數(shù)據(jù)報(bào)的處理都是相互獨(dú)立。數(shù)據(jù)報(bào)可能不會(huì)按照發(fā)送順序接收。同一站點(diǎn)向另一站點(diǎn)發(fā)送的多個(gè)數(shù)據(jù)報(bào)可能經(jīng)過不同的路由到達(dá)。
幀格式
IP數(shù)據(jù)報(bào)格式如下。
?
IP包頭字段說明
版本:4位,指定IP協(xié)議的版本號(hào)。
包 頭長(zhǎng)度(IHL):4位,IP協(xié)議包頭的長(zhǎng)度,指明IPv4協(xié)議包頭長(zhǎng)度的字節(jié)數(shù)包含多少個(gè)32位。由于IPv4的包頭可能包含可變數(shù)量的可選 項(xiàng),所以這個(gè)字段可以用來確定IPv4數(shù)據(jù)報(bào)中數(shù)據(jù)部分的偏移位置。IPv4包頭的最小長(zhǎng)度是20個(gè)字節(jié),因此IHL這個(gè)字段的最小值用十進(jìn)制表示就是5 (5x4 = 20字節(jié))。就是說,它表示的是包頭的總字節(jié)數(shù)是4字節(jié)的倍數(shù)。
IP協(xié)議包頭最長(zhǎng):20+40 = 60字節(jié)? 正好等于:15*4 = 60
服務(wù)類型:定義IP協(xié)議包的處理方法,它包含如下子字段
??????? 過程字段:3位,設(shè)置了數(shù)據(jù)包的重要性,取值越大數(shù)據(jù)越重要,取值范圍為:0(正常)~ 7(網(wǎng)絡(luò)控制)
??????? 延遲字段:1位,取值:0(正常)、1(期特低的延遲)
??????? 流量字段:1位,取值:0(正常)、1(期特高的流量)
??????? 可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)
??????? 成本字段:1位,取值:0(正常)、1(期特最小成本)
??????? 未使用:1位
長(zhǎng)度:IP包的總長(zhǎng)
認(rèn)證:
標(biāo)志:是一個(gè)3位的控制字段,包含:
??????? 保留位:1位
??????? 不分段位:1位,取值:0(允許數(shù)據(jù)報(bào)分段)、1(數(shù)據(jù)報(bào)不能分段)
??????? 更多段位:1位,取值:0(數(shù)據(jù)包后面沒有包,該包為最后的包)、1(數(shù)據(jù)包后面有更多的包)
段偏移量:當(dāng)數(shù)據(jù)分組時(shí),它和更多段位(MF, More fragments)進(jìn)行連接,幫助目的主機(jī)將分段的包組合。
TTL:表示數(shù)據(jù)包在網(wǎng)絡(luò)上生存多久,每通過一個(gè)路由器該值減一,為0時(shí)將被路由器丟棄。
協(xié)議:8位,這個(gè)字段定義了IP數(shù)據(jù)報(bào)的數(shù)據(jù)部分使用的協(xié)議類型。常用的協(xié)議及其十進(jìn)制數(shù)值包括ICMP(1)、TCP(6)、UDP(17)。
校驗(yàn)和:16位,是IPv4數(shù)據(jù)報(bào)包頭的校驗(yàn)和。
源IP地址:
目的IP地址:
選項(xiàng)(IP Options):本書不討論。
填充(Padding):當(dāng)IP報(bào)文頭長(zhǎng)度不是32比特的整數(shù)倍時(shí),填充0來湊齊32比特整數(shù)倍,沒有實(shí)際意義。
數(shù)據(jù)(Data):來自第4層的數(shù)據(jù)段。
IPv4的頭部結(jié)構(gòu)如圖2-1所示。其長(zhǎng)度通常為20字節(jié),除非含有可變長(zhǎng)的選項(xiàng)部分。
?
4位版本號(hào)(version)指定IP協(xié)議的版本。對(duì)IPv4來說,其值是4。其他IPv4協(xié)議的擴(kuò)展版本(如SIP協(xié)議和PIP協(xié)議),則具有不同的版本號(hào)(它們的頭部結(jié)構(gòu)也和圖2-1不同)。
4位頭部長(zhǎng)度(header length)標(biāo)識(shí)該IP頭部有多少個(gè)32bit字(4字節(jié))。因?yàn)?位最大能表示15,所以IP頭部最長(zhǎng)是60字節(jié)。
8位服務(wù)類型(Type Of Service,TOS)包括一個(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位總長(zhǎng)度(total length)是指整個(gè)IP數(shù)據(jù)報(bào)的長(zhǎng)度,以字節(jié)為單位,因此IP數(shù)據(jù)報(bào)的最大長(zhǎng)度為65535(216-1)字節(jié)。但由于MTU的限制,長(zhǎng)度超過MTU 的數(shù)據(jù)報(bào)都將被分片傳輸,所以實(shí)際傳輸?shù)腎P數(shù)據(jù)報(bào)(或分片)的長(zhǎng)度都遠(yuǎn)遠(yuǎn)沒有達(dá)到最大值。接下來的3個(gè)字段則描述了如何實(shí)現(xiàn)分片。
16位標(biāo)識(shí)(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í)值。
3位標(biāo)志字段的第一位保留。第二位(Don’t Fragment,DF)表示“禁止分片”。如果設(shè)置了這個(gè)位,IP模塊將不對(duì)數(shù)據(jù)報(bào)進(jìn)行分片。在這種情況下,如果IP數(shù)據(jù)報(bào)長(zhǎng)度超過MTU的話,IP模 塊將丟棄該數(shù)據(jù)報(bào)并返回一個(gè)ICMP差錯(cuò)報(bào)文。第三位(More Fragment,MF)表示“更多分片”。除了數(shù)據(jù)報(bào)的最后一個(gè)分片外,其他分片都要把它置1。
13位分片偏移(fragmentation offset)是分片相對(duì)原始IP數(shù)據(jù)報(bào)開始處(僅指數(shù)據(jù)部分)的偏移。實(shí)際的偏移值是該值左移3位(乘8)后得到的。由于這個(gè)原因,除了最后一個(gè)IP分 片外,每個(gè)IP分片的數(shù)據(jù)部分的長(zhǎng)度必須是8的整數(shù)倍(這樣才能保證后面的IP分片擁有一個(gè)合適的偏移值)。
8位生存時(shí)間(Time To Live,TTL)是數(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)。
8位協(xié)議(protocol)用來區(qū)分上層協(xié)議,我們?cè)诘?章討論過。/etc/protocols文件定義了所有上層協(xié)議對(duì)應(yīng)的protocol 字段的數(shù)值。其中,ICMP是1,TCP是6,UDP是17。/etc/protocols文件是RFC 1700的一個(gè)子集。
16位頭部校驗(yàn)和(header checksum)由發(fā)送端填充,接收端對(duì)其使用CRC算法以檢驗(yàn)IP數(shù)據(jù)報(bào)頭部(注意,僅檢驗(yàn)頭部)在傳輸過程中是否損壞。
32位的源端IP地址和目的端IP地址用來標(biāo)識(shí)數(shù)據(jù)報(bào)的發(fā)送端和接收端。一般情況下,這兩個(gè)地址在整個(gè)數(shù)據(jù)報(bào)的傳遞過程中保持不變,而不論它中間經(jīng)過多少個(gè)中轉(zhuǎn)路由器。關(guān)于這一點(diǎn),我們將在第4章進(jìn)一步討論。
IPv4最后一個(gè)選項(xiàng)字段(option)是可變長(zhǎng)的可選信息。這部分最多包含40字節(jié),因?yàn)镮P頭部最長(zhǎng)是60字節(jié)(其中還包含前面討論的20字節(jié)的固定部分)。可用的IP選項(xiàng)包括:
記錄路由(record route),告訴數(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í)間。
松散源路由選擇(loose source routing),指定一個(gè)路由器IP地址列表,數(shù)據(jù)報(bào)發(fā)送過程中必須經(jīng)過其中所有的路由器。
嚴(yán)格源路由選擇(strict source routing),和松散源路由選擇類似,不過數(shù)據(jù)報(bào)只能經(jīng)過被指定的路由器。
關(guān)于IP頭部選項(xiàng)字段更詳細(xì)的信息,請(qǐng)參考IP協(xié)議的標(biāo)準(zhǔn)文檔RFC 791。不過這些選項(xiàng)字段很少被使用,使用松散源路由選擇和嚴(yán)格源路由選擇選項(xiàng)的例子大概僅有traceroute程序。此外,作為記錄路由IP選項(xiàng)的替 代品,traceroute程序使用UDP報(bào)文和ICMP報(bào)文實(shí)現(xiàn)了更可靠的記錄路由功能,詳情請(qǐng)參考文檔RFC 1393。
IP路由選擇
對(duì)于主機(jī),如果目的主機(jī)和源主機(jī)直接相連,或者處于同一個(gè)網(wǎng)絡(luò)中,IP數(shù)據(jù)報(bào)就直接發(fā)送到目的主機(jī)。否則,主機(jī)將數(shù)據(jù)報(bào)發(fā)送給默認(rèn)的路由器,由路由器來轉(zhuǎn)發(fā)包。
IP層可以配置成路由器的功能,也可以配置成主機(jī)功能。區(qū)別是,主機(jī)不轉(zhuǎn)發(fā)數(shù)據(jù)報(bào),而路由器需要轉(zhuǎn)發(fā)包。
IP層在內(nèi)存中都有一個(gè)路由表,當(dāng)收到數(shù)據(jù)報(bào)進(jìn)行發(fā)送時(shí),都要搜索該表。
路由表每項(xiàng)包含的信息:
·????????目的IP地址。可以是主機(jī)地址,也可以是網(wǎng)絡(luò)地址,由下述的標(biāo)志來標(biāo)示。
·????????下一跳路由器的IP地址,或者是直接連接的接口。
·????????標(biāo)志。一個(gè)標(biāo)志標(biāo)示目的IP是網(wǎng)路地址還是主機(jī)地址,另一個(gè)標(biāo)志指示下一站路由器是否為真正的下一站路由器,還是一個(gè)直連的接口。
·????????為數(shù)據(jù)報(bào)的傳輸指定一個(gè)網(wǎng)絡(luò)接口。
IP路由選擇主要完成下面的功能:
1)?搜索路由表,尋找與目的IP完全匹配的條目。如果找到,則把報(bào)文發(fā)給下一站路由或者直連接口(取決于標(biāo)志字段的值)
2)?搜索路由表,尋找與目的網(wǎng)絡(luò)號(hào)匹配的條目。找到的處理同上。這種搜索網(wǎng)絡(luò)的匹配方法必須考慮可能的子網(wǎng)掩碼。
3)?搜索路由表,尋找標(biāo)為“默認(rèn)(default).類似192.168.0.1”的條目。如果找到,處理同上。
如果上述都沒成功,則丟棄該包,并返回主機(jī)不可達(dá)或者網(wǎng)絡(luò)不可達(dá)的錯(cuò)誤。
數(shù)據(jù)包在傳輸過程中,經(jīng)過不同的鏈路層或不同的網(wǎng)絡(luò)會(huì)構(gòu)造不同的鏈路層首部,但是IP部分不會(huì)更改(忽略路由器的NAT功能)。鏈路層的目的地址(如果有的話),始終是下一站的鏈路層地址。
子網(wǎng)尋址
最早:IP地址?=?網(wǎng)絡(luò)號(hào)?+?主機(jī)號(hào)
子網(wǎng)編址:IP地址?=?網(wǎng)絡(luò)號(hào)?+?子網(wǎng)號(hào)?+?主機(jī)號(hào)
子網(wǎng)對(duì)于子網(wǎng)以外的路由器都是透明的,對(duì)于子網(wǎng)內(nèi)部的路由器不透明。
RFC?1009允許含有子網(wǎng)的一個(gè)網(wǎng)絡(luò)使用多個(gè)子網(wǎng)掩碼。
IP地址編址方案:將IP地址劃分為A,B,C,D,E五類,其中A,B,C為基本類,D,E類作為多播和保留使用。
| 網(wǎng)絡(luò)類別 | 最大網(wǎng)絡(luò)數(shù) | IP地址范圍 | 最大主機(jī)數(shù) | 私有IP地址范圍 |
| A | 126(2^7-2) | 1.0.0.0--126.255.255.255 | 16777214 | 10.0.0.0--10.255.255.255 |
| B | 16384(2^14) | 128.0.0.0--191.255.255.255 | 65534 | 172.16.0.0--172.31.255.255 |
| C | 2097152(2^21) | 192.0.0.0--223.255.255.255 | 254 | 192.168.0.0--192.168.255.255 |
?
內(nèi)部私有地址:
A類?10.0.0.0--10.255.255.255
B類?172.16.0.0--172.31.255.255
C類?192.168.0.0--192.168.255.255
特殊的IP地址:
0表示所有的比特為0,-1表示所有的比特位全為1,netid、subnetid和hostid分別表示不為全0或全1的對(duì)應(yīng)字段。子網(wǎng)號(hào)欄為空表示該地址沒有進(jìn)行子網(wǎng)劃分。
?一、概念?
將IP地址中的主機(jī)號(hào)再分成一個(gè)子網(wǎng)號(hào)和主機(jī)號(hào)。而不是把IP地址看成單純的網(wǎng)絡(luò)號(hào)+主機(jī)號(hào)。舉例來說:一個(gè)B類網(wǎng)絡(luò)地址,網(wǎng)絡(luò)位為16位,主機(jī)位為16位。若劃分子網(wǎng)則需要對(duì)這16主機(jī)位繼續(xù)進(jìn)行劃分,比如在這16bit中將8bit用于子網(wǎng)號(hào),8bit用于主機(jī)號(hào),那么就允許有254個(gè)子網(wǎng),每個(gè)子網(wǎng)可以有254臺(tái)主機(jī)(由于全0或全1的主機(jī)號(hào)都是無效的,因此為256-2=254)。
二、特點(diǎn)?
子網(wǎng)對(duì)外部路由器來說隱藏了內(nèi)部網(wǎng)絡(luò)組織的細(xì)節(jié)。比如在一個(gè)所有IP地址都有一個(gè)B類網(wǎng)絡(luò)號(hào)140.252的網(wǎng)絡(luò)例子中,劃分30個(gè)子網(wǎng)(140.252.1.X~140.252.30.X),每個(gè)子網(wǎng)上擁有一定數(shù)量的主機(jī)。與直接使用30個(gè)C類地址相比,使用子網(wǎng)尋址功能的好處就是可以縮小Internet路由表的規(guī)模。B類地址140.252被劃分成子網(wǎng)對(duì)除了140.252子網(wǎng)之外的Internet路由器來說都是透明的。如果這里最終訪問外部Internet的地址是通過 gateway IP地址140.252.104.1進(jìn)行的,那么為了到達(dá)任何以140.252開頭的主機(jī),外部路由器僅需要知道到達(dá)IP地址140.252.104.1的路徑,這意味著對(duì)于整個(gè)140.252網(wǎng)絡(luò)僅需要一條路由表項(xiàng)。而不是像30個(gè)C類地址需要30個(gè)路由表項(xiàng)那樣。
PS: 子網(wǎng)劃分對(duì)于子網(wǎng)內(nèi)的路由器是不透明的。至于如何到達(dá)路徑,則是根據(jù)IP路由選擇進(jìn)行的。
?
IP地址
每個(gè)計(jì)算機(jī)必須有一個(gè) IP 地址才能夠連入因特網(wǎng)。
每個(gè)IP 包必須有一個(gè)地址才能夠發(fā)送到另一臺(tái)計(jì)算機(jī)。
IP標(biāo)識(shí)網(wǎng)絡(luò)中的節(jié)點(diǎn)主機(jī),端口號(hào)標(biāo)識(shí)節(jié)點(diǎn)主機(jī)的進(jìn)程。
IP 地址包含 4 組數(shù)字:
TCP/IP 使用 4 組數(shù)字來為計(jì)算機(jī)編址。每個(gè)計(jì)算機(jī)必須有一個(gè)唯一的 4 組數(shù)字的地址。
每組數(shù)字必須在 0 到 255 之間,并由點(diǎn)號(hào)隔開,比如:192.168.1.60。
?
32 比特 = 4 字節(jié)
TCP/IP 使用 32 個(gè)比特來編址。一個(gè)計(jì)算機(jī)字節(jié)是 8 比特。所以 TCP/IP 使用了 4 個(gè)字節(jié)。
一個(gè)計(jì)算機(jī)字節(jié)可以包含 256 個(gè)不同的值:
00000000、00000001、00000010、00000011、00000100、00000101、00000110、00000111、00001000....... 直到 11111111。
現(xiàn)在,您應(yīng)該知道了為什么 TCP/IP 地址是介于 0 到255 之間的 4 組數(shù)字。
?
IP V6
IPv6 是 "Internet Protocol Version 6" 的縮寫,也被稱作下一代互聯(lián)網(wǎng)協(xié)議,它是由 IETF 小組(Internet 工程任務(wù)組Internet Engineering Task Force)設(shè)計(jì)的用來替代現(xiàn)行的IPv4(現(xiàn)行的)協(xié)議的一種新的 IP 協(xié)議。
我們知道,Internet 的主機(jī)都有一個(gè)唯一的 IP 地址,IP 地址用一個(gè) 32 位二進(jìn)制的數(shù)表示一個(gè)主機(jī)號(hào)碼,但 32 位地址資源有限,已經(jīng)不能滿足用戶的需求了,因此 Internet 研究組織發(fā)布新的主機(jī)標(biāo)識(shí)方法,即 IPv6。
在RFC1884 中(RFC 是 Request forComments document 的縮寫。RFC 實(shí)際上就是Internet 有關(guān)服務(wù)的一些標(biāo)準(zhǔn)),規(guī)定的標(biāo)準(zhǔn)語法建議把 IPv6 地址的 128 位(16 個(gè)字節(jié))寫成 8 個(gè) 16 位的無符號(hào)整數(shù),每個(gè)整數(shù)用 4 個(gè)十六進(jìn)制位表示,這些數(shù)之間用冒號(hào)(:)分開,例如:3ffe:3201:1401:1280:c8ff:fe4d::db39。
?
?
域名
12 個(gè)阿拉伯?dāng)?shù)字很難記憶。使用一個(gè)名稱更容易。
用于 TCP/IP 地址的名字被稱為域名。w3cschool.cc 就是一個(gè)域名。
當(dāng)你鍵入一個(gè)像 http://www.w3cschool.cc 這樣的域名,域名會(huì)被一種 DNS 程序翻譯為數(shù)字。
在全世界,數(shù)量龐大的 DNS 服務(wù)器被連入因特網(wǎng)。DNS 服務(wù)器負(fù)責(zé)將域名翻譯為 TCP/IP 地址,同時(shí)負(fù)責(zé)使用新的域名信息更新彼此的系統(tǒng)。
當(dāng)一個(gè)新的域名連同其 TCP/IP 地址一起注冊(cè)后,全世界的 DNS 服務(wù)器都會(huì)對(duì)此信息進(jìn)行更新。
總結(jié)
以上是生活随笔為你收集整理的网络:IP协议与寻址的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络:IP路由流程
- 下一篇: 网络:TCP/IP各层的协议