轉載自:http://blog.csdn.net/wang7dao/article/details/16805337
1、Wireshark的數據包詳情窗口,如果是用中括號[]括起來的,表示注釋,在數據包中不占字節
2、在二進制窗口中,如“DD 3D”,表示兩個字節,一個字節8位
3、TCP數據包中,seq表示這個包的序號,注意,這個序號不是按1遞增的,而是按tcp包內數據字節長度加上,如包內數據是21字節,而當前IP1發到IP2的包的seq是10的話,那下個IP1發到IP2的包的seq就是10+21=31
4、注意我們分析tcp包時,要以一個會話做為一個完整對象,即通訊只發生在兩個IP之間,兩個固定的端口之間,如果端口變化了,那鏈接就不是同一條了,不同的鏈接之間的seq是沒有關聯的
5、tcp包分為包頭的內容,tcp的包頭長度是32字節,整個數據包的包頭是66字節(不一定的),如果整個數據包是66字節的話,那內容長度就是0
6、每個tcp包都帶有win、ack,這些是告訴對方,我還可以接收數據的滑動窗口是多少,如果A發到B的包的win為0,就是A告訴B說我現在滑動窗口為0了,飽了,你不要再發給我了,就說明A端環境有壓力(如帶寬滿了等)
7、ack可以理解為應答。A發給B的ack是告訴B,我已收到你發的數據包,收到ack號這里了,你下次要發seq為ack號的給我
8、在網絡不堵即滑動窗口一點都不堵的情況下,第一個包的ack號就是第二個包的seq號,如果堵了,由于是滑動窗口緩存處理隊列,所以這個值會錯開
9、如果A發到B連續幾個包,seq號不變,ack號一直在變大,說明A一直在收B的數據,一直在給B應答
10、如果A發到B連續幾個包,seq號一直變大,ack號一直沒變,說明A一直在向B發數據,不用給B應答,而是在等B的應答
11、可以接收多個數據包后,一次性給一個應答,不用每個數據包一一對應給應答
12、發了一個包,很久沒有收到應答后,會重發包,在Wireshark抓包工具提示“[TCP Retransmission]”,在數據包詳情窗口點開可以看到是對哪個數據包的重傳
13、“[TCP Dup ACK ?#?]”應答包的重傳
14、如果出現這個錯誤“[TCP Previous segment not captured]”,說明亂序了,前一個包沒有收到,收到后面的包了,這時也會重傳包