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