首選介紹一下tcpdump的常用參數 tcpdump采用命令行方式,它的命令格式為: tcpdump [ -adeflnNOpqStvx ] [ -c 數量 ] [ -F 文件名 ] [ -i 網絡接口 ] [ -r 文件名] [ -s snaplen ] [ -T 類型 ] [ -w 文件名 ] [表達式 ] 1. tcpdump的選項介紹 -a 將網絡地址和廣播地址轉變成名字; -d 將匹配信息包的代碼以人們能夠理解的匯編格式給出; -dd 將匹配信息包的代碼以c語言程序段的格式給出; -ddd 將匹配信息包的代碼以十進制的形式給出; -e 在輸出行打印出數據鏈路層的頭部信息; -f 將外部的Internet地址以數字的形式打印出來; -l 使標准輸出變為緩沖行形式; -n 不把網絡地址轉換成名字; -t 在輸出的每一行不打印時間戳; -v 輸出一個稍微詳細的信息,例如在ip包中可以包括ttl和服務類型的信息; -vv 輸出詳細的報文信息; -c 在收到指定的包的數目后,tcpdump就會停止; -F 從指定的文件中讀取表達式,忽略其它的表達式; -i 指定監聽的網絡接口; -r 從指定的文件中讀取包(這些包一般通過-w選項產生); -w 直接將包寫入文件中,並不分析和打印出來; -T 將監聽到的包直接解釋為指定的類型的報文,常見的類型有rpc(遠程過程 調用)和snmp(簡單網絡管理協議;) 當網絡出現故障時,由於直接用tcpdump抓包分析有點困難,而且當網絡中數據比較多時更不容易分析,使用tcpdump的-w參數+ethereal分析會很好的解決這個問題,具體參數如下: tcpdump -i eth1 -c 2000 -w eth1.cap -i eth1 只抓eth1口的數據 -c 2000代表數據包的個數,也就是只抓2000個數據包 -w eth1.cap 保存成cap文件,方便用ethereal分析 抓完數據包后ftp到你的FTP服務器,put一下,然后用ethereal軟件打開就可以很直觀的分析了 注:有時將.cap文件上傳到FTP服務器后,發現用ethreal打開時提示數據包大於65535個,這是你在ftp上傳或者下載的時候沒有用bin的模式上傳的原因。 另:有的網站提示在tcpdump中用-s 0命令,例如 tcpdump -i eth1 -c 2000 -s0 -w eth1.cap,可實際運行該命令時系統卻提示無效的參數,去掉-s 0參數即可 例子: [root@localhost cdr]#tcpdump -i eth0 -t tcp -s 60000 -w diaoxian.cap [root@localhost cdr]# tcpdump host 58.240.72.195 -s 60000 -w x.cap
wireshark異常數據,wireshark異常數據
[TCP Spurious Retransmission]
- TCP虛假重傳
發送端認為發送的package已經丟失了,所以重傳了,盡管此時接收端已經發送了對這些包的確認。
指實際上並沒有超時,但看起來超時了,導致虛假超時重傳的原因有很多種:
(1)對於部分移動網絡,當網絡發生切換時會導致網絡延時突增
(2)當網絡的可用帶寬突然變小時,網絡rtt會出現突增的情況,這會導致虛假超時重傳
(3)網絡丟包(原始和重傳的包都有可能丟包)會導致虛假重傳超時。
[Reassembly error, protocol TCP: New fragment overlaps old data (retransmission?)]
-重新組裝錯誤,協議TCP:新片段與舊數據重疊(重新傳輸?)
[TCP Retransmission]
- 超時引發的數據重傳。
我的另一篇文章《tcp retransmission原因解析》
[TCP Dup ACK xxx#y]
- 重復應答seq=xxx的表示報文到哪個序號丟失,y表示第幾次丟失。
當package發生亂序或者丟失時,接收端會收到一些seq比期望值更大的package。
每收到一次這種package就ack一次期望值,用以提醒發送方。
[TCP Out-Of-Order]
- 次序顛倒
出現這個信息的原因就是因為數據在傳輸過程中順序亂了,也就是后一個package的seq會小於前一個package的seq+len。
[TCP Fast Retransmission]
- 快速重傳
當發送發接收到3個或以上的[TCP Dup ACK],就意識到之前發的包可能丟了,於是快速重傳package。
[TCP Previous segment not captured]
- 未捕獲TCP先前的段,意思就是出現報文的丟失,報文沒有捕捉到。
tcp連接建立后,針對同一台主機的發包情況進行敘述。正常情況下,后一個package的seq等於前一個package的seq+len。而在實際傳輸過程中經常會產生數據丟失的問題,這種情況下,后一個Package的seq會大於前一個package的seq+len,實際的網絡包的顯示效果就是”TCP Previous segment not captured”。
重點:later package’s seq > previous package’s seq + data len
[TCP segment of a reassembled PDU]
在用Wireshark抓包的時候,經常會看到TCP segment of a reassembled PDU,字面意思是要重組的協議數據單元(PDU:Protocol Data Unit)的TCP段。比如由多個數據包組成的HTTP協議的應答包,如下
這里的分段是指:上層協議HTTP的應答由多個分段組成,每個分段都是TCP協議的。TCP本身沒有分段的概念,它的sequence number和acknowledge number 是使TCP是基於流的協議的支撐,TCP segment of a reassembled PDU的出現是因為Wireshark分析了其上層的HTTP協議而給出的摘要,如果配置Wireshark不支持HTTP協議解析
那么,同樣的數據包就會變成下面的樣子
每個TCP數據包都是這條流中的自身完整的一部分,TCP segment應該表述為分段是TCP協議,而不應該是TCP分段。
https://www.cnblogs.com/yinghao1991/p/7532889.html
[TCP Keep-Alive]
- 保持連接特性 socket 發起方發包
[TCP Keep-Alive ACK]
- 保持連接特性 socket 應答方發包