网络系列xx-TCP数据包格式

2019-11-22  本文已影响0人  xgangzai

前面了解数据链路层、网络层

从传输层了解一次接口请求,数据包的收发流程。三次握手、传输数据、四次挥手,TCP传输控制协议

利用到的工具tcpdump

Transmission Control Protocol相关概念

图(待完善)

network-request-reponse-packets.png 20

从理论到实际 对照起来

https://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html

TCP头部固定20个字节,即20*8=160个bit位

SYN包

SYN_PACKET.png

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.@........

关于进制,一位16进制最大可以表示15,需要4个bit位来表示,所以四位16进制需要16个bit位表示(2个字节)

对于有符号数字来讲,第一位表示符号位 0000...0000表示0,1000...0000则表示-0。两个数学意义表示一样的,所以规定1000...0000表示-(111...1111+1),对于一个字节btye来说,则表示-128~127。

0xfd43=62675

0x1f90=8080

一直以为0xa063表示6275,怎么算都算不出来,后面转算思路求8080的16进制,得到0x1f90。这下终于对上了,

序号32bit,所以两个4位16进制,即0xc45db5ef,其10进制为3294475759,刚好跟上面吻合。

确认序列号32bit, 这里没有所以是0x00000000

标志位16bit 0xb002,其10进制45058,二进制1011000000000010,后6bit表示标识位,SYN位上为1,表示是SYN包,吻合。前4bit表示头部长度1101,其10进制为13,说明头部长度是13个字节?

win 16bit, 0xffff ,其10进制65535,吻合

但是前面还有一堆表示什么?说明抓到的不只是传输层的数据,还有更底层的网络层、数据链路层,甚至物理层????一个一个来,先看网络层(ip头)的数据格式

IP头部数据格式https://blog.csdn.net/ythunder/article/details/65664309

image

0xa063其二进制1010 0110 0000 0011,从左到右,

版本占4bit,则1010,其10进制表示10?什么版本是10

按照IP头,则第7个和第8个4位16进制表示32位源地址IP,则0x08004500表示192.168.50.212?

0x08004500的10进制是134235392,二进制

还是看不出来,根据8位协议再看,ICMP为1,TCP为6,UDP为17

看第5个4位16进制串,0x758b,其二进制1110 1011 000 1011,后八位10进制是11,跟6也对不上。。。。

换个思路,看端口前面有多少个字节,有17*2=34个字节,这样也说明不了什么,再换个思路看看服务端返回的数据包,一下是3次握手的3个包

Hand-shake-packets.png

1-3和4-6这两组肯定代表两端的什么信息,96个bit位可以表示什么?IP?

http://www.lowxp.com/g/article/detail/300

再看IP头

[图片上传失败...(image-dcabe4-1574422526835)]

根据文章中说的0x4006的06表示TCP协议。也对不上啊,往前推,前面肯定还有更底层的头

0x4500中的45表示Version(前四位就是4,刚好是就IPV4),往前数刚好是第一个,这下感觉对上了,所以前面还有数据链路层头

https://blog.csdn.net/luguifang2011/article/details/40658723

image

终于找到一个全的了,表示MAC,位数刚好也对,果然!真不容易啊,有了这个,以后看数据包内容就没什么问题了

上一篇下一篇

猜你喜欢

热点阅读