在这一部分,我们通过与远程服务器之间发送 150KB 的文件来分析 TCP 数据包的发送和接收。研究内容包括:
- TCP利用序列号和确认号来提供的可靠数据传输
- TCP 拥塞控制算法中的慢启动和拥塞避免
- TCP 协议的流控制策略
- 如何建立 TCP 连接
- TCP 连接的性能(吞吐量和往返时间)
具体步骤为:
-
抓取传输到远程服务器的 TCP 数据包
a) 打开 web 浏览器,进入:
http://gaia.cs.umass.edu/wireshark-labs/alice.txt
复制这篇文章 Alice in Wonderland 到电脑。
直接复制文字到本地即可,也可以单击鼠标右键,选择“网页另存为”,保存txt文件。
b) 接下来访问:
http://gaia.cs.umass.edu/wireshark-labs/TCP-wireshark-file1.html
如下图:
接下来,点击“浏览”,选择在上一步中保存的txt文件,但不点击upload按钮。不要关闭浏览器。
c) 启动Wireshark,现在开始进行数据包捕获。然后在网络封包分析和数据包捕获选项页面点击“OK”。
d) 返回浏览器,点击“Upload alice.txt file”按钮来更新文件到服务器。一旦这个文件被更新,会有一条恭喜信息。
e) 现在停止网络封包分析和数据捕获。网络封包分析窗口如下所示:
f) 很意外地,发现有52.114.77.164与168.63.202.111这两个IP地址的报文,干扰了我们的判断。对这部分问题的处理见如下链接:
【解决方案】使用Wireshark工具抓取TCP数据包时为什么遇到了52.114.77.164与168.63.202.111?g) 再次启动Wireshark,尝试捕获报文。结果如下。
下图为实验指导书中给出的结果。
与实验指导书中给出的结果进行对比,二者一致,所有的TCP报文,源地址与目的地址只有192.168.0.101与128.119.245.12,前者为本机IP地址,后者为服务器IP地址,捕获成功。 -
分析建立 TCP 连接的过程。
从捕获到的TCP报文入手,结合课程所学,进行分析。
a) 根据课程所学,我们知道,TCP通过三次握手建立连接。
步骤1:客户机向服务器发送 TCP SYN报文段
· 指定初始序号
· 没有数据
步骤2:服务器收到SYN报文段, 用SYNACK报文段回复
· 服务器为该连接分配缓冲区和变量
· 指定服务器初始序号
步骤3:客户机接收到 SYNACK, 用ACK报文段回复,可能包含数据具体过程如下图所示:
b) 下面分析捕获的报文。在捕获到的报文段中,可以看到非常明显的三次握手过程,即前三行:
观察第一个报文段为客户端向服务器发送的请求报文的内容,客户端端口为1412,服务器端口为80。这一报文的SYN=1, Seq=0,Len=0,表明该请求无数据,为连接请求。
第二个报文段是服务器向客户端发送的确认报文段, SYN=1,seq=0,ACK number=1,也就是期望下一段的Seq为1。服务器响应了来自主机1412端口的连接请求,向主机发送一个确认报文。该报文内容如下图所示。
第三个报文段是客户端向服务器发送的确认报文段。该报文段的Seq=1,与上一个报文段的 ACK number=1相对应。该报文段的ACK number=1,也就是期望下一段的Seq为1。该报文内容如下图所示:
在完成三次握手建立连接之后,便进行数据传输。 -
根据抓取的数据结果,分析 TCP 的基本结构和内容。
以下图所示的TCP报文为例:
Source Port:源端口号,这里是1113
Destination Port:目的端口号,这里是80
Sequence Number:序号,relative为相对序号,raw为真实序号
Acknowledgement number:确认号,与序号相同,有绝对与相对之分
Header Length:首部长度,这里为20字节
Flags:标志位,包括Syn、Fin等
Window size value:窗口大小
Checksum:检查和
Urgent Pointer:紧急指针 -
TCP 拥塞控制分析:
a) 在网络封包分析的“listing of captured-packets”窗口中选一个TCP段,然后选择Statistics->TCP Stream Graph-> Time-Sequence-Graph(Stevens)
b) 可以看到一个类似下面的情形
c) 使用 Time-Sequence-Graph(Stevens)绘图工具查看 TCP 数据段的时序图,找出TCP 慢启动的开始和结束以及拥塞避免阶段。
i. 首先,需要读懂TCP流图形的横纵坐标的含义。
a. 横坐标:时间序列
b. 纵坐标:受监控的TCP流在某个方向所传数据的字节流
ii. 综上,可以得出结论:
a. TCP流图形用于表示在单位时间内,受监控的TCP流在某个方向所传数据的字节流。
b. 斜线的斜率越大,表示文件的传输速率越高,反之,文件传输缓慢。
iii. 首先回顾一下拥塞避免:
iv. 结合以上两图,发现TCP流图中没有拥塞避免的阶段。0.9s左右速度骤减,推测原因出自网络状态不稳定。在慢启动还没有结束时,便已经上传完成了文件。慢启动对应成倍增加速率,拥塞控制对应线性增加速率。
d) 如何加大数据量,会怎样呢?加大数据量,重复上述步骤,结果如下。
红框内为拥塞避免阶段,观察到每个RTT内,线性增加速率。同时观察到重传现象。慢启动过程与拥塞避免符合我们之前的分析。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41112170/article/details/106546348