現象:
生產環境中有兩臺服務器A、B,A服務器實時有報文發往B服務器,為了在測驗環境測驗新功能,故在現網A服務器上tcpdump抓取發往B服務器的報文,然后在測驗環境tcprewrite重寫目標IP和埠進行重放,在測驗環境中報文在A1服務器上進行tcpreplay重放發往B1服務器,此時在B1服務器的對應埠能抓取到對應的報文,但是B1服務器上的應用程式始終收不到包,
分析:
查看了網上的檔案,大多說的是因為iptables將報文拒絕導致,但是我的測驗環境并沒有開啟iptables,后發現有文章提到可能是報文校驗和錯誤引起,故進行嘗試,
將生產環境抓下來的原始報文用wireshark打開,并打開報文校驗和的顯示項,具體參考:https://blog.csdn.net/qq_31664899/article/details/89946151
果然發現udp報文校驗和有錯誤,原因是我們抓下來的包還未進行校驗和計算,只有當包在網卡上真實發送的時候由網卡計算,可參考:https://www.cnblogs.com/charlieroro/p/11363336.html
解決:
在生產環境目標端服務器B上進行抓包,然后再將報文拿到測驗環境進行重寫并重放就可以解決,或者還用是之前在A上抓的包,只不過在tcprewrie時加上引數--fixcsum,重新計算校驗和,然后再重放也可以解決,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/398566.html
標籤:Linux
