您好,登錄后才能下訂單哦!
tcpdump知識
在深入tcpdump之前,先貼一張tcp header的格式圖,
https://github.com/KristyToKristy/tcpheader/blob/master/tcpheader.png
TCP Flags(tcp header的第十四個字節)
flags位于tcpheader的第十四個字節,包含8個比特位。這8個比特位都有特點的功能用途,分別是:CWR,ECE,URG,ACK,PSH,RST,SYN,FIN。
CWR,ECE:兩個flag用來配合congestion control的,一般情況下和應用層的關系不大。發送包ECE為0時表示出現了congestion,接收方回的包里CWR為1表明收到congestion信息并做了處理。
URG 代表Urgent,表明包的優先級高,需要優先傳送對方并處理。像我們平時使用terminal的時候經常ctrl+c來結束某個任務,這種命令產生的網絡數據包就需要urgent。
ACK 也就是我們所熟悉的ack包,用來告訴對方上一個數據包已經成功收到。不過一般不會為了ack單獨發送一個包,都是在下一個要發送的packet里設置ack位,這屬于tcp的優化機制
PSH Push我們上面解釋過,接收方接收到P位的flag包需要馬上將包交給應用層處理,一般我們在http request的最后一個包里都能看到P位被設置
RST Reset位,表明packet的發送方馬上就要斷開當前連接了。在http請求結束的時候一般可以看到一個數據包設置了RST位
SYN SYN位在發送建立連接請求的時候會設置,我們所熟悉的tcp三次握手就是syn和ack位的配合:syn->syn+ack->ack。
SYN SYN位在發送建立連接請求的時候會設置,我們所熟悉的tcp三次握手就是syn和ack位的配合:syn->syn+ack->ack。
這8個flag首字母分別是:C E U A P R S F。初看難以記憶,我腦洞了下,把它們組合成 supr cafe,當然少了super少了個e,我可以將就下。我們在使用tcpdump的時候會經常看到這幾個flag,[S],[P],[R],[F],[.]。其他幾個都好理解,[.]特殊點,是個占位符,沒有其他flag被設置的時候就顯示這個占位符,一般表示ack。
用tcpdump分析http完整請求
知乎APP點贊之后發送的一個http請求tcpdump命令是:
sudo tcpdump -i rvi0 -AAl src 60.28.215.123 or dst 60.28.215.123
圖中列出了前面的packet。
10.29.44.240是android的ip地址60.28.215.123是知乎server的ip地址紅色方框內是android發出的packet,白色方框內是server發出的packet。packet1是android三次握手的第一個syn包,packet2是server ack+syn的包,packet3是android ack的包。這3個packet之后tcp的三次握手就完成了。packet4是android發出的http request。長度只有240個字節,所以一個packet就發過去了,當然還設置了flags的P位,request需要馬上被應用層處理。包里面出現了spdy,點贊。packet5是server ack剛收到的包,長度位0,所以這僅僅是一個ack包。
packet6是server返回http的response了,1388個字節。packet5和packet6都ack了seq為241的包,當然是為了增加ack的成功率。
最后兩個packet,android發送FIN+ACK的包就斷開連接了,server直接發送RST包后也斷開連接了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。