TCP/IP網(wǎng)際層協(xié)議
TCP/IP協(xié)議棧的網(wǎng)際層提供尋址和路由選擇協(xié)議,路由器主要工作在該層。TCP/IP協(xié)議棧
的網(wǎng)際層對應OSI參考模式的網(wǎng)絡層,該層主要運行幾個協(xié)議。
網(wǎng)際協(xié)議(IP):對數(shù)據(jù)包進行非連接的最佳路由選擇,它不關心數(shù)據(jù)包的內容,只選擇一個
路徑將數(shù)據(jù)包送到目的地。
網(wǎng)際控制報文協(xié)議(ICMP):提供控制和傳遞信息的功能。
地址解析協(xié)議(ARP):由已知的IP地址確定數(shù)據(jù)鏈路層的MAC地址。
反向地址解析協(xié)議(RARP):有已知的數(shù)據(jù)鏈路層確定IP地址。
動態(tài)主機配置協(xié)議(DHCP):將IP地址和一些TCP/IP配置分配給網(wǎng)絡中的計算機的一向服務
協(xié)議。
IP
在TCP/IP協(xié)議棧,IP主要負責邏輯尋址。通過相應管理機制??梢允共煌O備之間利用IP
地址進行通信。
IP頭格式
IP數(shù)據(jù)包由IP頭和數(shù)據(jù)組成。
名稱
描述
版本
表明了一個數(shù)據(jù)包采用的是因特網(wǎng)協(xié)議的那個版本。對于IPv4,這個值為4
頭長度
以字節(jié)為單位的報頭長度
服務類型
數(shù)據(jù)包的處理方式,前三位是優(yōu)先級
總長度
報頭和數(shù)據(jù)的總長度
標識
惟一的IP數(shù)據(jù)包,可以理解為IP報文的序列號,用于識別潛在的重復報文等
標志
指出數(shù)據(jù)包是否存在
段位移
段位移也稱為片位移,它是指對數(shù)據(jù)包分片以允許互聯(lián)網(wǎng)上的不同MTU
生存期
報頭的存活時間,一旦該計算值減為0,該報就丟棄。TTL用于限制一
個IP包做敬禮的站點數(shù)。正常設為64,最大設為255,TTL每經(jīng)過一
個路由器便減1.當值為0時,數(shù)據(jù)包被丟棄。同時,路由器向發(fā)送者
返回一個ICMP超時信息。通常數(shù)據(jù)包只會由于網(wǎng)絡回路而被丟棄。
例如:當?shù)谝慌_路由器認為到達某一目的端的路徑要經(jīng)過第二臺路由
器,而第二臺路由器認為到達某一目的端的路徑要經(jīng)過第一臺路由器,
這時會發(fā)生什么情況呢?當?shù)谝慌_路由器接收到一個發(fā)往給目的地地
址的數(shù)據(jù)包時,它會將數(shù)據(jù)包轉發(fā)給第二臺路由器,而第二臺路由器將會數(shù)據(jù)包重新轉發(fā)給第一臺路由器,然后第一臺路由器有又將包轉
發(fā)給第二臺路由器。如果沒有TTL,這個包就會在這兩臺路由器構成的
回路中永遠轉下去。這樣的回路在大的網(wǎng)絡中經(jīng)常會出現(xiàn)。
協(xié)議
發(fā)送數(shù)據(jù)包的上層(第四層)協(xié)議
頭檢驗和
報頭上的完整性檢查。頭檢驗用來確認接收到的IP報頭中有沒有差錯
頭校驗和只由IP報頭的各個域計算得來,而與IP包的凈荷無關,IP
包凈荷的校驗則是高層協(xié)議的工作。如果目的地計算的校驗和與報文
所含的檢驗和不同,那么這個數(shù)據(jù)包就會被丟棄。
源IP地址
標識通信終端設備的IP地址
目的IP地址
標識通信中斷設備的IP地址
IP選項
網(wǎng)絡測試、調試、安全等功能
數(shù)據(jù)
需要傳輸?shù)臄?shù)據(jù)
數(shù)據(jù)包的的大小、網(wǎng)絡MTU及TCP最大報文段長度
下面介紹數(shù)據(jù)包分片、網(wǎng)絡MTU、TCP最大報文段長度等概念,以加深讀者對TCP/IP協(xié)議
棧的理解。
數(shù)據(jù)包的分片
數(shù)據(jù)包是被封裝在物理幀中傳輸?shù)模瑢τ诰W(wǎng)絡硬件來說,他們對一個物理幀的可傳輸數(shù)據(jù)
量都規(guī)定了一個上限值,這個上限值就是最大傳輸單元,即數(shù)據(jù)包的MTU(Maximum Transfer
Unit)。例如,源于令牌環(huán)網(wǎng)的數(shù)據(jù)包最大傳輸單元(MTU)為4500字節(jié),而以太網(wǎng)的數(shù)據(jù)包
最大傳輸單元為1500字節(jié),F(xiàn)DDI的數(shù)據(jù)包最大傳輸單元為4770字節(jié)。如果數(shù)據(jù)包的大小
比互聯(lián)網(wǎng)中最大的MTU要大,它是無法被封裝到幀中去的;相反如果數(shù)據(jù)包的大小被限制
為互聯(lián)網(wǎng)中最小網(wǎng)絡的MTU,這種做法也是很不經(jīng)濟(因為在大MTU的網(wǎng)絡上,會造成帶寬
浪費)。
TCP/IP澤洋選擇數(shù)據(jù)包的MTU呢?主要有一下兩點。
TCP/IP選擇接近相連網(wǎng)絡的MTU值為初始數(shù)據(jù)包大小,例如,某臺主機連接在以太網(wǎng)上,
那么TCP/IP會選擇某個接近1500字節(jié)的值為初始數(shù)據(jù)包(如1400、1440、1480等)。
為什么會選擇諸如1400這樣的數(shù)值呢?因為IP數(shù)據(jù)包以8倍數(shù)的字節(jié)數(shù)表示數(shù)據(jù)包的段位
移所以數(shù)據(jù)包大小肯定是8的倍數(shù)。
TCP/IP同時也提供了一種機制:在MTU較小的網(wǎng)絡上,可以把大數(shù)據(jù)包劃分成更小的數(shù)據(jù)
包片(分片),即如果TCP選擇初始數(shù)據(jù)包大小為1500字節(jié),在中途有個MTU為620的網(wǎng)絡
處于兩種網(wǎng)絡薄片(分片),處于兩種網(wǎng)絡分界處的路由器會對數(shù)據(jù)包進行分片操作。
IP報頭中的標志和段位移就是用于將大IP包分割成幾個稱為片的小塊,以保證它可以順利
通過物理處理大IP包的網(wǎng)絡。其中,標識是發(fā)送端填寫的值,以便接收端重組那些不得不
分成幾個片的包;段位移可以標識出每個分段偏移量,從而使目的的系統(tǒng)可以正確地重組
原來數(shù)據(jù)包。
這種分片不一定要把數(shù)據(jù)包分成限制大小的片,首先選擇最接近網(wǎng)絡MTU的8倍數(shù)的字節(jié)數(shù)
為數(shù)據(jù)包大小;一般最后一片是前面分下來的零頭,所以最后一片往往比其他片小。
分片以后所得的每個數(shù)據(jù)包的格式都與原來的數(shù)據(jù)包相同,都包含了原來數(shù)據(jù)包的IP報頭
數(shù)據(jù)包片的總長度(報頭+數(shù)據(jù))小于網(wǎng)絡MTU。
源站點選擇了1500字節(jié)作為數(shù)據(jù)包大小(20+1480,其中20為IP報頭長度),每個數(shù)據(jù)包
經(jīng)過兩種網(wǎng)絡的邊界路由器時,被分成3片,每片的大小都小于或等于620字節(jié),這樣數(shù)據(jù)
包就可以順利地通過整個網(wǎng)絡。那么數(shù)據(jù)包分片以后怎樣重組呢?下面就來討論這個問題。
數(shù)據(jù)包分片后的重組
首先強調一點,數(shù)據(jù)包分片后的重組是發(fā)生分片到達目標主機之后,而不是在通過MTU
較小的網(wǎng)絡之后的網(wǎng)絡,重組依然發(fā)生在分片到達目標主機之后。如果在傳輸過程中某個
分片丟失了,目標主機將丟棄整個包,所以分片增加了數(shù)據(jù)包丟失的概率,應盡量避免數(shù)
據(jù)包分片。
雖然在目標主機上重組數(shù)組包片存在一些缺點,但是每個數(shù)據(jù)包片可以像數(shù)據(jù)包一樣選擇
路由(可以在多路壞境了實習那覆載平衡),即數(shù)據(jù)包的一部分分片走鏈路1。另一部分走
鏈路2,而且路由器不負擔數(shù)據(jù)包片的重組工作也有利于減輕路由器負擔。
TCP最大報文段長度
前面講到傳輸層的TCP要對應用層生成的數(shù)據(jù)流進行分段,通信雙方必須協(xié)商一個最大的
報文段長度(Maximum Segment Size)。一幫情況下TCP自動計算機選擇合適的報文段長度,
使IP數(shù)據(jù)包與網(wǎng)絡MTU相適應。
在互聯(lián)網(wǎng)中選擇合適報文段長度是很困難的,過大或者過小都會是網(wǎng)絡性能變壞。一方面,
報文段太小會減低網(wǎng)絡利用率。因為TCP報文段是封裝在IP數(shù)據(jù)包又被封裝在幀中,每一
層的封裝都要加上自己的頭部信息或尾部信息,如果報文段很小,每一層的頭部或尾部信息
在數(shù)據(jù)幀中所占有的比重就大,這勢必造成帶寬的浪費。
另一方面,報文段也會降低網(wǎng)絡性能。大的報文段產(chǎn)生了大的數(shù)據(jù)包,如果網(wǎng)絡中存在MTU
較小的網(wǎng)路,TCP/IP就會對數(shù)據(jù)包進行分片。由于數(shù)據(jù)包片并不像數(shù)據(jù)段那樣能進行與重
傳,如果某個數(shù)據(jù)包在傳輸過程中丟失了,那么整個數(shù)據(jù)包就要被重傳,如果數(shù)據(jù)包分片
太多,勢必會影響網(wǎng)絡性能。
理論上講,TCP報文段最佳長度的要求是;盡可能攜帶更多的數(shù)據(jù),而且IP數(shù)據(jù)包在傳輸
過程中盡量不要分片。這個要求只是理論要求,在真正實現(xiàn)時,還會遇到更多問題。