回覆列表
-
1 # 黃河邊
-
2 # 味冷
按照網路分層的思想,ip層不會改udp層的報文,怎麼會出現把udp頭部替換成新的源ip的現象呢?
百度了一下:考慮到偽頭部這樣的結構,可以很清楚地看到,當一個UDP/IPv4資料報穿過一個NAT時,不僅IP層頭部的校驗和要被修改,而且UDP偽頭部的校驗和也必須被正確地修改,因為IP層的地址和/或UDP層的埠號可能會改變。因此NAT通常因同時修改分組中協議的多層而違反分層規則。當然,考慮到偽頭部本身就是違反分層規則的, NAT沒有選擇。
因此udp和ip並不是完全分層的。nat確實會同時修改ip和udp校驗和。
雖然違反了網路分層的原則,但是帶來了跨層的校驗,可以防止ip和port出現錯誤,提高了安全性,因此被接受。
也有些廠商的應用直接放棄了udp校驗,在應用層搞校驗。
我感覺你應該看看socet的程式碼, Socket的接收資料的時候,需要帶一個虛擬的IP頭,包括IP地址,其目的也是做校驗。這個IP訪問,包括udp和TCP都有可能中間有可能是經過了nat轉換的,會遇到同樣的問題。