簡介
TCP/IP協議族中最核心的協議,提供不可靠、無連接的數據報傳輸服務。
- 不可靠:不能保證IP數據報能成功送達。
- 無連接:並不維護后續數據報的狀態信息,每個數據報的處理都是相互獨立。數據報可能不會按照發送順序接收。同一站點向另一站點發送的多個數據報可能經過不同的路由到達。
幀格式
IP數據報格式如下。
- 版本:IP協議版本號,目前為4。故稱為IPv4.
- 首部長度:以4字節為單位。最小值為5,不包含可選字段的IP首部大小為20字節。最大值為15,故IP首部最大長度為60字節。
- 服務類型(TOS):3bit優先權(已被忽略),4bit的TOS字段,1bit未用(0)。4bit的TOS分別為最小時延、最大吞吐量、最高可靠性、最小費用。4bit中只能置其中一個為1。全零時表示一般服務。現在大多數TCP/IP實現都不支持TOS特性,但是無線中QoS有用到該字段。
- 總長度:整個IP數據報的長度,以字節為單位。16bit,可知IP數據報最大長度為65535字節。
- 標識符:唯一標示一份IP數據報。通常值遞增。
- 標志位:
- 片偏移:
- TTL:time to live,生存時間。設置了數據報可以經過的最多路由器數。由源主機設置,每經過一個路由器,該值減一,當值為0時,被丟棄。並發送ICMP報文通知源主機。
- 協議:標示基於IP的協議。ICMP:1,IGMP:2,TCP:6,UDP:17。
- 首部校驗和:根據IP首部計算的校驗和,不對首部后面的數據進行計算。先置檢驗和為0,按照16bit進行二進制反碼求和,結果存放於檢驗和字段中。
- 源IP地址
- 目的IP地址
- 可選字段:
安全和處理限制(用於軍事領域,詳見RFC 1108)
記錄路徑(讓每個路由器都記下它的IP地址)
時間戳(讓每個路由器都記下它的IP地址和時間)
寬松的源站選錄(為數據報指定一系列必須經過的IP地址)
嚴格的源站選錄(只能經過指定的這些地址)
可選字段必須是32bit的整數倍,必要時需要插入0進行填充,因為IP首部始終是32bit的整數倍(這是首部長度字段要求的)
IP路由選擇
對於主機,如果目的主機和源主機直接相連,或者處於同一個網絡中,IP數據報就直接發送到目的主機。否則,主機將數據報發送給默認的路由器,由路由器來轉發包。
IP層可以配置成路由器的功能,也可以配置成主機功能。區別是,主機不轉發數據報,而路由器需要轉發包。
IP層在內存中都有一個路由表,當收到數據報進行發送時,都要搜索該表。
路由表每項包含的信息:
- 目的IP地址。可以是主機地址,也可以是網絡地址,由下述的標志來標示。
- 下一跳路由器的IP地址,或者是直接連接的接口。
- 標志。一個標志標示目的IP是網路地址還是主機地址,另一個標志指示下一站路由器是否為真正的下一站路由器,還是一個直連的接口。
- 為數據報的傳輸指定一個網絡接口。
IP路由選擇主要完成下面的功能:
1) 搜索路由表,尋找與目的IP完全匹配的條目。如果找到,則把報文發給下一站路由或者直連接口(取決於標志字段的值)
2) 搜索路由表,尋找與目的網絡號匹配的條目。找到的處理同上。這種搜索網絡的匹配方法必須考慮可能的子網掩碼。
3) 搜索路由表,尋找標為“默認(default)”的條目。如果找到,處理同上。
如果上述都沒成功,則丟棄該包,並返回主機不可達或者網絡不可達的錯誤。
數據包在傳輸過程中,經過不同的鏈路層或不同的網絡會構造不同的鏈路層首部,但是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的對應字段。子網號欄為空表示該地址沒有進行子網划分。