1. 程式人生 > 實用技巧 >為什麼抓包工具所抓包最小是54位元組而不是60位元組

為什麼抓包工具所抓包最小是54位元組而不是60位元組

摘自:https://blog.csdn.net/shenwansangz/article/details/52858897 根據rfc894的說明,乙太網封裝IP資料包的最大長度是1500位元組,也就是說乙太網最大幀長應該是乙太網首部加上1500,再加上7位元組的前導同步碼和1位元組的幀開始定界符,具體就是:7位元組前導同步碼+1位元組幀開始定界符+6位元組的目的MAC+6位元組的源MAC+2位元組的幀型別+1500+4位元組的FCS。
按照上述,最大幀應該是1526位元組,但是實際上我們抓包得到的最大幀是1514位元組,為什麼不是1526位元組呢?
原因是當資料幀到達網絡卡時,在物理層上網絡卡要先去掉前導同步碼和幀開始定界符,然後對幀進行CRC檢驗,如果幀校驗和出錯,就丟棄此幀。如果校驗和正確,就判斷幀的目的硬體地址是否符合自己的接收條件(目的地址是自己的物理硬體地址、廣播地址、可接收的多播硬體地址等),如果符合,就將幀交給“裝置驅動程式”做進一步處理。這時我們抓包的軟體才能抓到資料,因此,抓包軟體抓到的是去掉前導同步碼、幀開始分界符、FCS之外的資料,其最大值是6+6+2+1500=1514。
乙太網規定,乙太網幀資料域部分最小為46位元組,也就是乙太網幀最小是6+6+2+46+4=64。除去4個位元組的FCS,因此,抓包時就是60位元組。當資料欄位的長度小於46位元組時,MAC子層就會在資料欄位的後面填充以滿足資料幀長不小於64位元組。由於填充資料是由MAC子層負責,也就是裝置驅動程式。不同的抓包程式和裝置驅動程式所處的優先層次可能不同,抓包程式的優先順序可能比裝置驅動程式更高,也就是說,我們的抓包程式可能在裝置驅動程式還沒有填充不到64位元組幀的時候,已經捕獲了資料。因此不同的抓包工具抓到的資料幀的大小可能不同。(比如,wireshark抓到的可能沒有填充資料段,而sniffer抓到的就有填充資料段),(不過根據我的觀察wireshark不同的版本抓獲的最小資料包的大小好像有60位元組也有54位元組的情況.....)

乙太網 為什麼取51.2微秒做爭用期

按照標準,10Mbps乙太網採用中繼器時,連線的最大長度是2500米,最多經過4箇中繼器,
因此規定對10Mbps乙太網一幀的最小發送時間為51.2微秒(這個51.2的計算方法應該是這樣的:
(51.2/1000000)*2/3c=10000米,不對勁吧?應該是2*2500=5000才符合實際。
按算式算的話,最短幀應該是250bit左右才是。我在另外一個帖子中看到,考慮到網路介質本身的延遲,為了確保CD能夠正常執行,
所以把結果放大了一倍,取了512bit,這個解釋還算合理,採納!)。這段時間所能傳輸的資料為512位,因此也稱該時間為512位時。
這個時間定義為乙太網時隙,或衝突時槽。512位=64位元組,這就是乙太網幀最小64位元組的原因。