tcpdump是很好的tcp分析工具,在此配合nc命令來學習tcpdump
第一步是啓動8000端口
第二步是啓動抓包程序
第三步是創建一次握手鍊接,ctrl+c是退出客戶端,能看到四次揮手
紅色區域是三次握手,藍色區域是一次數據發收,綠色區域是四次揮手(有一個ack包被合併了因此只有三行)
算法
tcpdump的參數解釋服務器
參數 | 解釋 |
---|---|
-n | 顯示ip |
-i | 抓取網卡lo |
tcp and host 127.0.0.1 and port 8000 | 過濾表達式 |
tcp的標示位在[]中,[S]表示SYN,[F.]表示FIN,而.表示ACK網絡
爲何服務端收到數據後有時要等40ms後纔會ack?
這是由於Delay ACK的緣由(Linux上默認是關閉delay ack)。delay ack的累積確認讓多個報文的ack合成一個ack返回。而捎帶確認就是如服務器有返回數據,那麼會帶上上一個ack。 tcp
Nagle
它是Delay ACK的另外一種相對的算法,它旨在減小網絡中的tcp報文數量,Nagle默認是開啓的。 工具
Nagle原理學習
若是同時開啓Delay ACK和Nagle將會致使每次數據請求都會延遲40ms,若是對實時性有很高要求,可同時關閉delay ack和nagle,它們都會致使ack包延遲發送spa