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