2.tcp/ip協議分析-IP協議、ARP協議和RARP協議


IP協議是TCP/IP協議族中最核心的協議,它提供不可靠、無連接的數據報傳輸服務。所以理解IP協議對於我們學習網絡至關重要。

IP首部



重要字段介紹

4bit首部長度:以4字節爲單位,決定了IP首部長度最大爲15*4=60,一般的IP數據報首部長度爲20,此時該字段爲5.

8bit的服務類型:包括一個3bit的優先權子字段(可以忽略),4bit的tos子字段和1bit的未用位但必須置0.4bit的TOS分別代表:最小延時、最大吞吐量、最高可靠性和最小費用。
比如在telnet交互應用中就要求有較小的傳輸時延,在FTP中要求有最大的吞吐量。這些可以通過設置socke選項來設置該字段。
16bit的總長度:最大爲65535字節,包含首部和數據長度。
16bit的標識:唯一得標識主機發送的每一份數據報。需要注意的是分片後的各組數據報其標識是相同的。
3位標誌:只有兩位有意義,最低位爲MF,MF=1表示後面還有分片;中間一位DF,DF=1,不允許分片。
13位片偏移:數據報分片後個數據段的偏移量,以8字節爲單位。
TTL生存時間:設置數據報可以經過的最多路由器數,俗稱跳數。它指定了數據報的生存時間。通常爲32或者64.若把TTL的初始值設置爲1,就表示這個數據報只能在本局域網中傳送。
8bit協議:標記數據報的上層協議。
選項:後面的篇幅介紹

IP路由選擇

IP地址

查找主機的ip地址可以使用ifconfig -a(windows上爲ipconfig) 命令來看,比如我本機的Ip地址可以這樣查看:



這裏我們可以看到連個網絡接口etho和lo,可以看到etho接口的Ip地址爲192.168.152.130 內網地址,掩碼爲255.255.255.0
物理地址爲00:0c:29:e3:72:92,最大MTU=1500,接口支持廣播和多播。
下面的lo爲環回接口 其MTU=16436

一些特殊的IP地址



路由表表項

1.目的IP地址。它既可以是一個完整的主機地址,也可以是一個網絡地址,由該表目中的標誌字段制定。
2.下一站路由器的IP地址,或者有直接連接的網絡IP地址。
3.標誌。其中一個標誌指明目的地址是網絡地址還是主機地址。另一個標誌指明下一站路由器是否爲真正的下一站路由器,還是一個直接相連的接口。
4.爲數據報的傳輸指定的一個網絡接口。


這是我本機上的路由表項,對於一個給定的路由器,可以打印出五種不同的標誌:
U   該路由可以使用
G 該路由是到一個網關,如果沒有該標誌,說明目的地址是直接相連的。
H 該路由是到一個主機,也就是說目的地址是一個完整的主機地址。如果沒有設置標誌,說明該路由是到一個網絡,而目的地址時一個網絡地址。
該路由是由重定向報文創建的。
M 該路由是已被重定向報文修改的。

IP路由選擇過程

1.搜索路由表,尋找能與目的地址的iP地址完全匹配的表目。如果找到,則把報文發送給該表目指定的下一站路由器或者直接相連的網絡接口。
2.搜索路由器,尋找能與目的網絡號相匹配的表目。如果找到,則把報文發送給該表目指定的下一站路由器或者直接連接的網絡接口。
3.搜索路由器,尋找標爲默認的表目。如果找到,則把報文發送該表目指定的下一站路由器。
4.如果上面的都沒成功,則數據報不能被髮送。

ARP協議

協議格式


工作原理

當一臺主機要把以太網數據幀發送到位於同一個局域網的另一臺主機時,是根據48bit的以太網物理地址來確定目的接口的。設備驅動程序從來不檢查IP數據報中的目的IP地址,IP地址是協議分層設計中虛擬出來的用來進行路由選擇的,而真正用於通信的地址是物理網卡的地址即MAC地址。當主機發送數據確定了目的IP地址後,就需要知道目的地址的
物理地址,因爲根據鏈路層的以太網幀格式,我們發現其封裝了目的MAC地址。ARP協議正是爲IP地址到對應的硬件地址之間提供動態的映射,它工作在以太網。當它想要給知道網絡中某一IP地址(可以是路由器或者主機) 對應的物理地址,就發送廣播消息,消息內容大致就是:“喂,我是192.168.152.xxx,物理地址是xxxxx,我想要知道192.168.152.yyy的物理地址”。以太網中的主機收到該消息就將消息中的ip地址和自己進行比較,如果是自己,就發送響應告訴發送主機自己的mac地址。這樣發送主機就能向其發送ip數據了。

arp緩存

其實並非每次發送數據前都要發送arp廣播消息,這主要是由於每個主機都有一個arp高速緩存。這個高速緩存存放了最近ip地址到硬件地址之間的映射地址。因此可以通過該緩存讀取到對端的物理地址。但高速緩存中每一項有一定的生存時間,一般爲20分鐘。

可以通過arp -a 命令來查看最近的arp表目。

下面看一個例子
首先在本機(192.168.152.130 mac addr:00:0c:29:e3:72:92)上運行tcpdump -e 命令來捕獲arp消息,在另一臺主機(ip:192.168.152.128 mac addr: 00:0c:29:7c:cf:fc)上運行telnet命令。得到的arp消息如下:



首先消息中0x0806代表該消息爲arp請求或者應答。length 60 是指以太網數據幀的長度,由於arp請求或者應答的數據幀長都是42字節(28字節的arp數據,14字節的以太網幀頭)因此必須加入填充字符以達到以太網的最小長度要求:60字節(有些書籍說是64,它包含了以太網的幀尾)。後面的46代表arp請求數據大小。在請求中可以看到ubuntu-2.local發送了該arp請求。

在響應消息中本機對其進行了回覆告訴它自己的硬件地址。響應數據長度爲28.

接着打印出本機的arp緩存條目,發現增加了第二條表目,這說明了在其他主機請求本主機的硬件地址時,同時也將對端的硬件地址添加到映射表來,這樣以後和其通信就不需要進行arp請求了,如下圖:




RARP協議

RARP協議和ARP協議的目的相反,它的作用是隻知道自己硬件地址的主機能夠通過RARP協議找到其IP地址。RARP的分組格式與ARP分租基本一致。主要是其幀類型代碼爲0x8035。這個協議在過去比較重要,用於無盤引導系統時獲取主機的IP地址。現在的DHCP協議已經包含了RARP的功能。在這裏就不多做介紹了。

完。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章