(1) 幾個概念介紹
1 seq:數據段的序號,計算方法或者增長方式:seq2=seq1+len1(len僅僅是數據段的長度,不包括TCP頭)(同一個發送方的tcp報文序號的計算方法)
2 ACK:確認號的計算方法,接收方的ACK號與發送方的SEQ和LEN之間的關系:
甲:發送“seq:x,len:y”給乙;
乙:回復的確認號,x+y,表示它收到了x+y之前的所有字節;
小結:
綜合上面SEQ和ACK的計算,可以發現:
(1)理論上,接收方回復的Ack恰好就等於發送方的下一個seq號;
(2)TCP的確認是可以累積的;
(3)這幾個參數的意義:
包亂序時,接收方只要根據Seq號從小到大重新排好就行了,保證了TCP的有序性;
有包丟失時,接收方判斷丟了哪些包的方法:通過前一個Seq+Len的值與下一個Seq的差,保證了TCP的可靠性;
3 TCP頭附帶的幾個標識位:SYN、FIN、RST
4 TCP窗口
(1)存在意義
現實中存在一些限制,如接收方的緩存(接收窗口)可能一下子接受不了這么多數據,而網絡的帶寬也不一定足夠大,一口氣發太多會導致丟包事故,TCP的發送窗口就是發送方一口氣可以發送的數據量。
(2)發送窗口對性能的影響以及發送窗口與擁塞的關系:
(3)如何在包中看出發送窗口的大小
(4)“接收方處理數據的速度”與“接收數據的速度”之間的關系對“接收窗口”的影響:
(5)TCP頭中的window size、calculated window size、window size scaling factor這三個參數的含義
(6)關於擁塞窗口的維護
“慢啟動”、“擁塞避免”、“臨界窗口值”的概念
(7)超時重傳
超時重傳對性能的影響:
(8)TCP DUP ACK與快速重傳
Tcp Dup Ack xxx#y 代表了數據段丟失的TCP狀態,xxx代表數據丟失的位置,#后代表第幾次丟失文;
快速重傳的概念
Tcp Dup Ack規定湊滿3個時,啟動快速重傳的原因分析:(目的:避免由於亂序而導致的快速重傳)
(9)快速重傳與超時重傳的區別
快速重傳是對超時重傳的優化,當觸發3個及以上dup ack包時,會觸發重傳;但是如果丟了報,且沒有觸發快速重傳,就只能等待超時重傳了。
下面是丟包對大文件和小文件影響的區別,原因就在於上面一段的描述:
(10)Previous Segment not capured
說明亂序了,前一個包沒有收到,收到后面的包了。
(2) wireshark分析實例
下面抓包來自於手機利用FTP下載文件速率小的案例。
1 TCP重復確認的案例
tcp重復確認:表示該ACK包發生了丟失,導致發送方對包進行了重傳,網關測抓包,發現,最嚴重的一個丟包是,一個包重傳了37次:(同一個包的dup ack的時間間隔約10ms,可以以725這個包為例分析,該包重傳了37次);
2 “連續多個包丟失”的場景
“SACK方案”
同樣對網關測抓包TCP頭中的sack信息進行分析:
一個dup ack包,725#3,是725號包的第三次重傳ack,內容如下:
分析:
SACK=32121~33581和35041~37961,而ACK=29201,這樣,FTP server就會知道:
32121~33581和35041~37961都已經收到了,而前面的29201~32120之間的2920個字節沒有收到;
故: