当前位置:文档之家› TCP协议实例分析

TCP协议实例分析

实验场景:自己电脑开启apache服务器,主页有一个文件上传的表单,用舍友的电脑访问并上传一个小文件,抓包到TCP连接以及上传文件时的数据包进行分析,文件位置:上传文件分析.pcapng,用显示过滤器:tcp&&ip.addr==10.108.203.52,一次对显示的报文进行分析首先分析TCP建立连接的三次握手:

1、TCP连接第一次握手

summary:

99 4.725696000 10.108.203.52 10.108.203.50 TCP 66 6533 →http [SYN] Seq=0 Win=65535 Len=0 MSS=1460 WS=256 SACK_PERM=1

首先分析一下IP报文:

在2E~2F位置是标志和片偏移共2B,0x4000即:0100 0000 0000 0000片偏移全为0,而低2位的为bit1表示这个IP数据包不要分片。

在2G位置是TTL:这里0x40即:64,在2H是协议字段这里是0x06:表示后面的是TCP 报文

正式分析TCP报文:

0x1985即:6533,表示对方浏览器用TCP6553端口访问我的服务器

80,表示我的apache服务器是在用TCP8端口

2793897253

分开来说,即:1000 0000 0000 0010

前4bit表示数据偏移,也就是首部的长度,这里是8*4=32B,正好是3C~5B(最后)的字节数。

往后6bit做保留置空

后面6bit分别来说:

第一个,URG:表示紧急激活后面的紧急指针字段,这里为0

第二个,ACK:激活确认号字段,因为是第一次请求所以ACK置空为0

第三个,PSH:推送,让收到这个TCP报文的TCP处理模块加快上传到应用程序中,这里为0,一般都不用

第四个,RST:复位,表示连接出现差错需要重新连接,也用来拒绝非法报文段或拒绝打开

第五个,SYN:同步,在连接时用来同步序号,这里为1再加上ACK为0表示这是一个TCP连接请求报文

第六个,FIN:终止,用来释放一个连接,表示发送方的数据已经发送完毕,

窗口:表示自己能接受的TCP控制窗口,这里0xff ff即:65535B,表示自己能接受的发送窗口值为65535B,自己的缓存够用

0,暂且认为表示的是紧急数据的字节数,紧急数据属于TCP数据字段其后就是普通的数据

其中:

0x02:类型,这里表示这个是MSS size设置的选项

0x04:长度,这里表示这个可选项的长度是4字节

0x05 b4:MSS Value,这里表示MSS Value的值是1460,即这个链接传送的TCP数据字段最大字节数是1460个字节,由此来看分配的很紧凑,1460+20(TCP头)+20(IP头)=1500B(MAC 帧长度限制)

不知道什么意思

:不明白什么意思,但是有下面的信息:

0x03:Kind: Window Scale (3)

0x03:Length: 3

0x08:Shift count: 8

不知道什么意思

不知道什么意思

其中:

0x04:Kind: SACK Permission (4)

0x02:Length: 2

2、TCP连接第二次握手

Summary:

102 4.726743000 10.108.203.50 10.108.203.52 TCP 66 http →6533 [SYN, ACK] Seq=0 Ack=1 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1

直接分析TCP报文:

0x00 50,即:80,源端口,是字节apache服务器的端口

服务器选的序号:3343311029

2793897254,是上面的值加1

0x1000 0000 0001 0010

前4bit位是数据偏移即TCP报文首部数据长度,这里表示32B

之后6bit保留置空为0

后面的6bit分开来说:

第一个:URG,用于激活下面的紧急指针字段,这里没有激活

第二个:ACK,表示是确认的报文,激活确认号字段,这里激活

第三个:PSH:置空为0

第四个:RST,复位,置空为0

第五个:SYN,同步SYN,这里为1结合ACK,表示这是一个对同步求组确认的报文

FIN,这里为0

窗口大小:这里表示对方可用的发送端口是8192B,可见服务器这边的窗口和客户端的窗口值不一样啊

紧急指针:置空为0

MSS选项:Maximum segment size: 1460 bytes

其中:

0x02:Kind: MSS size (2)

0x04:Length: 4

0x05 b4:MSS Value: 1460

3、TCP连接第三次握手

Summary:

103 4.727668000 10.108.203.52 10.108.203.50 TCP 60 6533 →http [ACK] Seq=1 Ack=1 Win=262144 Len=0

Detail:

先分析IP包,首部2E部分中又包含报文段不能分片的选项,与前面两个一样

6553,对方浏览器TCP的端口号

,Apache的TCP端口号

和前一个报文的确认号是一样的

3343311029,是上一个序号的值加1

要分开来说:即:0101 0000 0001 0000

其中前4bit位是:5表示首部数据长度是20B,终于是标准的长度了

向后6bit保留置空为0

后面六个:

第一个:0,URG:表示不激活后面的紧急指针字段

第二个:1,ACK:表示确认激活确认号字段

第三个:0,PSH:表示不推送

第四个:0,RST:表示不复位

第五个:0,SYN:表示不是同步请求或者同步确认,结合ACK表示这是一个确认报文

第六个:0,FIN:表示这不是一个结束相关报文

窗口大小:这里是0x04 00即:1024,表示自己(浏览器)可以接受的窗口值是1024,很

0xff ff窗口值呢,怎么现在又突然少了,纳闷!

帧的最小长度46字节故填充这八个字节为0

相关主题