原始檔**於
1,資料報:
「包」(packet)是tcp/ip協議通訊傳輸中的資料單位,一般也稱「資料報」。有人說,區域網中傳輸的不是「幀」(frame)嗎?沒錯,但是tcp/ip協議是工作在osi模型第三層(網路層)、第四層(傳輸層)上的,而幀是工作在第二層(資料鏈路層)。上一層的內容由下一層的內容來傳輸,所以在區域網中,「包」是包含在「幀」裡的。
名詞解釋:osi(open system interconnection,開放系統互聯)模型是由國際標準化組織(iso)定義的標準,它定義了一種分層體系結構,在其中的每一層定義了針對不同通訊級別的協議。osi模型有7層,1?7層分別是:物理層、資料鏈路層、網路層、傳輸層、會話層、表示層、應用層。osi模型在邏輯上可分為兩個部分:低層的1?4層關注的是原始資料的傳輸;高層的5?7層關注的是網路下的應用程式。 資料報主要由「目的ip位址」、「源ip位址」、「淨載資料」等部分構成。 資料報的結構與我們平常寫信非常類似,目的ip位址是說明這個資料報是要發給誰的,相當於收信人位址;源ip位址是說明這個資料報是發自**的,相當於發信人位址;而淨載資料相當於信件的內容。 正是因為資料報具有這樣的結構,安裝了tcp/ip協議的計算機之間才能相互通訊。我們在使用基於tcp/ip協議的網路時,網路中其實傳遞的就是資料報。理解資料報,對於網路管理的網路安全具有至關重要的意義。
3,資料報的封裝
上三層: 資料
傳輸層: 資料 tcp/ip(head) 段
網路層: 資料 tcp/ip(head) ip(head) 包
資料鏈路層: 資料 tcp/ip(head) ip(head) 幀
物理層: 111111111111000000000000000011 位元
4,tcp段格式
要想對tcp有著較為詳細的了解的話,那tcp的包格式是一定要了解,有了結構的清楚認識才能真正的理解它的工作過程和各種機制的原理,以下就是tcp的結構圖:
tcp資料報可分為tcp包頭和來自應用層的資料兩部分
中間的標誌位就是用於協議的一些機制的實現的位元位大家可以看到有6位元,它們依次如下:
urg、ack、psh、rst、syn、fin。
urg表示緊急指標字段有效;
ack置位表示確認號字段有效;
psh表示當前報文需要請求推(push)操作;
rst置位表示復位tcp連線;
syn用於建立tcp連線時同步序號;
fin用於釋放tcp連線時標識傳送方位元流結束
源埠和目的埠:各為16位元,用於表示應用層的連線。源埠表示產生資料報的應用層程序,而目的埠則表示資料報所要到達的目的程序。
序列號:為32位元,表示資料流中的位元組數。序列號為首位元組在整個資料流中的位置。初始序列號隨機產生,並在連線建立階段予以同步。
確認號:表示序號為確認號減去1的資料報及其以前的所有資料報已經正確接收,也就是說他相當於下乙個準備接收的位元組的序號。
頭部資訊:4位元,用於指示資料起始位置。由於tcp包頭中可選項的長度可變,因此整個包頭的長度不固定。如果沒有附加字段,則tcp資料報基本長度為20位元組。
視窗:16位,表示源端主機在請求接收端等待確認之前需要接收的位元組數。它用於流量控制,視窗大小根據網路擁塞情況和資源可用性進行增減。
校驗位:16位。用於檢查tcp資料報頭和資料的一致性。
緊急指標:16位。當urg碼有效時只向緊急資料位元組。
可選項:存在時表示tcp包頭後還有另外的4位元組資料。tcp常用的選項為最大資料報(並非整個tcp報文)mss。每乙個tcp段都包含乙個固定的20位元組的段頭。tcp段頭由20位元組固定頭和一些可選項組成。實際資料部分最多可以有65495(65535-20-20=65495)位元組。
最大傳輸單元(maximum transmission unit,mtu)是指一種通訊協議的某一層上面所能通過的最大資料報大小(以位元組為單位)。最大傳輸單元這個引數通常與通訊介面有關(網路介面卡、串列埠等)。
網際網路協議允許ip分片,這樣就可以將資料報分成足夠小的片段以通過那些最大傳輸單元小於該資料報原始大小的鏈路了。這一分片過程發生在 ip 層(osi模型的第三層,即網路層),它使用的是將分組傳送到鏈路上的網路介面的最大傳輸單元的值。原始分組的分片都被加上了標記,這樣目的主機的 ip 層就能將分組重組成原始的資料報了
什麼是mtu?
最大傳輸單元(maximum transmission unit,mtu)是指一種通訊協議的某一層上面所能通過的最大資料報大小(以位元組為單位)。最大傳輸單元這個引數通常與通訊介面有關(網路介面卡、串列埠等)。
比如下圖顯示的常見的mtu(圖截自《tcp/ip詳解 卷一:協議》)
如上圖所示,我們平常接觸的網路對資料幀的長度都有乙個限制,只是其最大值不同。鏈路層的這個特性就稱之為mtu,最大傳輸單元。
資料幀超過mtu怎麼辦?
如果ip層有乙個資料報要傳,而且資料的長度比鏈路層的mtu大,那麼ip層就會進行分片,把資料報分成託干片,讓每一片都不超過mtu。注意,ip分片可以發生在原始傳送端主機上,也可以發生在中間路由器上。
把乙個ip資料報分片以後,只有到達目的地之後才進行重新組裝。重新組裝由目的端的ip層完成,它的目的就是使分片和重新組裝過程對於傳輸層(tcp和udp)是透明的。已經分片過的資料報仍然有可能會再次進行分片,也就是說ip分片可能發生不止一次。什麼保證了這點?因為ip頭部中包含的資料為分片和重新組裝提供了足夠的資訊。
來做個測試吧,看看怎麼分片的,我用ping命令,也就是利用icmp協議來測試。乙太網mtu為1500,減去ip頭部20個位元組,再減去icmp 8個位元組,那麼我們認為不分片的上限值為1500-20-8=1472。
注意看下圖的實驗結果,很明顯。
5,udp段格式
6,ip包格式
ipv4首部一般是20位元組長。在乙太網幀中,ipv4包首部緊跟著乙太網幀首部,同時乙太網幀首部中的協議型別值設定為080016。 ipv4提供不同,大部分是很少用的選項,使得ipv4包首部最長可擴充套件到60位元組(總是4個位元組4個位元組的擴充套件)04
8121619
2431
版本首部長度
服務型別
長度認證
標誌段偏移量
ttl協議
校驗和源ip位址
目的ip位址
選項 ...
版本:4位,指定ip協議的版本號。
包頭長度(ihl):4位,ip協議包頭的長度,指明ipv4協議包頭長度的位元組數包含多少個32位。由於ipv4的包頭可能包含可變數量的可選項,所以這個字段可以用來確定ipv4資料報中資料部分的偏移位置。ipv4包頭的最小長度是20個位元組,因此ihl這個欄位的最小值用十進位制表示就是5 (5x4 = 20位元組)。就是說,它表示的是包頭的總位元組數是4位元組的倍數。
服務型別:定義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時將被路由器丟棄。ttl<64 128< ttl<256表示linux作業系統,64
協議:8位,這個字段定義了ip資料報的資料部分使用的協議型別。常用的協議及其十進位制數值包括icmp(1)、tcp(6)、udp(17)。
校驗和:16位,是ipv4資料報包頭的校驗和。
7,幀結構:
da | sa , type ,load , fcs
目標/源mac , 幀型別 ,幀封裝資料 , 幀校驗序列
各6bytes , 2bytes ,46-1500bytes , 4bytes
在tcp/ip的頭域部分,就能知道傳送的是乙個資料報文,還是乙個確認報文
資料報 資料幀
1,資料報 包 packet 是tcp ip協議通訊傳輸中的資料單位,一般也稱 資料報 有人說,區域網中傳輸的不是 幀 frame 嗎?沒錯,但是tcp ip協議是工作在osi模型第三層 網路層 第四層 傳輸層 上的,而幀是工作在第二層 資料鏈路層 上一層的內容由下一層的內容來傳輸,所以在區域網中,...
資料段 資料報 資料報 幀的區別與聯絡
首先不容易理解的是資料報和幀。資料報,就是從最上層,一層一層封裝,直到網路層的,最後藉由資料鏈路層傳送出去的資料單元。幀,是資料鏈路層的傳輸單元。這麼一看,資料報和幀好像沒什麼不一樣,好像資料傳遞的都是一樣的。可是為什麼會把它們區分開呢?學習 tcp ip 協議的同學應該都知道,資料鏈路層中有 mt...
資料段 資料報 資料報 幀的區別與聯絡
首先不容易理解的是資料報和幀。資料報,就是從最上層,一層一層封裝,直到網路層的,最後藉由資料鏈路層傳送出去的資料單元。幀,是資料鏈路層的傳輸單元。這麼一看,資料報和幀好像沒什麼不一樣,好像資料傳遞的都是一樣的。可是為什麼會把它們區分開呢?學習 tcp ip 協議的同學應該都知道,資料鏈路層中有 mt...