天天看點

『TCP/IP詳解——卷一:協定』讀書筆記——12

2013-08-24 14:22:46

  • 4.5 ARP舉例

首先要介紹一些tcpdump這個強大的Linux指令,它不但可以分析封包的流向,連封包的内容也可以監聽,如果資料段沒有加過密我們就可以做一些很好玩的事情了。具體的使用方法請大家man tcpdump。

1  sudo tcpdump -i wlan0 -nn      

這個指令的使用要擁有root權限,上邊的指令可以監聽wlan0接口。

  • 4.5.1 一般的例子
1 telnet svr4 discard      

作者在ARP告訴緩存為空的前提下,使用了telnet指令與一個無效的伺服器連結,下圖為經過簡單修改後的tcpdump輸出(為了友善大家閱讀,把時間間隔等做了優化)

『TCP/IP詳解——卷一:協定』讀書筆記——12
第一行 源端主機(bsdi)的硬體位址是0:0:c0:6f:2d:40。目的端主機的硬體位址是ff:ff:ff:ff:ff:ff,這是一個以太網廣播位址。電纜上的每個以太網接口都要接受這個資料幀并對它進行處理。上半行有源主機和目的主機的硬體位址,arp是幀類型字段0x0806翻譯的結果,說明此資料幀是一個ARP請求或應答。arp後面的60表示以太網資料幀長度。由于ARP請求的資料幀長都是42位元組(28位元組的ARP資料,14位元組的以太網幀頭),是以,每一幀都必須加入填充字元以達到以太網的最小長度要求:60位元組。(回顧圖1-7下面給出來了)一般4位元組的以太網尾部不包含在60位元組之中。下半行arp who-has表示作為ARP請求的這個資料幀中,目的IP位址是svr4的位址,發送端的IP位址是bsdi的位址。tcpdump列印出主機名對應的預設IP位址。這句話很好翻譯——“誰是svr4就告訴bsdi”
第二行 我們經過0.0022s之後成功的收到了ARP應答。我們發現ARP應答的目的位址是bsdi,證明他比較機智,不用再廣播一次問“誰是發給我ARP請的人呀,把你實體位址告訴我呗”。下半句也很好了解——“svr4在0:0:c0:c2:9b:26”
第三行 這一行是第一個請求建立連結的TCP段。它的目的硬體位址是目的主機(svr4)。我們将在第18章讨論這個段的細節内容

在tcpdump指令輸出中,我們沒有看到svr4在發出第一段TCP封包(第4行)之前發出的ARP請求。這是因為可能在svr4的ARP高速緩沖中已經有bsdi的表項。一般情況下,當系統收到ARP請求或發送ARP應答時,都要把請求端的硬體位址和IP位址存入ARP高速緩存。

『TCP/IP詳解——卷一:協定』讀書筆記——12
  • 4.5.2 對不存在主機的ARP請求

我們用telnet指令連接配接一個主機不存在的IP位址140.252.13.36,用tcpdump抓包後顯示如下:

『TCP/IP詳解——卷一:協定』讀書筆記——12

令人感興趣的是看到多次進行ARP請求:第一次請求發生後5.5秒進行第2次請求,在24秒之後又進行第3次請求(在21章我們将看到TCP的逾時和重發算法的細節)。事實上,大多數的BSD實作把完成TCP連接配接請求的時間限制設定為75秒。我們沒有看到任何TCP封包段,因為隻有ARP應答傳回時,硬體位址到這時才可能知道,TCP封包才可以被發送。

  • 4.5.3 ARP高速緩存逾時設定

逾時設定的意思是,ARP高速緩存中的位址儲存時間(每次在通路表項時重設逾時值)。對于完整表項逾時值為20分鐘,不完整表項為3分鐘(上個例子中的不可連結的位址),一旦不完整表項被成功連接配接,則重新整理逾時值為20分鐘。我們可以通過ARP指令來設定這些逾時值。

轉載于:https://www.cnblogs.com/raphael-wang/p/3279292.html