網際網路協定

網際網路協定

網際網路協定(IP)是網際網路協定群(Internet Protocol Suite ,IPS)中眾多通信協定中的一個,也是其中最重要的一個。專家們一般將IPS解釋為一個協定堆疊,它可以將應用程式的信息(比如電子郵件或者網頁傳輸的內容)轉換為網路可以傳輸的數據包。

IP定義

IP協定,主要負責通過網路連線在數據源主機和目的主機間傳送數據包。

在 RFC 791 中對於 IP協定是這樣定義的:

“網際網路協定(IP)特指為實現在一個相互連線的網路系統上從一個源到一個目的地傳輸比特數據包(網際網路數據包)所提供必要功能的協定。其中並沒有增加端到端數據可靠性機制、流量控制機制、排序機制或者其它在端到端協定常見的功能機制。網際網路協定可在其支持的網路上提供相應服務,實現多種類型和品質的服務。”

IP屬性

IP通過多種屬性來定義數據是如何被傳輸的,而這些屬性對於我們將要討論的IPv4或IPv6話題來說至關重要。因此我們要詳細了解一下相關屬性:

· Host addressing主機定址: IP 協定為網路上每個主機定義了定址方案,通過主機地址使得數據包得以傳遞。

IP協定被設計為可以通過協定棧技術與其它網路協定聯合使用。

· Connectionless delivery無連線交付:IP協定不承擔在數據源主機和目的主機間建立連線的責任。只負責從數據源主機建立數據報並傳送出去的工作。

· Best-effort delivery最大努力交付:IP協定會儘量確保目標主機能夠獲得傳送給它的數據包,但是並不是絕對保證。

· No provision for delivery acknowledgments無需交付確認:目標主機收到數據包後不需要向傳送源主機提交確認信息。

也許有人會問,既然後三個屬性沒有實現一個良好的數據傳輸環境,IP 協定數據包是如何知道自己該被傳送到哪裡?為什麼協定沒有其它更多功能?答案很簡單,為了更好的數據傳輸性能。使用確立連線,錯誤校驗,確認交付等功能,都需要額外的處理器資源以及額外的網路頻寬。因此如果被傳輸的數據報不需要這些功能,那么就最好不要。另外,開發IP協定的人員也不是傻子,可以通過協定堆疊更有效的實現上述功能。

IP協定

規定網路地址的協定,叫做IP協定。它所定義的地址,就被稱為IP位址。

目前,廣泛採用的是IP協定第四版,簡稱IPv4。這個版本規定,網路地址由32個二進制位組成。

習慣上,我們用分成四段的十進制數表示IP位址,從0.0.0.0一直到255.255.255.255。

網際網路上的每一台計算機,都會分配到一個IP位址。這個地址分成兩個部分,前一部分代表網路,後一部分代表主機。比如,IP位址172.16.254.1,這是一個32位的地址,假定它的網路部分是前24位(172.16.254),那么主機部分就是後8位(最後的那個1)。處於同一個子網路的電腦,它們IP位址的網路部分必定是相同的,也就是說172.16.254.2應該與172.16.254.1處在同一個子網路。

但是,問題在於單單從IP位址,我們無法判斷網路部分。還是以172.16.254.1為例,它的網路部分,到底是前24位,還是前16位,甚至前28位,從IP位址上是看不出來的。

那么,怎樣才能從IP位址,判斷兩台計算機是否屬於同一個子網路呢?這就要用到另一個參數"子網掩碼"(subnet mask)。

所謂"子網掩碼",就是表示子網路特徵的一個參數。它在形式上等同於IP位址,也是一個32位二進制數字,它的網路部分全部為1,主機部分全部為0。比如,IP位址172.16.254.1,如果已知網路部分是前24位,主機部分是後8位,那么子網路掩碼就是11111111.11111111.11111111.00000000,寫成十進制就是255.255.255.0。

知道"子網掩碼",我們就能判斷,任意兩個IP位址是否處在同一個子網路。方法是將兩個IP位址與子網掩碼分別進行AND運算(兩個數位都為1,運算結果為1,否則為0),然後比較結果是否相同,如果是的話,就表明它們在同一個子網路中,否則就不是。

比如,已知IP位址172.16.254.1和172.16.254.233的子網掩碼都是255.255.255.0,請問它們是否在同一個子網路?兩者與子網掩碼分別進行AND運算,結果都是172.16.254.0,因此它們在同一個子網路。

總結一下,IP協定的作用主要有兩個,一個是為每一台計算機分配IP位址,另一個是確定哪些地址在同一個子網路。

TCP協定

UDP協定的優點是比較簡單,容易實現,但是缺點是可靠性較差,一旦數據包發出,無法知道對方是否收到。

為了解決這個問題,提高網路可靠性,TCP協定就誕生了。這個協定非常複雜,但可以近似認為,它就是有確認機制的UDP協定,每發出一個數據包都要求確認。如果有一個數據包遺失,就收不到確認,發出方就知道有必要重發這個數據包了。

因此,TCP協定能夠確保數據不會遺失。它的缺點是過程複雜、實現困難、消耗較多的資源。

TCP數據包和UDP數據包一樣,都是內嵌在IP數據包的"數據"部分。TCP數據包沒有長度限制,理論上可以無限長,但是為了保證網路的效率,通常TCP數據包的長度不會超過IP數據包的長度,以確保單個TCP數據包不必再分割。

相關區別

當討論IP協定時,很多人(包括我在內)都會混淆packet 和 datagram 這兩個術語,因為這兩者的定義非常類似(有些人認為二者完全相同)。RFC 1594 對於數據包和數據報的共同定義如下:

“一個獨立的數據實體,攜帶從數據源主機到目的主機所需的足夠信息,而不依賴於源主機和目的主機之前建立的網路連線或者交換。”

既然定義是一樣的,為什麼還有這兩個術語是否相同的討論呢?實際上是一些專家對於packets和 datagrams有不同的定義,從而導致了疑問的產生。這些專家在討論有關可靠數據傳輸協定,比如TCP/IP時,會使用packet數據包這個術語,而在討論UDP 這樣的最大努力交付協定時,會使用datagram數據報這個術語。 在我們討論IP時,使用哪個術語都是可以的,但是我傾向於使用數據報(稍後你們會知道為什麼我要這樣)。

相關詞條

相關搜尋

熱門詞條

聯絡我們