加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

TCP抓包实验

(2015-04-20 17:11:37)
标签:

杂谈

 

  • 实验目的

掌握TCP协议的理论知识,理解TCP报文的首部各字段的含义和作用,深入理解TCP的序号/确认序号、三次握手建立连接、释放连接等概念。

 

  • 实验环境

Windows XP,Sniffer Pro,机房局域网。

 

  • 实验内容与要求
  • 学习掌握TCP协议的理论知识。
  • 学会发送和接收TCP报文的工具ttcpw的使用。
  • 学会用抓包工具捕获TCP报文。
  • 分析报文,深入理解TCP报文。

 

  • 实验步骤

1.使用两台主机,分别打开sniffer,设置好过滤器,准备抓包;

http://araleii.com/wp-content/uploads/2015/04/TCP_1-300x59.png

2.在其中一台主机上以下命令作为接收端;

http://araleii.com/wp-content/uploads/2015/04/TCP_2-300x59.png

3.在另一台主机上执行以下指令,向上述主机发出数据包;

http://araleii.com/wp-content/uploads/2015/04/TCP_3-300x147.png

完成抓包,保存包数据和截图。

 

  • 实验结果与分析

本次实验的结果与分析分为以下几部分:对TCP协议的分析,对TCP包序号和确认序号的分析,对TCP连接的建立和断开的分析。以及回答了握手包挥手包,序号,窗口以及时间的问题。

首先是对TCP协议进行分析,实验中某TCP包数据如下:

http://araleii.com/wp-content/uploads/2015/04/TCP_4-300x140.png

  1. 第1、2字节值为06 0d,十进制为1549,代表源端口号为1549。
  2. 第3、4字节值为13 89,十进制为5001,代表目的端口号为5001。
  3. 第5、6、7、8字节值为38 2c 7d 22,十进制为942439714,代表该TCP报文序号为942439714。
  4. 第9、10、11、12字节值为1c 94 ef 83,十进制为479522691,代表该TCP数据报的确认序号为479522691。
  5. 第13字节值为80,代表该TCP报文的首部长度为32字节,即有12字节的选项内容。
  6. 第14字节值为10,后六位为“010000”,分别对应六个控制位,表明ACK有效,其余各位均无效。
  7. 第15、16字节是窗口字段,其数据值为80 52,转换成十进制数为32850,表明接收方期望收到最多32850字节。
  8. 第17、18字节值为88 e7,代表校验和,其计算方法如下:

和UDP类似,校验和不仅包含整个TCP数据报,还包括了一个伪首部,伪首部包含源IP地址,目的IP地址,协议号及TCP数据报的总长度。

首先忽略校验和,即将其值置为00 00,然后将首部各位按2个字节相加如下:

  1. 0006+c0a8+01b0+c0a8+01b1+0017+060d+1389+382c+7d22+1c94+ef83+8010+8052+0000+0101+080a+0001+0dd4+0000+0000=d770b

然后用770b+000d=7718

最后用ffff-7718=88e7,可见,检验正确。

  1. 第19、20字节值为00 00,代表是紧急指针字段,因为该TCP报文的控制位URG置0表示无效,所以紧急指针字段也无效。
  2. 面24个字节均为选项数据。

 

完成了对TCP协议的分析之后,接下来是对TCP包序号和确认序号的分析,抓包数据如下图:

http://araleii.com/wp-content/uploads/2015/04/TCP_5-300x147.png

 

前三帧数据为三次握手建立连接的过程:

  1. 第1帧数据SEQ=942439713,从端口1549向端口5001发送的连接请求。
  2. 第2帧数据ACK=942439714,为第二次握手数据报,代表收到了序号为942439714-1的报文,来自端口1549,期望收到的下一条报文序号为942439714。SEQ=479522690,是从端口5001向端口1549发送的回应连接请求的报文的起始序号。
  3. 第3帧数据是ACK=479522691,是第三次握手数据报,代表收到了序号为479522691-1的报文,来自端口5001。
  4. 第4帧数据报SEQ=942439714,从端口1549向端口5001发送,数据长度为1024字节, ACK值和之前一样。
  5. 第 5 帧数据报SEQ=942440738,原因是942439714+1024=942440738,ACK值和之前一样,从端口1549向端口5001发送,数据长度为1448字节。
  6. 第6帧数据ACK=942442186,从端口5001发向端口1549,代表收到序号为942442186-1的报文,即确认收到数据字节流最后字节编号为942442186-1的报文,可以发现,改值等于第5帧数据报的序号加上第5帧数据长度减1,即第5帧数据报最后一个字节的序号。
  7. 第7帧数据是端口1549向端口5001发送数据,数据长度为1448字节,SEQ=942442186,等于第5帧数据报的序号加上第5帧数据长度,即942440738+1448=942442186。ACK不变。

最后是挥手释放连接的4帧报文。

  1. 第8帧SEQ=942443634,从端口1549发向端口5001,数据长度为1200字节,ACK不变。
  2. 第9帧ACK=942444835,表明收到了序号为942444836-1的报文,该帧数据是端口5001确认收到端口1549的请求释放连接数据,表示确认收到数据字节流最后字节编号为942444836-1的报文,即第8帧数据报的序号加上第8帧数据长度再减1。
  3. 第10、11帧的计算方法和第8,9帧相同。

 

总的来说,本条报文序号为S,长度为L的话,则下一条报文的序号为S+L。如果确认序号为A,则表明收到字节流中最后字节为A-1的报文,同事也是期望收到的下一个数据报的第一个字节的编号。

接下来是三个要回到的问题:

问题一:找到建立连接的3次握手数据报,和释放连接的4次挥手数据报。如下图所示:

 http://araleii.com/wp-content/uploads/2015/04/TCP_6-300x16.png

http://araleii.com/wp-content/uploads/2015/04/TCP_7-300x19.png

问题二:在连接建立期间,TCP客户机和TCP服务器告诉对方它们进行数据传送所用的初始序号,请问双方正式传送用户数据的第一个数据包的序号是多少?

              答:从图中可以看出,TCP客户机为942439713,TCP服务器为479522690。

 

问题三:TCP客户机和TCP服务器交换窗口大小各是多少?

答:如下图所示:

http://araleii.com/wp-content/uploads/2015/04/TCP_8-300x159.png

 

http://araleii.com/wp-content/uploads/2015/04/TCP_9-300x100.png

 

              可见,客户机窗口大小为65535字节,服务器窗口大小为5840字节。

 

问题四:建立一个TCP连接所花费的时间是多少?

答:抓包分析结果如下图:

http://araleii.com/wp-content/uploads/2015/04/TCP_10-300x37.png

可见,建立连接花费的时间为0.001885S。

 

  • 心得与总结

本次实验对TCP数据报进行了抓包分析,首先对具体的TCP数据报数据进行了分析,加深了对TCP协议的理解,在计算TCP数据报的校验和的时候要注意伪首部的引入,主要目的是加上对地址的校验,其中需要加上TCP数据报的总长度,注意不是TCP首部长度。需要注意的是序号和确认序号的计算方式,也是TCP保持连接的基础。在分析3次握手数据报的时候要注意握手包占1个字节。滑动窗口控制是TCP很重要的一部分,在观察窗口大小的时候要注意可能有缩放因子,这样可以用16位表示更大的窗口。抓包的时候要注意计算机可能访问网络的各种进程,尽量都关闭,这样才能抓到较为纯净的数据报。

查看原文:http://araleii.com/archives/194

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有