前面了解數(shù)據(jù)鏈路層竿奏、網(wǎng)絡(luò)層
從傳輸層了解一次接口請(qǐng)求糊秆,數(shù)據(jù)包的收發(fā)流程。三次握手议双、傳輸數(shù)據(jù)、四次揮手捉片,TCP傳輸控制協(xié)議
利用到的工具tcpdump
Transmission Control Protocol相關(guān)概念
-
TCP數(shù)據(jù)包標(biāo)志位
SYN -建立連接請(qǐng)求
ACK-確認(rèn)
PSH-發(fā)送數(shù)據(jù)
FIN-斷開連接
RST-連接復(fù)位平痰??強(qiáng)制斷開
-
ISN
Initial Sequence Number
-
MSS
Maximum Segment Size
-
WIN
Window size
TTL伍纫?怎么定義的
超時(shí)重傳 超時(shí)時(shí)間是怎么定義的宗雇?
圖(待完善)
從理論到實(shí)際 對(duì)照起來(lái)
https://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html
TCP頭部固定20個(gè)字節(jié),即20*8=160個(gè)bit位
SYN包
15:46:20.725877 IP 192.168.50.212.62675 > 47.110.254.134.8080: Flags [S], seq 3294475759, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 695058240 ecr 0,sackOK,eol], length 0
0x0000: a063 913d 87f3 4c32 758b 136b 0800 4500 .c.=..L2u..k..E.
0x0010: 0040 0000 4000 4006 1947 c0a8 32d4 2f6e .@..@.@..G..2./n
0x0020: fe86 f4d3 1f90 c45d b5ef 0000 0000 b002 .......]........
0x0030: ffff 9e2b 0000 0204 05b4 0103 0306 0101 ...+............
0x0040: 080a 296d bf40 0000 0000 0402 0000 ..)m.@........
關(guān)于進(jìn)制莹规,一位16進(jìn)制最大可以表示15赔蒲,需要4個(gè)bit位來(lái)表示,所以四位16進(jìn)制需要16個(gè)bit位表示(2個(gè)字節(jié))
對(duì)于有符號(hào)數(shù)字來(lái)講,第一位表示符號(hào)位 0000...0000表示0,1000...0000則表示-0舞虱。兩個(gè)數(shù)學(xué)意義表示一樣的欢际,所以規(guī)定1000...0000表示-(111...1111+1),對(duì)于一個(gè)字節(jié)btye來(lái)說(shuō),則表示-128~127矾兜。
0xfd43=62675
0x1f90=8080
一直以為0xa063表示6275损趋,怎么算都算不出來(lái),后面轉(zhuǎn)算思路求8080的16進(jìn)制椅寺,得到0x1f90浑槽。這下終于對(duì)上了,
序號(hào)32bit返帕,所以兩個(gè)4位16進(jìn)制,即0xc45db5ef,其10進(jìn)制為3294475759桐玻,剛好跟上面吻合。
確認(rèn)序列號(hào)32bit, 這里沒(méi)有所以是0x00000000
標(biāo)志位16bit 0xb002荆萤,其10進(jìn)制45058,二進(jìn)制1011000000000010,后6bit表示標(biāo)識(shí)位镊靴,SYN位上為1,表示是SYN包观腊,吻合邑闲。前4bit表示頭部長(zhǎng)度1101,其10進(jìn)制為13梧油,說(shuō)明頭部長(zhǎng)度是13個(gè)字節(jié)苫耸?
win 16bit, 0xffff ,其10進(jìn)制65535,吻合
但是前面還有一堆表示什么儡陨?說(shuō)明抓到的不只是傳輸層的數(shù)據(jù)褪子,還有更底層的網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層骗村,甚至物理層嫌褪??胚股?笼痛?一個(gè)一個(gè)來(lái),先看網(wǎng)絡(luò)層(ip頭)的數(shù)據(jù)格式
IP頭部數(shù)據(jù)格式https://blog.csdn.net/ythunder/article/details/65664309
0xa063其二進(jìn)制1010 0110 0000 0011,從左到右琅拌,
版本占4bit缨伊,則1010,其10進(jìn)制表示10进宝?什么版本是10
按照IP頭刻坊,則第7個(gè)和第8個(gè)4位16進(jìn)制表示32位源地址IP,則0x08004500表示192.168.50.212党晋?
0x08004500的10進(jìn)制是134235392,二進(jìn)制
還是看不出來(lái)谭胚,根據(jù)8位協(xié)議再看徐块,ICMP為1,TCP為6灾而,UDP為17
看第5個(gè)4位16進(jìn)制串胡控,0x758b,其二進(jìn)制1110 1011 000 1011,后八位10進(jìn)制是11绰疤,跟6也對(duì)不上铜犬。。轻庆。癣猾。
換個(gè)思路,看端口前面有多少個(gè)字節(jié)余爆,有17*2=34個(gè)字節(jié)纷宇,這樣也說(shuō)明不了什么,再換個(gè)思路看看服務(wù)端返回的數(shù)據(jù)包蛾方,一下是3次握手的3個(gè)包
1-3和4-6這兩組肯定代表兩端的什么信息像捶,96個(gè)bit位可以表示什么?IP?
http://www.lowxp.com/g/article/detail/300
再看IP頭
[圖片上傳失敗...(image-dcabe4-1574422526835)]
根據(jù)文章中說(shuō)的0x4006的06表示TCP協(xié)議桩砰。也對(duì)不上啊拓春,往前推,前面肯定還有更底層的頭
0x4500中的45表示Version(前四位就是4亚隅,剛好是就IPV4),往前數(shù)剛好是第一個(gè)硼莽,這下感覺(jué)對(duì)上了,所以前面還有數(shù)據(jù)鏈路層頭
https://blog.csdn.net/luguifang2011/article/details/40658723
終于找到一個(gè)全的了煮纵,表示MAC懂鸵,位數(shù)剛好也對(duì),果然!真不容易啊行疏,有了這個(gè)匆光,以后看數(shù)據(jù)包內(nèi)容就沒(méi)什么問(wèn)題了