🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀计算机网络_十二月的猫的博客-CSDN博客💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光
目录
1. 实验目的
2. 实验环境
3. 实验过程
3.1 Capture a Trace 捕获
3.2 Inspect the Trace 检查捕获
3.3 TCP Segment Structure
3.4 TCP三次握手
3.5 TCP四次挥手
3.6 TCP数据传输
4. 问题回答
5. 自我探索
6. 总结
本系列重点针对山东大学-软件学院-计算机网络实验的任务。
希望通过实验,一方面加强大家对理论知识的认识,另一方面提升大家的动手能力。
也希望我的博客能够给学弟学妹们的学习提供一些帮助。
1. 实验目的
- 熟悉使用wireshark软件进行抓取TCP数据包 ;
- 分析抓取到的TCP数据包,掌握TCP数据包结构、TCP数据包各字段的含义;
- 掌握TCP连接建立和释放的步骤;
- 掌握TCP数据传输过程;
2. 实验环境
· wireshark;· wget :获取web资源。
· Browser:本次实验用web浏览器获得页面作为工作负载,查找、获取页面。
3. 实验过程
3.1 Capture a Trace 捕获
1.使用一个中等大小的资源URL,且是HTTP(非HTTPS):提供的资源URL(http://p4.qhimg.com/bdm/0_0_100/t010fae11f356641191.jpg)
2.命令行下载资源:
使用 wget
命令来下载该资源。输入以下命令:
wget http://p4.qhimg.com/bdm/0_0_100/t010fae11f356641191.jpg
这条命令会使用 HTTP 协议从指定的 URL 下载该 JPEG 图片。
3. 打开 Wireshark 并设置过滤器:
在 Wireshark 中,设置一个过滤器以捕获与该 URL 相关的 TCP 流量。您可以使用以下过滤器:
tcp and host p4.qhimg.com
该过滤器会显示所有与 p4.qhimg.com
主机进行 TCP 通信的网络包。
4. 开始捕获数据包:
- 打开 Wireshark。
- 选择合适的网络接口进行数据包捕获。
- 在 Wireshark 的过滤框中输入
tcp and host p4.qhimg.com
,然后按回车键应用过滤器。 - 点击“开始捕获”按钮,Wireshark 将捕获和显示所有与
p4.qhimg.com
的 TCP 连接相关的数据包。
3.2 Inspect the Trace 检查捕获
选取一个TCP报文,检查结果如下:
可以知道:
- source port 源端口 2B:很有可能是80,因为web服务器的端口号是80;
- destination port 目的端口 2B:source port 和 destination port是TCP在IP地址以外添加的地址。
- sequence number 序号4B:保证TCP可靠性传输的关键,记录第一个有效负载字节在字节流中的位置;
- acknowledge number 确认号 4B:每一个ACK对应一个确认号,指明下一个期待收到的字节序号,同时表明该序号之前的所有数据都已经正确接收。只有当ACK位=1时有效。建连时SYN报文的ACK位=0;
- TCP header length TCP首部长度 4b:TCP header 有多少个4B,例如这个TCP数据包的TCP header length显示为0101,说明这个TCP header长度为5(0101)*4 = 20B。TCP报文默认大小为20B。
- flags 标志位 6b:CWR、ECE用于IP header的ECN字段;
- URG:标志紧急指针是否有效;
- ACK标志确认号是否有效;
- PSH提示接收端应用程序立即将接收缓冲区数据取走;
- RST处理异常连接,告知连接不一致的一方连接还没有建立好要求重新建连,RST=1复位报文段
- SYN用于同步,SYN=1 称为同步报文段;(1、2握手)
- FIN通知对方要关闭连接,FIN=1称为结束报文段。(1、3挥手)
- window size 窗口大小 2B:流量控制,发送方发送大量数据时,接收方利用滑动窗口进行缓冲。
- checksum 校验和 2B:和UDP检验相同;
- options选项:建连时用于协调双方支持的内容;
3.3 TCP Segment Structure
在跟踪中间的任何地方选择一个协议列为TCP的长包。在中间面板中展开TCP协议部分(通过使用“+”扩展器或图标)。除HTTP响应的第一个HTTP GET包和最后一个HTTP响应包外,所有的报文都应该被列为TCP。选择一个长数据包可以确保我们看到的是从服务器到你的计算机的下载数据包。查看协议层,在TCP块之前看到一个IP块。这是因为TCP段是在IP中携带的。下表是TCP部分的各字段解释。
3.4 TCP三次握手
记sequence number为Seq;acknowledge number为Ack;
- 第一次握手:客户端发送一个SYN同步报文段(SYN=1的TCP数据包,包含初始序列号Seq=J),请求与服务器建立连接;
- 第二次握手:服务器发送SYN+ACK段(SYN=ACK=1的TCP数据包,序列号Seq=K,确认号Ack=J+1),确认号=J+1表明前J+1之前的0~J都已经正确接收,已经接收了客户端发来的SYN段;
- 第三次握手:客户端发送一个ACK段给服务器(ACK=1,Ack=K+1),表示已经正确接收服务器发来的SYN+ACK段;
具体图如下:
在WireShark中如下:
3.5 TCP四次挥手
四次挥手的过程:
- 第一次挥手:客户端发送结束报文段(FIN=1,Seq=U)给服务器。
- 第二次挥手:服务器收到第一次挥手的数据包之后,向客户端发送确认报文(ACK=1,Seq=V,Ack=U+1),允许断开连接;
- 第三次挥手:服务器发送确认报文之后,继续发送结束报文段(FIN=1,ACK=1,Seq=V,Ack=U+1)给客户端;
- 第四次挥手:客户端接收到FIN结束报文段之后,发送确认报文(ACK=1,Seq=U+1,Ack=W+1)给服务器,告知服务器已经接收到结束报文。
服务器接收到这条ACK确认报文之后,释放TCP连接的相关资源(缓存和变量),客户端等待一段时间之后,释放处于客户端的缓存和变量。
等待一段时间TIME-WAIT:① 保证第四次挥手。客户端不确认第四次挥手时发送给服务器的ACK确认报文是否顺利到达服务器。如果没有顺利到达,服务器会重新进行第三次挥手,直到正确接收客户端第四次挥手的ACK确认报文段。所以不可以立即释放客户端资源,这会导致服务器重新进行的第三次挥手失败。② 防止新连接中出现旧连接的报文段。四次挥手完成之后,不代表之前通过这个连接发送的所有数据都已经处理完了,有些可能在网络中传输。如果立即释放资源,然后再在用一对源端口、目的端口建立TCP连接,可能导致上一次连接中遗留在网络中的报文在新连接中到达,会被当成是新连接的数据进行处理,这就产生了错误。所以需要等待2MSL时长,确保旧连接的报文都从网络中消失。
四次挥手:TCP是全双工的,当客户端要关闭连接时,服务器要发送的数据不一定发完了,所以第二、三次挥手都是服务器完成的,第二次确认知道要关闭连接,第三次告知客户端服务器数据也发送完毕可以断开;CLOSE-WAIT等待服务器发送完数据;第四次挥手返回ACK报文段完才进入TIME-WAIT。因为结束时涉及数据有没有传送完这个问题,所以不同于建立连接时只用三次握手。
3.6 TCP数据传输
在wireshark里面点击统计-IO图标。弹出界面如下:
接下来依次进行以下操作
- 间隔选择1分钟
- Y轴单位改为Bits
- Display Filter:填入tcp.srcport==80
- 点击“+”,在新的条目的Display Filter里面填入tcp.dstport==80。最终得到两条线,青色的表示下载速率,红色的表示上传速率,如下所示:
4. 问题回答
问题1:在SYN数据包上,TCP包含了哪些选项字段以供跟踪。
答:ACK字段和SYN字段。
问题2:当TCP连接正常的时候,下载方向的粗略数据速率(以包/秒或位/秒为单位)是多少?
答:大约是50000bps
问题3:内容占下载率的百分比是多少?展示你的计算。
答:使用tcp.srcport==80 进行过滤,找到任意一个中间位置的大型包。可以看到,总的数据量为1514B=12112bits。而TCP携带的内容占1460B。所以内容占下载率的96.43%。
问题4:由于ACK报文,上传方向的粗略速率(比特/秒)是多少?
答:缩放坐标轴后可以看到,速率大约为21.7Kbps。
问题5:如果最近从服务器接收到的TCP段的序列号是X,那么下一个传输的TCP段携带的ACK号是什么?
答:下一个报文ACK号是X加上这个报文的长度segment length。
5. 自我探索
TCP拥塞控制:拥塞窗口cwnd(congestion window):发送方维护一个状态变量(即拥塞窗口),大小取决于网络的拥塞程度且动态变化。发送方自己的发送窗口=拥塞窗口;如果要考虑接收方的接受能力,发送窗口可能<拥塞窗口。
原则:只要网络没有出现拥塞(发送方没有按时收到ACK确认报文),就增大窗口;若出现拥塞减少拥塞窗口。
探索TCP可靠性机制:
1. 超时重传机制:超过时间还未收到ACK则重新发送。
2. 校验和:校验和错误时重传。
3. 序列号:序列号能够确认缺少了哪个位置的数据,保证按序到达,同时筛除重复数据。
4. 确认应答机制:ACK标志位=1时,检查Ack=U+1,说明前U个数据包都正确接收。
SACK: TCP的一个选项,允许TCP单独确认非连续片段,用于告知真正丢失的包,只重传丢失的片段。options字段中:SACKpermitted 当发送序列中某个数据包丢失,可通过SACK报文通知发送方这个丢了,发送方于是重新传丢失的包,而不是全部重发。
6. 总结
本文到这里就结束啦~~
如果觉得对你有帮助,辛苦友友点个赞哦~