标签:
杂谈 |
- 实验目的
掌握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、2字节值为06 0d,十进制为1549,代表源端口号为1549。
- 第3、4字节值为13 89,十进制为5001,代表目的端口号为5001。
- 第5、6、7、8字节值为38 2c 7d 22,十进制为942439714,代表该TCP报文序号为942439714。
- 第9、10、11、12字节值为1c 94 ef 83,十进制为479522691,代表该TCP数据报的确认序号为479522691。
- 第13字节值为80,代表该TCP报文的首部长度为32字节,即有12字节的选项内容。
- 第14字节值为10,后六位为“010000”,分别对应六个控制位,表明ACK有效,其余各位均无效。
- 第15、16字节是窗口字段,其数据值为80 52,转换成十进制数为32850,表明接收方期望收到最多32850字节。
- 第17、18字节值为88 e7,代表校验和,其计算方法如下:
和UDP类似,校验和不仅包含整个TCP数据报,还包括了一个伪首部,伪首部包含源IP地址,目的IP地址,协议号及TCP数据报的总长度。
首先忽略校验和,即将其值置为00 00,然后将首部各位按2个字节相加如下:
- 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,可见,检验正确。
- 第19、20字节值为00 00,代表是紧急指针字段,因为该TCP报文的控制位URG置0表示无效,所以紧急指针字段也无效。
- 面24个字节均为选项数据。
完成了对TCP协议的分析之后,接下来是对TCP包序号和确认序号的分析,抓包数据如下图:
http://araleii.com/wp-content/uploads/2015/04/TCP_5-300x147.png
前三帧数据为三次握手建立连接的过程:
- 第1帧数据SEQ=942439713,从端口1549向端口5001发送的连接请求。
- 第2帧数据ACK=942439714,为第二次握手数据报,代表收到了序号为942439714-1的报文,来自端口1549,期望收到的下一条报文序号为942439714。SEQ=479522690,是从端口5001向端口1549发送的回应连接请求的报文的起始序号。
- 第3帧数据是ACK=479522691,是第三次握手数据报,代表收到了序号为479522691-1的报文,来自端口5001。
- 第4帧数据报SEQ=942439714,从端口1549向端口5001发送,数据长度为1024字节, ACK值和之前一样。
- 第 5 帧数据报SEQ=942440738,原因是942439714+1024=942440738,ACK值和之前一样,从端口1549向端口5001发送,数据长度为1448字节。
- 第6帧数据ACK=942442186,从端口5001发向端口1549,代表收到序号为942442186-1的报文,即确认收到数据字节流最后字节编号为942442186-1的报文,可以发现,改值等于第5帧数据报的序号加上第5帧数据长度减1,即第5帧数据报最后一个字节的序号。
- 第7帧数据是端口1549向端口5001发送数据,数据长度为1448字节,SEQ=942442186,等于第5帧数据报的序号加上第5帧数据长度,即942440738+1448=942442186。ACK不变。
最后是挥手释放连接的4帧报文。
- 第8帧SEQ=942443634,从端口1549发向端口5001,数据长度为1200字节,ACK不变。
- 第9帧ACK=942444835,表明收到了序号为942444836-1的报文,该帧数据是端口5001确认收到端口1549的请求释放连接数据,表示确认收到数据字节流最后字节编号为942444836-1的报文,即第8帧数据报的序号加上第8帧数据长度再减1。
- 第10、11帧的计算方法和第8,9帧相同。
总的来说,本条报文序号为S,长度为L的话,则下一条报文的序号为S+L。如果确认序号为A,则表明收到字节流中最后字节为A-1的报文,同事也是期望收到的下一个数据报的第一个字节的编号。
接下来是三个要回到的问题:
问题一:找到建立连接的3次握手数据报,和释放连接的4次挥手数据报。如下图所示:
http://araleii.com/wp-content/uploads/2015/04/TCP_7-300x19.png
问题二:在连接建立期间,TCP客户机和TCP服务器告诉对方它们进行数据传送所用的初始序号,请问双方正式传送用户数据的第一个数据包的序号是多少?
问题三: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
问题四:建立一个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