我一直以為ip資料報,到物理層傳送這之間不再有什麼操作性了。因為在平常的交流中談協議,談到ip這一層基本就止住了,彷彿ip打包後就可以直接傳送了是的。然而當我讀了《tcp/ip詳解卷一:協議》後,我才發現其中並沒有那麼簡單。也許是因為接近真實世界的原因,不同的網路連線方式最終封裝的ip都不太一樣。
乙太網和ieee 802是最常見的兩種協議,它們的資料報如下:
目的位址和原位址指的就是實體地址(mac位址),它們是通過arp協議獲取的(下文會介紹)。
我們將目光放到封裝的資料部分,可以看到封裝的三種報文(ip、arp、rarp)型別是一致的,但是後面的資料長度範圍並不一致。ieee802的最小值是36位元組(pad 代表填充位元組的意思),而乙太網的是46。
在觀察除了資料以外的部分,會發現他們源位址、目的位址都在開頭並佔據相同長度,尾部都是4位元組的crc(檢驗碼),不一樣的是ieee802比乙太網多占用了8個位元組(長度+幾個不明就裡的固定字段)。
在我看來乙太網應該是ieee 802的公升級版(因為減少了一些不需要的固定位元組的占用),然而乙太網出現的時間比ieee 802提前,也就是說ieee 802才是公升級版。更神奇的是rfc標準規定,乙太網必須支援而ieee選擇支援。然而我查詢了半天資料沒有發現兩個同時存在的原因,因此我能想到的ieee 802存在的原因是歷史商業競爭的產物了。
arp(address resolution protocol)為協議位址(通常是ip,也就是說可以用在非ip協議上)到硬體位址之間提供一種對映。主要不是用於訊息通訊,而是為了訊息通訊而查出硬體位址。
用於乙太網的arp請求或應答報文如下:
硬體型別和協議型別決定最後4個字段(源硬體位址、源協議位址、目的硬體位址、目的協議位址)的長度和內容
解析過程:
arp傳送請求到廣播位址(實體地址每個bit都為1,ff:ff:ff:ff:ff:ff)
與arp請求的目標ip位址對應的主機,填充上位址段
根據請求端的位址直接將響應報文傳送回請求主機
主機在接收到請求或響應arp報文時,會將位址快取下來。完整的表項(能夠正常響應的)一般為20分鐘,不完整的表項(未被正常響應的)一般為3分鐘。可以通過指令arp
進行檢視。
slip(serial line ip)是一種對ip資料報進行封裝的簡單形式,適用於rs-232串列埠和高速數據機接入internet。rs-232常見於液晶顯示屏與電腦的鏈結。
rs-232資料線:
slip資料報:
從資料報可以看出slip協議是一種很簡單的協議,除了頭尾字段用於區分資料報,然後將資料報中會影響判斷的(標誌位元組:0xc0,轉義位元組:0xdb)進行轉義就完成了封裝可以進行傳送了。
優點:
簡單、位元組少。
我想這也是它會被用在顯示器上(rs-232)和接入internet等對時延要求高、傳輸量大的場合。
缺點:
根據ip知道對端機器(原話是「每端必須知道對方ip」)。該協議沒有使用arp進行廣播,確定傳送機器,所以必須的通過ip層的目的ip位址知道對應的機器。
資料幀沒有型別字段,只能傳送一種型別的報文。(原話是「如果一條序列線路用於slip,那麼它不能同時使用其他協議。」)
沒有校驗和,受雜訊影響,傳輸出錯只能在上層校驗。
我想也就是因為這些不穩定性,所以主要是在有線傳輸中見到它的身影。
cslip(compressed slip)是slip的更進一步,它將slip傳輸的tcp資料報頭進行壓縮,減少傳輸量。但並不影響udp包頭。
ppp(point to point protocol)協議修改了slip協議中的所有缺點。ppp就是被設計來用於取代slip的。其資料報如下:
可以看到crc加入了協議欄位和crc欄位(校驗和)字段,因此可以解決只能夠傳輸一種型別報文,以及沒有校驗和易受雜訊干擾的問題。至於ppp的ip協商機制,有興趣的可以自己查查資料。
ppp與slip一樣有頭尾標誌位元組,這就說明ppp也需要將資料報中的標誌位元組和轉義位元組進行轉移。與slip不一樣的是,標誌位(0x7e)、轉義位元組(0x7d)。
除了這兩個位元組外ppp還需要對小於0x20的位元組進行轉移,因為0x20的位元組在ascii碼中有控制含義,怕影響底層驅動程式。
因此ppp具有轉移規則,規則是在0x7d接下去的第1個byte的第6個bit取補碼(即將byte取補碼後,將這個byte的第6位,用補碼的第6位取代)。
複製**
IP資料報格式
版本字段長度為4,用來表明建立資料報的ip版本,目前的ip版本是ipv4,ipv6正在發展中。ipv4的字段為0100 首部長度 報頭長度 指的是首部佔32 bit字的數目,包括任何選項。由於它是乙個4位元字段,因此首部最長為60個位元組。15x32 8 60位元組.ip首部始終是32 bit的整數...
解析IP資料報
include stdafx.h include winsock2.h include ws2tcpip.h include iostream.h include stdio.h typedef struct ip header byte servicetype 服務型別 word totallen...
IP資料報格式
ip資料報格式 tcp ip協議定義了乙個在網際網路上傳輸的包,稱為ip資料報 ip datagram 這是乙個與硬體無關的虛擬包,由首部和資料兩部分組成.首部的前一部分是固定長度,共 20 位元組,是所有ip資料報必須具有的.在首部的固定部分的後面是一些可選字段,其長度是可變的.版本 佔4位,指i...